de95f5c77138_migration_serpapi_api_key.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. """migration serpapi_api_key
  2. Revision ID: de95f5c77138
  3. Revises: 23db93619b9d
  4. Create Date: 2024-01-21 12:09:04.651394
  5. """
  6. from json import dumps, loads
  7. import sqlalchemy as sa
  8. from alembic import op
  9. # revision identifiers, used by Alembic.
  10. revision = 'de95f5c77138'
  11. down_revision = '23db93619b9d'
  12. branch_labels = None
  13. depends_on = None
  14. def upgrade():
  15. # ### commands auto generated by Alembic - please adjust! ###
  16. """
  17. 1. select all tool_providers
  18. 2. insert api_key to tool_provider_configs
  19. tool_providers
  20. - id
  21. - tenant_id
  22. - tool_name
  23. - encrypted_credentials
  24. {"api_key": "$KEY"}
  25. - created_at
  26. - updated_at
  27. tool_builtin_providers
  28. - id <- tool_providers.id
  29. - tenant_id <- tool_providers.tenant_id
  30. - user_id <- tenant_account_joins.account_id (tenant_account_joins.tenant_id = tool_providers.tenant_id and tenant_account_joins.role = 'owner')
  31. - encrypted_credentials <- tool_providers.encrypted_credentials
  32. {"serpapi_api_key": "$KEY"}
  33. - created_at <- tool_providers.created_at
  34. - updated_at <- tool_providers.updated_at
  35. """
  36. # select all tool_providers
  37. tool_providers = op.get_bind().execute(
  38. sa.text(
  39. "SELECT * FROM tool_providers WHERE tool_name = 'serpapi'"
  40. )
  41. ).fetchall()
  42. # insert api_key to tool_provider_configs
  43. for tool_provider in tool_providers:
  44. id = tool_provider['id']
  45. tenant_id = tool_provider['tenant_id']
  46. encrypted_credentials = tool_provider['encrypted_credentials']
  47. try:
  48. credentials = loads(encrypted_credentials)
  49. api_key = credentials['api_key']
  50. credentials['serpapi_api_key'] = api_key
  51. credentials.pop('api_key')
  52. encrypted_credentials = dumps(credentials)
  53. except Exception as e:
  54. print(e)
  55. continue
  56. # get user_id
  57. user_id = op.get_bind().execute(
  58. sa.text(
  59. "SELECT account_id FROM tenant_account_joins WHERE tenant_id = :tenant_id AND role = 'owner'"
  60. ),
  61. tenant_id=tenant_id
  62. ).fetchone()['account_id']
  63. created_at = tool_provider['created_at']
  64. updated_at = tool_provider['updated_at']
  65. # insert to tool_builtin_providers
  66. # check if exists
  67. exists = op.get_bind().execute(
  68. sa.text(
  69. "SELECT * FROM tool_builtin_providers WHERE tenant_id = :tenant_id AND provider = 'google'"
  70. ),
  71. tenant_id=tenant_id
  72. ).fetchone()
  73. if exists:
  74. continue
  75. op.get_bind().execute(
  76. sa.text(
  77. "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)"
  78. ),
  79. id=id,
  80. tenant_id=tenant_id,
  81. user_id=user_id,
  82. provider='google',
  83. encrypted_credentials=encrypted_credentials,
  84. created_at=created_at,
  85. updated_at=updated_at
  86. )
  87. # ### end Alembic commands ###
  88. def downgrade():
  89. # ### commands auto generated by Alembic - please adjust! ###
  90. pass
  91. # ### end Alembic commands ###