MindsDB 25.5.3.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 (310) hide show
  1. mindsdb/__about__.py +1 -1
  2. mindsdb/__main__.py +127 -79
  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 +47 -27
  20. mindsdb/api/executor/datahub/classes/response.py +5 -2
  21. mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
  22. mindsdb/api/executor/planner/query_planner.py +10 -1
  23. mindsdb/api/executor/sql_query/result_set.py +185 -52
  24. mindsdb/api/executor/sql_query/sql_query.py +1 -1
  25. mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +9 -12
  26. mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
  27. mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
  28. mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
  29. mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
  30. mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
  31. mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
  32. mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
  33. mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
  34. mindsdb/api/http/initialize.py +99 -83
  35. mindsdb/api/http/namespaces/analysis.py +3 -3
  36. mindsdb/api/http/namespaces/file.py +8 -2
  37. mindsdb/api/http/namespaces/sql.py +13 -27
  38. mindsdb/api/mcp/start.py +42 -5
  39. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
  40. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
  41. mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
  42. mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
  43. mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +82 -115
  44. mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
  45. mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
  46. mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
  47. mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
  48. mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
  49. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
  50. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
  51. mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
  52. mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
  53. mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
  54. mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
  55. mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
  56. mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
  57. mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
  58. mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
  59. mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
  60. mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
  61. mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
  62. mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
  63. mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
  64. mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
  65. mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
  66. mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
  67. mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
  68. mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
  69. mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
  70. mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
  71. mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
  72. mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
  73. mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
  74. mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
  75. mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
  76. mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
  77. mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
  78. mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
  79. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
  80. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
  81. mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
  82. mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
  83. mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
  84. mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
  85. mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
  86. mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
  87. mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
  88. mindsdb/integrations/handlers/email_handler/settings.py +0 -1
  89. mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
  90. mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
  91. mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
  92. mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
  93. mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
  94. mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
  95. mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
  96. mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
  97. mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
  98. mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
  99. mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
  100. mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
  101. mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
  102. mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
  103. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
  104. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
  105. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
  106. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
  107. mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
  108. mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
  109. mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
  110. mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
  111. mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
  112. mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
  113. mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
  114. mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
  115. mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
  116. mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
  117. mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
  118. mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
  119. mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
  120. mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
  121. mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
  122. mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
  123. mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
  124. mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
  125. mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
  126. mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
  127. mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
  128. mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
  129. mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
  130. mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
  131. mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
  132. mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
  133. mindsdb/integrations/handlers/jira_handler/jira_handler.py +4 -4
  134. mindsdb/integrations/handlers/jira_handler/jira_tables.py +9 -9
  135. mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
  136. mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
  137. mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
  138. mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
  139. mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
  140. mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -1
  141. mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
  142. mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
  143. mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
  144. mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
  145. mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
  146. mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
  147. mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
  148. mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
  149. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
  150. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
  151. mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
  152. mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
  153. mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
  154. mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
  155. mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
  156. mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
  157. mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
  158. mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
  159. mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
  160. mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
  161. mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
  162. mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
  163. mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
  164. mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
  165. mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
  166. mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
  167. mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
  168. mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
  169. mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
  170. mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
  171. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
  172. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
  173. mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
  174. mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
  175. mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
  176. mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
  177. mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
  178. mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
  179. mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
  180. mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
  181. mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
  182. mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
  183. mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
  184. mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
  185. mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
  186. mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
  187. mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
  188. mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
  189. mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
  190. mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
  191. mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
  192. mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
  193. mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
  194. mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
  195. mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
  196. mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
  197. mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
  198. mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
  199. mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
  200. mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
  201. mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
  202. mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
  203. mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
  204. mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
  205. mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
  206. mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
  207. mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
  208. mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
  209. mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
  210. mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
  211. mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
  212. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
  213. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
  214. mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
  215. mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
  216. mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
  217. mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
  218. mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
  219. mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
  220. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
  221. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
  222. mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
  223. mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
  224. mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
  225. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
  226. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
  227. mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
  228. mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
  229. mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
  230. mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
  231. mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
  232. mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
  233. mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
  234. mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
  235. mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
  236. mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
  237. mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
  238. mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
  239. mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
  240. mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
  241. mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
  242. mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
  243. mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
  244. mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
  245. mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
  246. mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
  247. mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
  248. mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
  249. mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
  250. mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
  251. mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
  252. mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
  253. mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
  254. mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
  255. mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
  256. mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
  257. mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
  258. mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
  259. mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
  260. mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
  261. mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
  262. mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
  263. mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
  264. mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
  265. mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
  266. mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
  267. mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
  268. mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
  269. mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
  270. mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
  271. mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
  272. mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
  273. mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
  274. mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
  275. mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
  276. mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
  277. mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
  278. mindsdb/integrations/libs/response.py +67 -52
  279. mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
  280. mindsdb/integrations/utilities/handler_utils.py +15 -3
  281. mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
  282. mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
  283. mindsdb/integrations/utilities/utils.py +3 -3
  284. mindsdb/interfaces/agents/agents_controller.py +164 -1
  285. mindsdb/interfaces/agents/constants.py +15 -0
  286. mindsdb/interfaces/agents/langchain_agent.py +16 -4
  287. mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
  288. mindsdb/interfaces/knowledge_base/controller.py +25 -0
  289. mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +13 -10
  290. mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
  291. mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
  292. mindsdb/interfaces/query_context/context_controller.py +66 -10
  293. mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
  294. mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
  295. mindsdb/interfaces/skills/skill_tool.py +202 -57
  296. mindsdb/interfaces/skills/sql_agent.py +205 -17
  297. mindsdb/interfaces/storage/fs.py +1 -0
  298. mindsdb/interfaces/variables/__init__.py +0 -0
  299. mindsdb/interfaces/variables/variables_controller.py +97 -0
  300. mindsdb/migrations/env.py +5 -7
  301. mindsdb/migrations/migrate.py +47 -7
  302. mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
  303. mindsdb/utilities/config.py +331 -219
  304. mindsdb/utilities/starters.py +13 -0
  305. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +641 -695
  306. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +309 -288
  307. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
  308. mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
  309. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
  310. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,16 @@
1
1
  import psutil
2
2
  import pandas
3
3
  from pandas import DataFrame
4
+ from pandas.api import types as pd_types
4
5
  from snowflake.sqlalchemy import snowdialect
5
6
  from snowflake import connector
6
7
  from snowflake.connector.errors import NotSupportedError
8
+ from snowflake.connector.cursor import SnowflakeCursor, ResultMetadata
7
9
 
8
- from mindsdb.utilities import log
9
10
  from mindsdb_sql_parser.ast.base import ASTNode
10
11
  from mindsdb_sql_parser.ast import Select, Identifier
11
12
 
13
+ from mindsdb.utilities import log
12
14
  from mindsdb.integrations.libs.base import DatabaseHandler
13
15
  from mindsdb.utilities.render.sqlalchemy_render import SqlalchemyRender
14
16
  from mindsdb.integrations.libs.response import (
@@ -61,10 +63,105 @@ def _map_type(internal_type_name: str) -> MYSQL_DATA_TYPE:
61
63
  if internal_type_name in db_types_list:
62
64
  return mysql_data_type
63
65
 
64
- logger.warning(f"Snowflake handler type mapping: unknown type: {internal_type_name}, use VARCHAR as fallback.")
66
+ logger.debug(f"Snowflake handler type mapping: unknown type: {internal_type_name}, use VARCHAR as fallback.")
65
67
  return MYSQL_DATA_TYPE.VARCHAR
66
68
 
67
69
 
70
+ def _make_table_response(result: DataFrame, cursor: SnowflakeCursor) -> Response:
71
+ """Build response from result and cursor.
72
+ NOTE: Snowflake return only 'general' type in description, so look on result's
73
+ DF types and use types from description only if DF type is 'object'
74
+
75
+ Args:
76
+ result (DataFrame): result of the query.
77
+ cursor (SnowflakeCursor): cursor object.
78
+
79
+ Returns:
80
+ Response: response object.
81
+ """
82
+ description: list[ResultMetadata] = cursor.description
83
+ mysql_types: list[MYSQL_DATA_TYPE] = []
84
+ for column in description:
85
+ column_dtype = result[column.name].dtype
86
+ description_column_type = connector.constants.FIELD_ID_TO_NAME.get(column.type_code)
87
+ if pd_types.is_integer_dtype(column_dtype):
88
+ column_dtype_name = column_dtype.name
89
+ if column_dtype_name in ('int8', 'Int8'):
90
+ mysql_types.append(MYSQL_DATA_TYPE.TINYINT)
91
+ elif column_dtype in ('int16', 'Int16'):
92
+ mysql_types.append(MYSQL_DATA_TYPE.SMALLINT)
93
+ elif column_dtype in ('int32', 'Int32'):
94
+ mysql_types.append(MYSQL_DATA_TYPE.MEDIUMINT)
95
+ elif column_dtype in ('int64', 'Int64'):
96
+ mysql_types.append(MYSQL_DATA_TYPE.BIGINT)
97
+ else:
98
+ mysql_types.append(MYSQL_DATA_TYPE.INT)
99
+ continue
100
+ if pd_types.is_float_dtype(column_dtype):
101
+ column_dtype_name = column_dtype.name
102
+ if column_dtype_name in ('float16', 'Float16'): # Float16 does not exists so far
103
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
104
+ elif column_dtype_name in ('float32', 'Float32'):
105
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
106
+ elif column_dtype_name in ('float64', 'Float64'):
107
+ mysql_types.append(MYSQL_DATA_TYPE.DOUBLE)
108
+ else:
109
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
110
+ continue
111
+ if pd_types.is_bool_dtype(column_dtype):
112
+ mysql_types.append(MYSQL_DATA_TYPE.BOOLEAN)
113
+ continue
114
+ if pd_types.is_datetime64_any_dtype(column_dtype):
115
+ mysql_types.append(MYSQL_DATA_TYPE.DATETIME)
116
+ series = result[column.name]
117
+ # snowflake use pytz.timezone
118
+ if series.dt.tz is not None and getattr(series.dt.tz, 'zone', 'UTC') != 'UTC':
119
+ series = series.dt.tz_convert('UTC')
120
+ result[column.name] = series.dt.tz_localize(None)
121
+ continue
122
+
123
+ if pd_types.is_object_dtype(column_dtype):
124
+ if description_column_type == 'TEXT':
125
+ # we can also check column.internal_size, if == 16777216 then it is TEXT, else VARCHAR(internal_size)
126
+ mysql_types.append(MYSQL_DATA_TYPE.TEXT)
127
+ continue
128
+ elif description_column_type == 'BINARY':
129
+ # if column.internal_size == 8388608 then BINARY, else VARBINARY(internal_size)
130
+ mysql_types.append(MYSQL_DATA_TYPE.BINARY)
131
+ continue
132
+ elif description_column_type == 'DATE':
133
+ mysql_types.append(MYSQL_DATA_TYPE.DATE)
134
+ continue
135
+ elif description_column_type == 'TIME':
136
+ mysql_types.append(MYSQL_DATA_TYPE.TIME)
137
+ continue
138
+
139
+ if description_column_type == 'FIXED':
140
+ if column.scale == 0:
141
+ mysql_types.append(MYSQL_DATA_TYPE.INT)
142
+ else:
143
+ # It is NUMBER, DECIMAL or NUMERIC with scale > 0
144
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
145
+ continue
146
+ elif description_column_type == 'REAL':
147
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
148
+ continue
149
+
150
+ mysql_types.append(MYSQL_DATA_TYPE.TEXT)
151
+
152
+ df = DataFrame(
153
+ result,
154
+ columns=[column.name for column in description],
155
+ )
156
+
157
+ return Response(
158
+ RESPONSE_TYPE.TABLE,
159
+ data_frame=df,
160
+ affected_rows=None,
161
+ mysql_types=mysql_types
162
+ )
163
+
164
+
68
165
  class SnowflakeHandler(DatabaseHandler):
69
166
  """
70
167
  This handler handles connection and execution of the Snowflake statements.
@@ -214,10 +311,7 @@ class SnowflakeHandler(DatabaseHandler):
214
311
  raise MemoryError('Not enought memory')
215
312
  # endregion
216
313
  if len(batches) > 0:
217
- response = Response(
218
- RESPONSE_TYPE.TABLE,
219
- pandas.concat(batches, ignore_index=True)
220
- )
314
+ response = _make_table_response(result=pandas.concat(batches, ignore_index=True), cursor=cur)
221
315
  else:
222
316
  response = Response(
223
317
  RESPONSE_TYPE.TABLE,
@@ -36,11 +36,11 @@ connection_args = OrderedDict(
36
36
  )
37
37
 
38
38
  connection_args_example = OrderedDict(
39
- username = "demo_user",
40
- password = "demo_password",
41
- host = "127.0.0.1",
42
- port = 8981,
43
- server_path = "solr",
44
- collection = "gettingstarted",
45
- use_ssl = False,
39
+ username="demo_user",
40
+ password="demo_password",
41
+ host="127.0.0.1",
42
+ port=8981,
43
+ server_path="solr",
44
+ collection="gettingstarted",
45
+ use_ssl=False,
46
46
  )
@@ -17,6 +17,7 @@ from mindsdb.integrations.libs.response import (
17
17
 
18
18
  logger = log.getLogger(__name__)
19
19
 
20
+
20
21
  class SolrHandler(DatabaseHandler):
21
22
  """
22
23
  This handler handles connection and execution of the Solr SQL statements.
@@ -131,7 +132,7 @@ class SolrHandler(DatabaseHandler):
131
132
  RESPONSE_TYPE.TABLE,
132
133
  pd.DataFrame(
133
134
  result,
134
- columns = columns
135
+ columns=columns
135
136
  )
136
137
  )
137
138
  else:
@@ -34,5 +34,6 @@ class SolrHandlerTest(unittest.TestCase):
34
34
  result = self.handler.query(query)
35
35
  assert result['type'] is RESPONSE_TYPE.TABLE
36
36
 
37
+
37
38
  if __name__ == '__main__':
38
- unittest.main()
39
+ unittest.main()
@@ -18,6 +18,7 @@ from mindsdb.integrations.libs.response import (
18
18
 
19
19
  logger = log.getLogger(__name__)
20
20
 
21
+
21
22
  class SQLAnyHandler(DatabaseHandler):
22
23
  """
23
24
  This handler handles connection and execution of the SAP SQL Anywhere statements.
@@ -61,7 +62,7 @@ class SQLAnyHandler(DatabaseHandler):
61
62
  self.encryption = "SIMPLE"
62
63
  else:
63
64
  self.encryption = "NONE"
64
-
65
+
65
66
  connection = sqlanydb.connect(
66
67
  host=self.host,
67
68
  userid=self.userid,
@@ -160,7 +161,7 @@ class SQLAnyHandler(DatabaseHandler):
160
161
  List all tables in SAP SQL Anywhere in the current schema
161
162
  """
162
163
 
163
- return self.native_query(f"""
164
+ return self.native_query("""
164
165
  SELECT USER_NAME(ob.UID) AS SCHEMA_NAME
165
166
  , st.TABLE_NAME
166
167
  , st.TABLE_TYPE
@@ -20,6 +20,7 @@ from mindsdb.integrations.libs.response import (
20
20
 
21
21
  logger = log.getLogger(__name__)
22
22
 
23
+
23
24
  class SQLiteHandler(DatabaseHandler):
24
25
  """
25
26
  This handler handles connection and execution of the SQLite statements.
@@ -20,7 +20,7 @@ connection_args = OrderedDict(
20
20
  port={
21
21
  'type': ARG_TYPE.INT,
22
22
  'description': 'Specify port to connect SQreamDB server'
23
- },
23
+ },
24
24
  database={
25
25
  'type': ARG_TYPE.STR,
26
26
  'description': 'Specify database name to connect SQreamDB server'
@@ -14,15 +14,14 @@ from mindsdb.integrations.libs.response import (
14
14
  import pandas as pd
15
15
  import pysqream as db
16
16
 
17
- from pysqream_sqlalchemy.dialect import SqreamDialect
17
+ from pysqream_sqlalchemy.dialect import SqreamDialect
18
18
 
19
19
  logger = log.getLogger(__name__)
20
20
 
21
21
 
22
22
  class SQreamDBHandler(DatabaseHandler):
23
23
 
24
-
25
- name= 'sqreamdb'
24
+ name = 'sqreamdb'
26
25
 
27
26
  def __init__(self, name: str, connection_data: Optional[dict], **kwargs):
28
27
  """ Initialize the handler
@@ -32,34 +31,30 @@ class SQreamDBHandler(DatabaseHandler):
32
31
  **kwargs: arbitrary keyword arguments.
33
32
  """
34
33
  super().__init__(name)
35
-
36
-
34
+
37
35
  self.connection_data = connection_data
38
36
 
39
37
  self.connection = None
40
38
  self.is_connected = False
41
-
42
-
39
+
43
40
  def connect(self):
44
41
  """
45
42
  Handles the connection to a YugabyteSQL database insance.
46
43
  """
47
44
  if self.is_connected is True:
48
45
  return self.connection
49
-
50
- args={
46
+
47
+ args = {
51
48
  "database": self.connection_data.get('database'),
52
49
  "host": self.connection_data.get('host'),
53
50
  "port": self.connection_data.get('port'),
54
51
  "username": self.connection_data.get('user'),
55
52
  "password": self.connection_data.get('password'),
56
- "clustered":self.connection_data.get('clustered',False),
57
- "use_ssl":self.connection_data.get('use_ssl',False),
58
- "service":self.connection_data.get('service','sqream')
53
+ "clustered": self.connection_data.get('clustered', False),
54
+ "use_ssl": self.connection_data.get('use_ssl', False),
55
+ "service": self.connection_data.get('service', 'sqream')
59
56
  }
60
57
 
61
-
62
-
63
58
  connection = db.connect(**args)
64
59
 
65
60
  self.is_connected = True
@@ -103,9 +98,9 @@ class SQreamDBHandler(DatabaseHandler):
103
98
  with conn.cursor() as cur:
104
99
  try:
105
100
  cur.execute(query)
106
-
107
- if cur.rowcount >0 and query.upper().startswith('SELECT') :
108
- result = cur.fetchall()
101
+
102
+ if cur.rowcount > 0 and query.upper().startswith('SELECT'):
103
+ result = cur.fetchall()
109
104
  response = Response(
110
105
  RESPONSE_TYPE.TABLE,
111
106
  data_frame=pd.DataFrame(
@@ -139,7 +134,7 @@ class SQreamDBHandler(DatabaseHandler):
139
134
 
140
135
  def get_tables(self) -> Response:
141
136
  """
142
- List all tables in SQreamDB stored in 'sqream_catalog'
137
+ List all tables in SQreamDB stored in 'sqream_catalog'
143
138
  """
144
139
 
145
140
  query = "SELECT table_name FROM sqream_catalog.tables"
@@ -147,8 +142,8 @@ class SQreamDBHandler(DatabaseHandler):
147
142
  return self.query(query)
148
143
 
149
144
  def get_columns(self, table_name):
150
- query = f"""SELECT column_name, type_name
151
- FROM sqream_catalog.columns
145
+ query = f"""SELECT column_name, type_name
146
+ FROM sqream_catalog.columns
152
147
  WHERE table_name = '{table_name}';
153
148
  """
154
149
  return self.query(query)
@@ -31,15 +31,15 @@ class SQreamDBHandlerTest(unittest.TestCase):
31
31
  def test_3_get_tables(self):
32
32
  tables = self.handler.get_tables()
33
33
  assert tables.type is not RESPONSE_TYPE.ERROR
34
-
34
+
35
35
  def test_4_select_query(self):
36
36
  query = "SELECT * FROM AUTHORS"
37
37
  result = self.handler.native_query(query)
38
38
  assert result.type is RESPONSE_TYPE.TABLE
39
39
 
40
40
  def test_5_check_connection(self):
41
- self.handler.check_connection()
41
+ self.handler.check_connection()
42
+
42
43
 
43
-
44
44
  if __name__ == '__main__':
45
- unittest.main()
45
+ unittest.main()
@@ -16,4 +16,4 @@ permanent = False
16
16
 
17
17
  __all__ = [
18
18
  'Handler', 'version', 'name', 'type', 'title', 'description', 'import_error', 'icon_path'
19
- ]
19
+ ]
@@ -15,7 +15,6 @@ class StarRocksHandler(MysqlHandler):
15
15
  super().__init__(name, **kwargs)
16
16
 
17
17
 
18
-
19
18
  connection_args = OrderedDict(
20
19
  user={
21
20
  'type': ARG_TYPE.STR,
@@ -2,6 +2,7 @@ import unittest
2
2
  from mindsdb.integrations.handlers.starrocks_handler.starrocks_handler import StarRocksHandler
3
3
  from mindsdb.integrations.libs.response import RESPONSE_TYPE
4
4
 
5
+
5
6
  class StarRocksHandlerTest(unittest.TestCase):
6
7
  @classmethod
7
8
  def setUpClass(cls):
@@ -21,36 +22,33 @@ class StarRocksHandlerTest(unittest.TestCase):
21
22
 
22
23
  def test_1_connect(self):
23
24
  assert self.handler.connect()
24
-
25
+
25
26
  def test_2_create_table(self):
26
27
  query = "CREATE Table IF NOT EXISTS Lover(name varchar(101));"
27
28
  result = self.handler.query(query)
28
- assert result.type is not RESPONSE_TYPE.ERROR
29
+ assert result.type is not RESPONSE_TYPE.ERROR
29
30
 
30
31
  def test_3_insert(self):
31
32
  query = "INSERT INTO LOVER VALUES('Shiv Shakti');"
32
33
  result = self.handler.query(query)
33
- assert result.type is not RESPONSE_TYPE.ERROR
34
+ assert result.type is not RESPONSE_TYPE.ERROR
34
35
 
35
36
  def test_4_native_query_select(self):
36
37
  query = "SELECT * FROM LOVER;"
37
38
  result = self.handler.query(query)
38
- assert result.type is RESPONSE_TYPE.TABLE
39
+ assert result.type is RESPONSE_TYPE.TABLE
39
40
 
40
41
  def test_5_get_tables(self):
41
42
  tables = self.handler.get_tables()
42
- assert tables.type is RESPONSE_TYPE.TABLE
43
+ assert tables.type is RESPONSE_TYPE.TABLE
43
44
 
44
45
  def test_6_get_columns(self):
45
46
  columns = self.handler.get_columns('LOVER')
46
-
47
+
47
48
  query = "DROP Table IF EXISTS Lover;"
48
- result = self.handler.query(query)
49
+ self.handler.query(query)
49
50
  assert columns.type is not RESPONSE_TYPE.ERROR
50
51
 
51
52
 
52
53
  if __name__ == '__main__':
53
54
  unittest.main()
54
-
55
-
56
-
@@ -99,7 +99,7 @@ class StatsForecastHandler(BaseMLEngine):
99
99
  time_settings = args["timeseries_settings"]
100
100
  using_args = args["using"]
101
101
  assert time_settings["is_timeseries"], "Specify time series settings in your query"
102
- ###### store model args and time series settings in the model folder
102
+ # store model args and time series settings in the model folder
103
103
  model_args = {}
104
104
  model_args.update(using_args)
105
105
  model_args["target"] = target
@@ -130,7 +130,7 @@ class StatsForecastHandler(BaseMLEngine):
130
130
  sf = StatsForecast([model], freq=model_args["frequency"], df=training_df)
131
131
  fitted_models = sf.fit().fitted_
132
132
 
133
- ###### persist changes to handler folder
133
+ # persist changes to handler folder
134
134
  self.model_storage.json_set("model_args", model_args)
135
135
  self.model_storage.file_set("training_df", dill.dumps(training_df))
136
136
  self.model_storage.file_set("fitted_models", dill.dumps(fitted_models))
@@ -7,9 +7,6 @@ from mindsdb.integrations.libs.response import (
7
7
  from mindsdb.utilities import log
8
8
  from mindsdb_sql_parser import parse_sql
9
9
 
10
- import requests
11
- import pandas as pd
12
- import json
13
10
  from collections import OrderedDict
14
11
  from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE as ARG_TYPE
15
12
 
@@ -17,6 +14,7 @@ from stravalib.client import Client
17
14
 
18
15
  logger = log.getLogger(__name__)
19
16
 
17
+
20
18
  class StravaHandler(APIHandler):
21
19
  """Strava handler implementation"""
22
20
 
@@ -39,7 +37,7 @@ class StravaHandler(APIHandler):
39
37
 
40
38
  strava_all_clubs_data = StravaAllClubsTable(self)
41
39
  self._register_table("all_clubs", strava_all_clubs_data)
42
-
40
+
43
41
  strava_club_activites_data = StravaClubActivitesTable(self)
44
42
  self._register_table("club_activities", strava_club_activites_data)
45
43
 
@@ -54,7 +52,6 @@ class StravaHandler(APIHandler):
54
52
  return self.connection
55
53
 
56
54
  client = Client()
57
- url = client.authorization_url(client_id=self.connection_data['strava_client_id'], redirect_uri='http://127.0.0.1:5000/authorization')
58
55
  client.access_token = self.connection_data['strava_access_token']
59
56
  self.connection = client
60
57
 
@@ -68,7 +65,6 @@ class StravaHandler(APIHandler):
68
65
  Status confirmation
69
66
  """
70
67
  response = StatusResponse(False)
71
- need_to_close = self.is_connected is False
72
68
 
73
69
  try:
74
70
  self.connect()
@@ -108,6 +104,6 @@ connection_args = OrderedDict(
108
104
  )
109
105
 
110
106
  connection_args_example = OrderedDict(
111
- strava_client_id ='<your-strava-client_id>',
112
- strava_access_token ='<your-strava-api-token>'
107
+ strava_client_id='<your-strava-client_id>',
108
+ strava_access_token='<your-strava-api-token>'
113
109
  )
@@ -8,12 +8,10 @@ from mindsdb.utilities import log
8
8
 
9
9
  from mindsdb_sql_parser import ast
10
10
 
11
- import requests
12
- import pandas as pd
13
- import json
14
11
 
15
12
  logger = log.getLogger(__name__)
16
13
 
14
+
17
15
  class StravaAllClubsTable(APITable):
18
16
  """Strava List all Clubs Table implementation"""
19
17
 
@@ -32,7 +30,6 @@ class StravaAllClubsTable(APITable):
32
30
  ValueError
33
31
  If the query contains an unsupported condition
34
32
  """
35
- conditions = extract_comparison_conditions(query.where)
36
33
 
37
34
  order_by_conditions = {}
38
35
 
@@ -42,7 +39,7 @@ class StravaAllClubsTable(APITable):
42
39
 
43
40
  for an_order in query.order_by:
44
41
  if an_order.field.parts[0] != "id":
45
- next
42
+ next
46
43
  if an_order.field.parts[1] in self.get_columns():
47
44
  order_by_conditions["columns"].append(an_order.field.parts[1])
48
45
 
@@ -66,7 +63,6 @@ class StravaAllClubsTable(APITable):
66
63
  else:
67
64
  raise ValueError(f"Unknown query target {type(target)}")
68
65
 
69
-
70
66
  if len(strava_clubs_df) == 0:
71
67
  strava_clubs_df = pd.DataFrame([], columns=selected_columns)
72
68
  else:
@@ -93,24 +89,24 @@ class StravaAllClubsTable(APITable):
93
89
  List of columns
94
90
  """
95
91
  return [
96
- 'id',
97
- 'name',
98
- 'sport_type',
99
- 'city',
100
- 'state',
101
- 'country',
102
- 'member_count',
92
+ 'id',
93
+ 'name',
94
+ 'sport_type',
95
+ 'city',
96
+ 'state',
97
+ 'country',
98
+ 'member_count',
103
99
  ]
104
100
 
105
101
  def call_strava_allclubs_api(self):
106
102
  """Pulls all the records from the given and returns it select()
107
-
103
+
108
104
  Returns
109
105
  -------
110
106
  pd.DataFrame of all the records of the "List Athlete Clubs" API end point
111
107
  """
112
108
 
113
- clubs = self.handler.connect().get_athlete_clubs()
109
+ clubs = self.handler.connect().get_athlete_clubs()
114
110
 
115
111
  club_cols = self.get_columns()
116
112
  data = []
@@ -153,7 +149,7 @@ class StravaClubActivitesTable(APITable):
153
149
 
154
150
  for an_order in query.order_by:
155
151
  if an_order.field.parts[0] != "id":
156
- next
152
+ next
157
153
  if an_order.field.parts[1] in self.get_columns():
158
154
  order_by_conditions["columns"].append(an_order.field.parts[1])
159
155
 
@@ -165,7 +161,7 @@ class StravaClubActivitesTable(APITable):
165
161
  raise ValueError(
166
162
  f"Order by unknown column {an_order.field.parts[1]}"
167
163
  )
168
-
164
+
169
165
  for a_where in conditions:
170
166
  if a_where[1] == "strava_club_id":
171
167
  if a_where[0] != "=":
@@ -174,7 +170,6 @@ class StravaClubActivitesTable(APITable):
174
170
  else:
175
171
  raise ValueError(f"Unsupported where argument {a_where[1]}")
176
172
 
177
-
178
173
  strava_club_activities_df = self.call_strava_clubactivities_api(a_where[2])
179
174
 
180
175
  selected_columns = []
@@ -187,7 +182,6 @@ class StravaClubActivitesTable(APITable):
187
182
  else:
188
183
  raise ValueError(f"Unknown query target {type(target)}")
189
184
 
190
-
191
185
  if len(strava_club_activities_df) == 0:
192
186
  strava_club_activities_df = pd.DataFrame([], columns=selected_columns)
193
187
  else:
@@ -214,18 +208,18 @@ class StravaClubActivitesTable(APITable):
214
208
  List of columns
215
209
  """
216
210
  return [
217
- 'name',
218
- 'distance',
219
- 'moving_time',
220
- 'elapsed_time',
221
- 'total_elevation_gain',
222
- 'sport_type',
223
- 'athlete.firstname',
211
+ 'name',
212
+ 'distance',
213
+ 'moving_time',
214
+ 'elapsed_time',
215
+ 'total_elevation_gain',
216
+ 'sport_type',
217
+ 'athlete.firstname',
224
218
  ]
225
219
 
226
- def call_strava_clubactivities_api(self,club_id):
220
+ def call_strava_clubactivities_api(self, club_id):
227
221
  """Pulls all the records from the given and returns it select()
228
-
222
+
229
223
  Returns
230
224
  -------
231
225
  pd.DataFrame of all the records of the "getClubActivitiesById" API end point
@@ -243,5 +237,3 @@ class StravaClubActivitesTable(APITable):
243
237
  all_strava_club_activities_df = pd.DataFrame(data, columns=club_cols)
244
238
 
245
239
  return all_strava_club_activities_df
246
-
247
-
@@ -10,6 +10,7 @@ from mindsdb_sql_parser import parse_sql
10
10
 
11
11
  logger = log.getLogger(__name__)
12
12
 
13
+
13
14
  class StripeHandler(APIHandler):
14
15
  """
15
16
  The Stripe handler implementation.
@@ -41,7 +42,7 @@ class StripeHandler(APIHandler):
41
42
 
42
43
  payment_intents_data = PaymentIntentsTable(self)
43
44
  self._register_table("payment_intents", payment_intents_data)
44
-
45
+
45
46
  payouts_data = PayoutsTable(self)
46
47
  self._register_table("payouts", payouts_data)
47
48
 
@@ -80,7 +81,7 @@ class StripeHandler(APIHandler):
80
81
  stripe.Account.retrieve()
81
82
  response.success = True
82
83
  except Exception as e:
83
- logger.error(f'Error connecting to Stripe!')
84
+ logger.error('Error connecting to Stripe!')
84
85
  response.error_message = str(e)
85
86
 
86
87
  self.is_connected = response.success