MindsDB 25.4.5.0__py3-none-any.whl → 25.5.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of MindsDB might be problematic. Click here for more details.

Files changed (350) hide show
  1. mindsdb/__about__.py +1 -1
  2. mindsdb/__main__.py +215 -185
  3. mindsdb/api/a2a/__init__.py +0 -0
  4. mindsdb/api/a2a/__main__.py +114 -0
  5. mindsdb/api/a2a/a2a_client.py +439 -0
  6. mindsdb/api/a2a/agent.py +308 -0
  7. mindsdb/api/a2a/common/__init__.py +0 -0
  8. mindsdb/api/a2a/common/client/__init__.py +4 -0
  9. mindsdb/api/a2a/common/client/card_resolver.py +21 -0
  10. mindsdb/api/a2a/common/client/client.py +86 -0
  11. mindsdb/api/a2a/common/server/__init__.py +4 -0
  12. mindsdb/api/a2a/common/server/server.py +164 -0
  13. mindsdb/api/a2a/common/server/task_manager.py +287 -0
  14. mindsdb/api/a2a/common/server/utils.py +28 -0
  15. mindsdb/api/a2a/common/types.py +365 -0
  16. mindsdb/api/a2a/constants.py +9 -0
  17. mindsdb/api/a2a/run_a2a.py +129 -0
  18. mindsdb/api/a2a/task_manager.py +594 -0
  19. mindsdb/api/executor/command_executor.py +49 -28
  20. mindsdb/api/executor/datahub/classes/response.py +5 -2
  21. mindsdb/api/executor/datahub/datanodes/information_schema_datanode.py +8 -0
  22. mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
  23. mindsdb/api/executor/datahub/datanodes/system_tables.py +10 -13
  24. mindsdb/api/executor/planner/query_planner.py +14 -2
  25. mindsdb/api/executor/sql_query/result_set.py +185 -52
  26. mindsdb/api/executor/sql_query/sql_query.py +1 -1
  27. mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +11 -13
  28. mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
  29. mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
  30. mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
  31. mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
  32. mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
  33. mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
  34. mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
  35. mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
  36. mindsdb/api/http/initialize.py +118 -85
  37. mindsdb/api/http/namespaces/analysis.py +17 -4
  38. mindsdb/api/http/namespaces/file.py +8 -2
  39. mindsdb/api/http/namespaces/sql.py +13 -27
  40. mindsdb/api/http/namespaces/tree.py +1 -1
  41. mindsdb/api/http/start.py +7 -2
  42. mindsdb/api/mcp/start.py +42 -5
  43. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
  44. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
  45. mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
  46. mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
  47. mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +86 -123
  48. mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
  49. mindsdb/api/mysql/mysql_proxy/utilities/exceptions.py +0 -4
  50. mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
  51. mindsdb/api/postgres/postgres_proxy/postgres_packets/postgres_message_formats.py +2 -2
  52. mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
  53. mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
  54. mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
  55. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
  56. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
  57. mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
  58. mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
  59. mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
  60. mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
  61. mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
  62. mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
  63. mindsdb/integrations/handlers/bigquery_handler/requirements.txt +1 -0
  64. mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
  65. mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
  66. mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
  67. mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
  68. mindsdb/integrations/handlers/chromadb_handler/requirements.txt +1 -0
  69. mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
  70. mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
  71. mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
  72. mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
  73. mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
  74. mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
  75. mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
  76. mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
  77. mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
  78. mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
  79. mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
  80. mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
  81. mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
  82. mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
  83. mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
  84. mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
  85. mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
  86. mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
  87. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
  88. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
  89. mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
  90. mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
  91. mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
  92. mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
  93. mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
  94. mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
  95. mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
  96. mindsdb/integrations/handlers/email_handler/settings.py +0 -1
  97. mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
  98. mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
  99. mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
  100. mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
  101. mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
  102. mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
  103. mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
  104. mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
  105. mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
  106. mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
  107. mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
  108. mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
  109. mindsdb/integrations/handlers/gmail_handler/requirements.txt +1 -0
  110. mindsdb/integrations/handlers/google_analytics_handler/requirements.txt +2 -1
  111. mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
  112. mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
  113. mindsdb/integrations/handlers/google_books_handler/requirements.txt +1 -1
  114. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
  115. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
  116. mindsdb/integrations/handlers/google_calendar_handler/requirements.txt +1 -0
  117. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
  118. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
  119. mindsdb/integrations/handlers/google_content_shopping_handler/requirements.txt +1 -1
  120. mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
  121. mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
  122. mindsdb/integrations/handlers/google_fit_handler/requirements.txt +2 -0
  123. mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
  124. mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
  125. mindsdb/integrations/handlers/google_search_handler/requirements.txt +1 -1
  126. mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
  127. mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
  128. mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
  129. mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
  130. mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
  131. mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
  132. mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
  133. mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
  134. mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
  135. mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
  136. mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
  137. mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
  138. mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
  139. mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
  140. mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
  141. mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
  142. mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
  143. mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
  144. mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
  145. mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
  146. mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
  147. mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
  148. mindsdb/integrations/handlers/jira_handler/jira_handler.archived.py +75 -0
  149. mindsdb/integrations/handlers/jira_handler/jira_handler.py +113 -38
  150. mindsdb/integrations/handlers/jira_handler/jira_tables.py +229 -0
  151. mindsdb/integrations/handlers/jira_handler/requirements.txt +1 -0
  152. mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
  153. mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
  154. mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
  155. mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
  156. mindsdb/integrations/handlers/lightfm_handler/requirements.txt +1 -0
  157. mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
  158. mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -3
  159. mindsdb/integrations/handlers/lightwood_handler/requirements.txt +4 -4
  160. mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
  161. mindsdb/integrations/handlers/lindorm_handler/requirements.txt +1 -0
  162. mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
  163. mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
  164. mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
  165. mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
  166. mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
  167. mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
  168. mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
  169. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
  170. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
  171. mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
  172. mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
  173. mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
  174. mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
  175. mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
  176. mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
  177. mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
  178. mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
  179. mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
  180. mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
  181. mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
  182. mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
  183. mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
  184. mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
  185. mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
  186. mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
  187. mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
  188. mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
  189. mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
  190. mindsdb/integrations/handlers/ms_one_drive_handler/requirements.txt +2 -0
  191. mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
  192. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
  193. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
  194. mindsdb/integrations/handlers/ms_teams_handler/requirements.txt +3 -1
  195. mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
  196. mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
  197. mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
  198. mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
  199. mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
  200. mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
  201. mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
  202. mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
  203. mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
  204. mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
  205. mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
  206. mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
  207. mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
  208. mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
  209. mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
  210. mindsdb/integrations/handlers/openai_handler/openai_handler.py +5 -4
  211. mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
  212. mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
  213. mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
  214. mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
  215. mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
  216. mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
  217. mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
  218. mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
  219. mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
  220. mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
  221. mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
  222. mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
  223. mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
  224. mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
  225. mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
  226. mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
  227. mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
  228. mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
  229. mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
  230. mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
  231. mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
  232. mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
  233. mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
  234. mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
  235. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
  236. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
  237. mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
  238. mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
  239. mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
  240. mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
  241. mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
  242. mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
  243. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
  244. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
  245. mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
  246. mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
  247. mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
  248. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
  249. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
  250. mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
  251. mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
  252. mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
  253. mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
  254. mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
  255. mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
  256. mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
  257. mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
  258. mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
  259. mindsdb/integrations/handlers/snowflake_handler/requirements.txt +1 -1
  260. mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
  261. mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
  262. mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
  263. mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
  264. mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
  265. mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
  266. mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
  267. mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
  268. mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
  269. mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
  270. mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
  271. mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
  272. mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
  273. mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
  274. mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
  275. mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
  276. mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
  277. mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
  278. mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
  279. mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
  280. mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
  281. mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
  282. mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
  283. mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
  284. mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
  285. mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
  286. mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
  287. mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
  288. mindsdb/integrations/handlers/vertex_handler/requirements.txt +1 -0
  289. mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
  290. mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
  291. mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
  292. mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
  293. mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
  294. mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
  295. mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
  296. mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
  297. mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
  298. mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
  299. mindsdb/integrations/handlers/youtube_handler/requirements.txt +1 -0
  300. mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
  301. mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
  302. mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
  303. mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
  304. mindsdb/integrations/libs/response.py +67 -52
  305. mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
  306. mindsdb/integrations/utilities/files/file_reader.py +5 -2
  307. mindsdb/integrations/utilities/handler_utils.py +15 -3
  308. mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
  309. mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
  310. mindsdb/integrations/utilities/utils.py +3 -3
  311. mindsdb/interfaces/agents/agents_controller.py +164 -1
  312. mindsdb/interfaces/agents/constants.py +29 -2
  313. mindsdb/interfaces/agents/langchain_agent.py +18 -8
  314. mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
  315. mindsdb/interfaces/database/projects.py +1 -7
  316. mindsdb/interfaces/functions/controller.py +11 -14
  317. mindsdb/interfaces/functions/to_markdown.py +9 -124
  318. mindsdb/interfaces/knowledge_base/controller.py +47 -19
  319. mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +41 -15
  320. mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
  321. mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
  322. mindsdb/interfaces/knowledge_base/utils.py +10 -15
  323. mindsdb/interfaces/model/model_controller.py +0 -2
  324. mindsdb/interfaces/query_context/context_controller.py +66 -10
  325. mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
  326. mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
  327. mindsdb/interfaces/skills/skill_tool.py +202 -57
  328. mindsdb/interfaces/skills/sql_agent.py +238 -28
  329. mindsdb/interfaces/storage/fs.py +1 -0
  330. mindsdb/interfaces/variables/__init__.py +0 -0
  331. mindsdb/interfaces/variables/variables_controller.py +97 -0
  332. mindsdb/migrations/env.py +5 -7
  333. mindsdb/migrations/migrate.py +47 -9
  334. mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
  335. mindsdb/utilities/config.py +333 -220
  336. mindsdb/utilities/context.py +1 -1
  337. mindsdb/utilities/functions.py +0 -36
  338. mindsdb/utilities/langfuse.py +19 -10
  339. mindsdb/utilities/otel/__init__.py +9 -193
  340. mindsdb/utilities/otel/metric_handlers/__init__.py +5 -1
  341. mindsdb/utilities/otel/prepare.py +198 -0
  342. mindsdb/utilities/sql.py +83 -0
  343. mindsdb/utilities/starters.py +13 -0
  344. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +351 -338
  345. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +348 -322
  346. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
  347. mindsdb/api/mysql/mysql_proxy/classes/sql_statement_parser.py +0 -151
  348. mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
  349. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
  350. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
@@ -8,98 +8,92 @@ from mindsdb.utilities.render.sqlalchemy_render import SqlalchemyRender
8
8
  from mindsdb.integrations.libs.response import (
9
9
  HandlerStatusResponse as StatusResponse,
10
10
  HandlerResponse as Response,
11
- RESPONSE_TYPE
11
+ RESPONSE_TYPE,
12
12
  )
13
13
  from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE as ARG_TYPE
14
14
 
15
15
 
16
-
17
16
  import pandas as pd
18
- import IfxPyDbi as I
19
- from sqlalchemy_informix.ibmdb import InformixDialect
17
+ import IfxPyDbi as Ifx
18
+ from sqlalchemy_informix.ibmdb import InformixDialect
20
19
 
21
20
  logger = log.getLogger(__name__)
22
21
 
23
- class InformixHandler(DatabaseHandler):
24
22
 
23
+ class InformixHandler(DatabaseHandler):
25
24
 
26
- name= 'informix'
25
+ name = "informix"
27
26
 
28
27
  def __init__(self, name: str, connection_data: Optional[dict], **kwargs):
29
- ''' Initialize the handler
28
+ """Initialize the handler
30
29
  Args:
31
30
  name (str): name of particular handler instance
32
31
  connection_data (dict): parameters for connecting to the database
33
32
  **kwargs: arbitrary keyword arguments.
34
- '''
33
+ """
35
34
  super().__init__(name)
36
-
35
+
37
36
  self.kwargs = kwargs
38
37
  self.parser = parse_sql
39
- self.loging_enabled = connection_data['loging_enabled'] if 'loging_enabled' in connection_data else True
40
- self.server = connection_data['server']
41
- self.database = connection_data['database']
42
- self.user = connection_data['user']
43
- self.password = connection_data['password']
44
- self.schemaName = connection_data['schema_name']
45
- self.host = connection_data['host']
46
- self.port = connection_data['port']
38
+ self.loging_enabled = (
39
+ connection_data["loging_enabled"]
40
+ if "loging_enabled" in connection_data
41
+ else True
42
+ )
43
+ self.server = connection_data["server"]
44
+ self.database = connection_data["database"]
45
+ self.user = connection_data["user"]
46
+ self.password = connection_data["password"]
47
+ self.schemaName = connection_data["schema_name"]
48
+ self.host = connection_data["host"]
49
+ self.port = connection_data["port"]
47
50
  self.connString = (
48
- 'SERVER={0};'
49
- 'DATABASE={1};'
50
- 'HOST={2};'
51
- 'PORT={3};'
52
- 'UID={4};'
53
- 'PWD={5};').format(self.server, self.database, self.host, self.port, self.user, self.password)
54
-
55
-
56
-
51
+ "SERVER={0};" "DATABASE={1};" "HOST={2};" "PORT={3};" "UID={4};" "PWD={5};"
52
+ ).format(
53
+ self.server, self.database, self.host, self.port, self.user, self.password
54
+ )
57
55
 
58
56
  self.connection = None
59
57
  self.is_connected = False
60
-
61
-
58
+
62
59
  def connect(self):
63
- ''' Set up any connections required by the handler
60
+ """Set up any connections required by the handler
64
61
  Should return output of check_connection() method after attempting
65
62
  connection. Should switch self.is_connected.
66
63
  Returns:
67
64
  Connection Object
68
- '''
65
+ """
69
66
  if self.is_connected is True:
70
67
  return self.connection
71
68
 
72
69
  try:
73
- self.connection = I.connect(self.connString,'','')
74
-
75
- self.is_connected= True
76
- except Exception as e:
77
- logger.error(f'Error while connecting to {self.database}, {e}')
70
+ self.connection = Ifx.connect(self.connString, "", "")
78
71
 
72
+ self.is_connected = True
73
+ except Exception as e:
74
+ logger.error(f"Error while connecting to {self.database}, {e}")
79
75
 
80
76
  return self.connection
81
77
 
82
-
83
78
  def disconnect(self):
84
- ''' Close any existing connections
79
+ """Close any existing connections
85
80
  Should switch self.is_connected.
86
- '''
81
+ """
87
82
  if self.is_connected is False:
88
83
  return
89
84
  try:
90
85
  self.connection.close()
91
86
  self.is_connected = False
92
87
  except Exception as e:
93
- logger.error(f'Error while disconnecting to {self.database}, {e}')
94
-
95
- return
88
+ logger.error(f"Error while disconnecting to {self.database}, {e}")
96
89
 
90
+ return
97
91
 
98
92
  def check_connection(self) -> StatusResponse:
99
- ''' Check connection to the handler
93
+ """Check connection to the handler
100
94
  Returns:
101
95
  HandlerStatusResponse
102
- '''
96
+ """
103
97
  responseCode = StatusResponse(False)
104
98
  need_to_close = self.is_connected is False
105
99
 
@@ -107,7 +101,7 @@ class InformixHandler(DatabaseHandler):
107
101
  self.connect()
108
102
  responseCode.success = True
109
103
  except Exception as e:
110
- logger.error(f'Error connecting to database {self.database}, {e}!')
104
+ logger.error(f"Error connecting to database {self.database}, {e}!")
111
105
  responseCode.error_message = str(e)
112
106
  finally:
113
107
  if responseCode.success is True and need_to_close:
@@ -117,107 +111,93 @@ class InformixHandler(DatabaseHandler):
117
111
 
118
112
  return responseCode
119
113
 
120
-
121
114
  def native_query(self, query: str) -> StatusResponse:
122
- '''Receive raw query and act upon it somehow.
115
+ """Receive raw query and act upon it somehow.
123
116
  Args:
124
117
  query (Any): query in native format (str for sql databases,
125
118
  dict for mongo, etc)
126
119
  Returns:
127
120
  HandlerResponse
128
- '''
121
+ """
129
122
  need_to_close = self.is_connected is False
130
123
  conn = self.connect()
131
124
  cur = conn.cursor()
132
125
  try:
133
126
  cur.execute(query)
134
-
135
- if cur._result_set_produced :
136
- result = cur.fetchall()
127
+
128
+ if cur._result_set_produced:
129
+ result = cur.fetchall()
137
130
  response = Response(
138
131
  RESPONSE_TYPE.TABLE,
139
132
  data_frame=pd.DataFrame(
140
- result,
141
- columns=[x[0] for x in cur.description]
142
- )
133
+ result, columns=[x[0] for x in cur.description]
134
+ ),
143
135
  )
144
136
  else:
145
137
  response = Response(RESPONSE_TYPE.OK)
146
138
  if self.loging_enabled:
147
139
  self.connection.commit()
148
140
  except Exception as e:
149
- logger.error(f'Error running query: {query} on {self.database}')
150
- response = Response(
151
- RESPONSE_TYPE.ERROR,
152
- error_message=str(e)
153
- )
141
+ logger.error(f"Error running query: {query} on {self.database}")
142
+ response = Response(RESPONSE_TYPE.ERROR, error_message=str(e))
154
143
  if self.loging_enabled:
155
144
  self.connection.rollback()
156
145
 
157
146
  cur.close()
158
147
 
159
-
160
148
  if need_to_close is True:
161
149
  self.disconnect()
162
150
 
163
151
  return response
164
152
 
165
-
166
153
  def query(self, query: ASTNode) -> StatusResponse:
167
- '''Receive query as AST (abstract syntax tree) and act upon it somehow.
154
+ """Receive query as AST (abstract syntax tree) and act upon it somehow.
168
155
  Args:
169
156
  query (ASTNode): sql query represented as AST. May be any kind
170
157
  of query: SELECT, INTSERT, DELETE, etc
171
158
  Returns:
172
159
  HandlerResponse
173
- '''
174
-
175
-
160
+ """
176
161
 
177
162
  renderer = SqlalchemyRender(InformixDialect)
178
163
  query_str = renderer.get_string(query, with_failback=True)
179
164
  return self.native_query(query_str)
180
165
 
181
-
182
166
  def get_tables(self) -> StatusResponse:
183
- ''' Return list of entities
167
+ """Return list of entities
184
168
  Return list of entities that will be accesible as tables.
185
169
  Returns:
186
170
  HandlerResponse: shoud have same columns as information_schema.tables
187
171
  (https://dev.mysql.com/doc/refman/8.0/en/information-schema-tables-table.html)
188
172
  Column 'TABLE_NAME' is mandatory, other is optional.
189
- '''
173
+ """
190
174
  self.connect()
191
175
 
192
-
193
- result=self.connection.tables()
176
+ result = self.connection.tables()
194
177
  try:
195
178
  if result:
196
179
  response = Response(
197
180
  RESPONSE_TYPE.TABLE,
198
181
  data_frame=pd.DataFrame(
199
- [x['TABLE_NAME'] for x in result if x['TABLE_SCHEM']==self.schemaName],
200
- columns=['TABLE_NAME']
201
-
202
- )
182
+ [
183
+ x["TABLE_NAME"]
184
+ for x in result
185
+ if x["TABLE_SCHEM"] == self.schemaName
186
+ ],
187
+ columns=["TABLE_NAME"],
188
+ ),
203
189
  )
204
190
  else:
205
191
  response = Response(RESPONSE_TYPE.OK)
206
-
207
- except Exception as e:
208
- logger.error(f'Error running while getting table {e} on ')
209
- response = Response(
210
- RESPONSE_TYPE.ERROR,
211
- error_message=str(e)
212
- )
213
-
214
192
 
193
+ except Exception as e:
194
+ logger.error(f"Error running while getting table {e} on ")
195
+ response = Response(RESPONSE_TYPE.ERROR, error_message=str(e))
215
196
 
216
197
  return response
217
198
 
218
-
219
199
  def get_columns(self, table_name: str) -> StatusResponse:
220
- ''' Returns a list of entity columns
200
+ """Returns a list of entity columns
221
201
  Args:
222
202
  table_name (str): name of one of tables returned by self.get_tables()
223
203
  Returns:
@@ -226,93 +206,79 @@ class InformixHandler(DatabaseHandler):
226
206
  Column 'COLUMN_NAME' is mandatory, other is optional. Hightly
227
207
  recomended to define also 'DATA_TYPE': it should be one of
228
208
  python data types (by default it str).
229
- '''
230
-
231
- self.connect()
209
+ """
232
210
 
211
+ self.connect()
233
212
 
234
- result=self.connection.columns(table_name=table_name)
213
+ result = self.connection.columns(table_name=table_name)
235
214
  try:
236
215
  if result:
237
216
  response = Response(
238
217
  RESPONSE_TYPE.TABLE,
239
218
  data_frame=pd.DataFrame(
240
- [result[i]['COLUMN_NAME'] for i in range(len(result)) ],
241
- columns=['COLUMN_NAME']
242
-
243
- )
219
+ [result[i]["COLUMN_NAME"] for i in range(len(result))],
220
+ columns=["COLUMN_NAME"],
221
+ ),
244
222
  )
245
223
  else:
246
224
  response = Response(RESPONSE_TYPE.OK)
247
-
248
- except Exception as e:
249
- logger.error(f'Error running while getting table {e} on ')
250
- response = Response(
251
- RESPONSE_TYPE.ERROR,
252
- error_message=str(e)
253
- )
254
-
255
225
 
226
+ except Exception as e:
227
+ logger.error(f"Error running while getting table {e} on ")
228
+ response = Response(RESPONSE_TYPE.ERROR, error_message=str(e))
256
229
 
257
230
  return response
258
231
 
259
-
260
-
261
-
262
-
263
-
264
232
 
265
233
  connection_args = OrderedDict(
266
234
  server={
267
- 'type': ARG_TYPE.STR,
268
- 'description': '''
235
+ "type": ARG_TYPE.STR,
236
+ "description": """
269
237
  The server name you want to get connected.
270
- '''
238
+ """,
271
239
  },
272
240
  database={
273
- 'type': ARG_TYPE.STR,
274
- 'description': '''
241
+ "type": ARG_TYPE.STR,
242
+ "description": """
275
243
  The database name to use when connecting with the DB2 server.
276
- '''
244
+ """,
277
245
  },
278
246
  user={
279
- 'type': ARG_TYPE.STR,
280
- 'description': 'The user name used to authenticate with the DB2 server.'
247
+ "type": ARG_TYPE.STR,
248
+ "description": "The user name used to authenticate with the DB2 server.",
281
249
  },
282
250
  password={
283
- 'type': ARG_TYPE.STR,
284
- 'description': 'The password to authenticate the user with the DB2 server.'
251
+ "type": ARG_TYPE.STR,
252
+ "description": "The password to authenticate the user with the DB2 server.",
285
253
  },
286
254
  host={
287
- 'type': ARG_TYPE.STR,
288
- 'description': 'The host name or IP address of the DB2 server/database.'
255
+ "type": ARG_TYPE.STR,
256
+ "description": "The host name or IP address of the DB2 server/database.",
289
257
  },
290
258
  port={
291
- 'type': ARG_TYPE.INT,
292
- 'description': 'Specify port to connect DB2 through TCP/IP'
259
+ "type": ARG_TYPE.INT,
260
+ "description": "Specify port to connect DB2 through TCP/IP",
293
261
  },
294
262
  schema_name={
295
- 'type': ARG_TYPE.STR,
296
- 'description': 'Specify the schema name for showing tables '
263
+ "type": ARG_TYPE.STR,
264
+ "description": "Specify the schema name for showing tables ",
297
265
  },
298
266
  logging_enabled={
299
- 'type': ARG_TYPE.BOOL,
300
- 'description': '''
267
+ "type": ARG_TYPE.BOOL,
268
+ "description": """
301
269
  Used for COMMIT and ROLLBACK as this command works only for logging enabled database.
302
270
  Note: Its optional.
303
271
  Default is TRUE
304
- '''
305
- }
306
-
272
+ """,
273
+ },
307
274
  )
308
275
 
309
276
  connection_args_example = OrderedDict(
310
- server='server',
311
- database='stores_demo',
312
- user='informix',
313
- password='in4mix',
314
- host='127.0.0.1',
315
- port='9091',
316
- schema_name='Love'
317
-
277
+ server="server",
278
+ database="stores_demo",
279
+ user="informix",
280
+ password="in4mix",
281
+ host="127.0.0.1",
282
+ port="9091",
283
+ schema_name="Love",
318
284
  )
@@ -1,5 +1,7 @@
1
1
  import unittest
2
- from mindsdb.integrations.handlers.informix_handler.informix_handler import InformixHandler
2
+ from mindsdb.integrations.handlers.informix_handler.informix_handler import (
3
+ InformixHandler,
4
+ )
3
5
  from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
4
6
 
5
7
 
@@ -15,30 +17,30 @@ class InformixHandlerTest(unittest.TestCase):
15
17
  "password": "in4mix",
16
18
  "database": "demo",
17
19
  "schema_name": "love",
18
- "loging_enabled": False
20
+ "loging_enabled": False,
19
21
  }
20
22
  }
21
- cls.handler = InformixHandler('test_informix_handler', cls.kwargs)
23
+ cls.handler = InformixHandler("test_informix_handler", cls.kwargs)
22
24
 
23
25
  def test_0_connect(self):
24
26
  self.handler.connect()
25
27
 
26
28
  def test_1_drop_table(self):
27
29
  res = self.handler.query("DROP TABLE IF EXISTS LOVE;")
28
- assert res.type is not RESPONSE_TYPE.ERROR
30
+ assert res.type is not RESPONSE_TYPE.ERROR
29
31
 
30
32
  def test_2_create_table(self):
31
33
  res = self.handler.query("CREATE TABLE IF NOT EXISTS LOVE (LOVER varchar(20));")
32
- assert res.type is not RESPONSE_TYPE.ERROR
33
-
34
+ assert res.type is not RESPONSE_TYPE.ERROR
35
+
34
36
  def test_3_insert(self):
35
37
  res = self.handler.query("INSERT INTO LOVE VALUES('Hari');")
36
38
  assert res.type is not RESPONSE_TYPE.ERROR
37
-
39
+
38
40
  def test_4_get_tables(self):
39
41
  tables = self.handler.get_tables()
40
42
  assert tables.type is RESPONSE_TYPE.TABLE
41
-
43
+
42
44
  def test_5_select_query(self):
43
45
  query = "SELECT * FROM LOVE;"
44
46
  result = self.handler.native_query(query)
@@ -47,6 +49,6 @@ class InformixHandlerTest(unittest.TestCase):
47
49
  def test_5_check_connection(self):
48
50
  self.handler.check_connection()
49
51
 
50
-
51
- if __name__ == '__main__':
52
- unittest.main()
52
+
53
+ if __name__ == "__main__":
54
+ unittest.main()
@@ -7,4 +7,3 @@ __github__ = 'https://github.com/mindsdb/mindsdb'
7
7
  __pypi__ = 'https://pypi.org/project/mindsdb/'
8
8
  __license__ = 'MIT'
9
9
  __copyright__ = 'Copyright 2023- mindsdb'
10
-
@@ -17,6 +17,7 @@ from mindsdb.integrations.libs.response import (
17
17
 
18
18
  logger = log.getLogger(__name__)
19
19
 
20
+
20
21
  class IngresHandler(DatabaseHandler):
21
22
  """
22
23
  This handler handles connection and execution of the Ingres statements.
@@ -0,0 +1,75 @@
1
+ from mindsdb.integrations.libs.api_handler import APIHandler
2
+ from mindsdb.integrations.libs.response import (
3
+ HandlerStatusResponse as StatusResponse,
4
+ )
5
+ from mindsdb.utilities import log
6
+ from mindsdb.integrations.libs.api_handler_generator import APIResourceGenerator
7
+
8
+
9
+ logger = log.getLogger(__name__)
10
+
11
+
12
+ class JiraHandler(APIHandler):
13
+
14
+ def __init__(self, name=None, **kwargs):
15
+ """
16
+ Initialize the handler.
17
+ Args:
18
+ name (str): name of particular handler instance
19
+ connection_data (dict): parameters for connecting to the database
20
+ **kwargs: arbitrary keyword arguments.
21
+ """
22
+ super().__init__(name)
23
+ self.connection_data = kwargs.get("connection_data", {})
24
+
25
+ self.connection = None
26
+ self.is_connected = False
27
+
28
+ # todo store parsed data in files
29
+
30
+ self.api_resource_generator = APIResourceGenerator(
31
+ "https://developer.atlassian.com/cloud/jira/platform/swagger-v3.v3.json",
32
+ self.connection_data,
33
+ url_base='/rest/api/3/',
34
+ options={
35
+ 'offset_param': ['startAt', 'offset'],
36
+ 'total_column': ['totalEntryCount', 'total'],
37
+ 'check_connection_table': 'myself'
38
+ }
39
+ )
40
+
41
+ resource_tables = self.api_resource_generator.generate_api_resources(self)
42
+
43
+ for table_name, resource in resource_tables.items():
44
+ self._register_table(table_name, resource)
45
+
46
+ def __del__(self):
47
+ if self.is_connected is True:
48
+ self.disconnect()
49
+
50
+ def connect(self):
51
+ """
52
+ Set up the connection required by the handler.
53
+ Returns:
54
+ HandlerStatusResponse
55
+ """
56
+ return
57
+
58
+ def check_connection(self) -> StatusResponse:
59
+ """
60
+ Check connection to the handler.
61
+ Returns:
62
+ HandlerStatusResponse
63
+ """
64
+
65
+ response = StatusResponse(False)
66
+
67
+ try:
68
+ self.api_resource_generator.check_connection()
69
+ response.success = True
70
+ except Exception as e:
71
+ logger.error(f"Error connecting to Jira API: {e}!")
72
+ response.error_message = e
73
+
74
+ self.is_connected = response.success
75
+ return response