| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 
                        - """migration serpapi_api_key
 - 
 - Revision ID: de95f5c77138
 - Revises: 23db93619b9d
 - Create Date: 2024-01-21 12:09:04.651394
 - 
 - """
 - from json import dumps, loads
 - 
 - import sqlalchemy as sa
 - from alembic import context, op
 - 
 - # revision identifiers, used by Alembic.
 - revision = 'de95f5c77138'
 - down_revision = '23db93619b9d'
 - branch_labels = None
 - depends_on = None
 - 
 - 
 - def upgrade():
 -     # ### commands auto generated by Alembic - please adjust! ###
 -     """
 -     1. select all tool_providers
 -     2. insert api_key to tool_provider_configs
 - 
 -     tool_providers
 -     - id
 -     - tenant_id
 -     - tool_name
 -     - encrypted_credentials
 -         {"api_key": "$KEY"}
 -     - created_at
 -     - updated_at
 - 
 -     tool_builtin_providers
 -     - id <- tool_providers.id
 -     - tenant_id <- tool_providers.tenant_id
 -     - user_id <- tenant_account_joins.account_id (tenant_account_joins.tenant_id = tool_providers.tenant_id and tenant_account_joins.role = 'owner')
 -     - encrypted_credentials <- tool_providers.encrypted_credentials
 -         {"serpapi_api_key": "$KEY"}
 -     - created_at <- tool_providers.created_at
 -     - updated_at <- tool_providers.updated_at
 -     """
 - 
 -     # in alembic's offline mode (with --sql option), skip data operations and output comments describing the migration to raw sql
 -     if context.is_offline_mode():
 -         print(f"    /*{upgrade.__doc__}*/\n")
 -         return
 - 
 -     # select all tool_providers
 -     tool_providers = op.get_bind().execute(
 -         sa.text(
 -             "SELECT * FROM tool_providers WHERE tool_name = 'serpapi'"
 -         )
 -     ).fetchall()
 - 
 -     # insert api_key to tool_provider_configs
 -     for tool_provider in tool_providers:
 -         id = tool_provider['id']
 -         tenant_id = tool_provider['tenant_id']
 -         encrypted_credentials = tool_provider['encrypted_credentials']
 - 
 -         try:
 -             credentials = loads(encrypted_credentials)
 -             api_key = credentials['api_key']
 -             credentials['serpapi_api_key'] = api_key
 -             credentials.pop('api_key')
 -             encrypted_credentials = dumps(credentials)
 -         except Exception as e:
 -             print(e)
 -             continue
 - 
 -         # get user_id
 -         user_id = op.get_bind().execute(
 -             sa.text(
 -                 "SELECT account_id FROM tenant_account_joins WHERE tenant_id = :tenant_id AND role = 'owner'"
 -             ),
 -             tenant_id=tenant_id
 -         ).fetchone()['account_id']
 - 
 -         created_at = tool_provider['created_at']
 -         updated_at = tool_provider['updated_at']
 - 
 -         # insert to tool_builtin_providers
 -         # check if exists
 -         exists = op.get_bind().execute(
 -             sa.text(
 -                 "SELECT * FROM tool_builtin_providers WHERE tenant_id = :tenant_id AND provider = 'google'"
 -             ),
 -             tenant_id=tenant_id
 -         ).fetchone()
 -         if exists:
 -             continue
 - 
 -         op.get_bind().execute(
 -             sa.text(
 -                 "INSERT INTO tool_builtin_providers (id, tenant_id, user_id, provider, encrypted_credentials, created_at, updated_at) VALUES (:id, :tenant_id, :user_id, :provider, :encrypted_credentials, :created_at, :updated_at)"
 -             ),
 -             id=id,
 -             tenant_id=tenant_id,
 -             user_id=user_id,
 -             provider='google', 
 -             encrypted_credentials=encrypted_credentials,
 -             created_at=created_at,
 -             updated_at=updated_at
 -         )
 -         
 -     # ### end Alembic commands ###
 - 
 - 
 - def downgrade():
 -     # ### commands auto generated by Alembic - please adjust! ###
 -     pass
 -     # ### end Alembic commands ###
 
 
  |