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
@@ -4,42 +4,42 @@ from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE as ARG_T
4
4
 
5
5
 
6
6
  connection_args = OrderedDict(
7
- user = {
7
+ user={
8
8
  'type': ARG_TYPE.STR,
9
9
  'description': 'Rockset user name'
10
10
  },
11
- password = {
11
+ password={
12
12
  'type': ARG_TYPE.PWD,
13
13
  'description': 'Rockset password',
14
14
  'secret': True
15
15
  },
16
- api_key = {
16
+ api_key={
17
17
  'type': ARG_TYPE.STR,
18
18
  'description': 'Rockset API key'
19
19
  },
20
- api_server = {
20
+ api_server={
21
21
  'type': ARG_TYPE.STR,
22
22
  'description': 'Rockset API server'
23
23
  },
24
- host = {
24
+ host={
25
25
  'type': ARG_TYPE.STR,
26
26
  'description': 'Rockset host'
27
27
  },
28
- port = {
28
+ port={
29
29
  'type': ARG_TYPE.INT,
30
30
  'description': 'Rockset port'
31
31
  },
32
- database = {
32
+ database={
33
33
  'type': ARG_TYPE.STR,
34
34
  'description': 'Rockset database'
35
35
  }
36
36
  )
37
37
  connection_args_example = OrderedDict(
38
- user = 'rockset',
39
- password = 'rockset',
40
- api_key = "adkjf234rksjfa23waejf2",
41
- api_server = 'api-us-west-2.rockset.io',
42
- host = 'localhost',
43
- port = '3306',
44
- database = 'test'
38
+ user='rockset',
39
+ password='rockset',
40
+ api_key="adkjf234rksjfa23waejf2",
41
+ api_server='api-us-west-2.rockset.io',
42
+ host='localhost',
43
+ port='3306',
44
+ database='test'
45
45
  )
@@ -2,6 +2,7 @@ import unittest
2
2
  from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
3
3
  from mindsdb.integrations.handlers.rockset_handler.rockset_handler import RocksetHandler
4
4
 
5
+
5
6
  class RocksetHandlerTest(unittest.TestCase):
6
7
  @classmethod
7
8
  def setUpClass(cls):
@@ -22,6 +22,7 @@ from mindsdb.utilities import log
22
22
 
23
23
  logger = log.getLogger(__name__)
24
24
 
25
+
25
26
  class ScyllaHandler(DatabaseHandler):
26
27
  """
27
28
  This handler handles connection and execution of the Scylla statements.
@@ -35,17 +36,17 @@ class ScyllaHandler(DatabaseHandler):
35
36
  self.session = None
36
37
  self.is_connected = False
37
38
 
38
- def download_secure_bundle(self, url, max_size=10*1024*1024):
39
+ def download_secure_bundle(self, url, max_size=10 * 1024 * 1024):
39
40
  """
40
41
  Downloads the secure bundle from a given URL and stores it in a temporary file.
41
-
42
+
42
43
  :param url: URL of the secure bundle to be downloaded.
43
44
  :param max_size: Maximum allowable size of the bundle in bytes. Defaults to 10MB.
44
45
  :return: Path to the downloaded secure bundle saved as a temporary file.
45
46
  :raises ValueError: If the secure bundle size exceeds the allowed `max_size`.
46
-
47
+
47
48
  TODO:
48
- - Find a way to periodically clean up or delete the temporary files
49
+ - Find a way to periodically clean up or delete the temporary files
49
50
  after they have been used to prevent filling up storage over time.
50
51
  """
51
52
  response = requests.get(url, stream=True, timeout=10)
@@ -78,7 +79,7 @@ class ScyllaHandler(DatabaseHandler):
78
79
  username=self.connection_args['user'], password=self.connection_args['password']
79
80
  )
80
81
  else:
81
- raise ValueError("If authentication is required, both 'user' and 'password' must be provided!")
82
+ raise ValueError("If authentication is required, both 'user' and 'password' must be provided!")
82
83
 
83
84
  connection_props = {
84
85
  'auth_provider': auth_provider
@@ -11,6 +11,7 @@ from mindsdb_sql_parser import parse_sql
11
11
 
12
12
  logger = log.getLogger(__name__)
13
13
 
14
+
14
15
  class SendinblueHandler(APIHandler):
15
16
  """
16
17
  The Sendinblue handler implementation.
@@ -72,7 +73,7 @@ class SendinblueHandler(APIHandler):
72
73
  api_instance.get_account()
73
74
  response.success = True
74
75
  except Exception as e:
75
- logger.error(f'Error connecting to Sendinblue!')
76
+ logger.error('Error connecting to Sendinblue!')
76
77
  response.error_message = str(e)
77
78
 
78
79
  self.is_connected = response.success
@@ -2,13 +2,12 @@ import sib_api_v3_sdk
2
2
  import pandas as pd
3
3
 
4
4
 
5
- from typing import List, Optional, Dict, Text, Any
5
+ from typing import List, Dict, Text, Any
6
6
  from mindsdb.utilities import log
7
7
  from mindsdb.integrations.libs.api_handler import APITable
8
8
 
9
9
  from mindsdb_sql_parser import ast
10
10
  from sib_api_v3_sdk.rest import ApiException
11
- from datetime import datetime
12
11
 
13
12
 
14
13
  from mindsdb.integrations.utilities.handlers.query_utilities import (
@@ -180,6 +179,7 @@ class EmailCampaignsTable(APITable):
180
179
  raise RuntimeError(
181
180
  f"Failed to execute the update command for Email Campaign {campaign_id}"
182
181
  ) from e
182
+
183
183
  def insert(self, query: 'ast.Insert') -> None:
184
184
  """
185
185
  Inserts new email campaigns into Sendinblue.
@@ -196,23 +196,23 @@ class EmailCampaignsTable(APITable):
196
196
  Exception
197
197
  For any unexpected errors during the email campaign creation.
198
198
  """
199
- #this defines columns that are supported and mandatory for an INSERT operation.
199
+ # this defines columns that are supported and mandatory for an INSERT operation.
200
200
  supported_columns = [
201
- 'name', 'subject', 'sender_name', 'sender_email',
201
+ 'name', 'subject', 'sender_name', 'sender_email',
202
202
  'html_content', 'scheduled_at', 'recipients_lists', 'tag'
203
203
  ]
204
204
  mandatory_columns = ['name', 'subject', 'sender_name', 'sender_email', 'html_content']
205
205
 
206
- #this Parse the INSERT query to extract data.
206
+ # this Parse the INSERT query to extract data.
207
207
  insert_statement_parser = INSERTQueryParser(
208
- query, supported_columns=supported_columns,
208
+ query, supported_columns=supported_columns,
209
209
  mandatory_columns=mandatory_columns, all_mandatory=True
210
210
  )
211
211
  email_campaigns_data = insert_statement_parser.parse_query()
212
212
 
213
- #this processes each campaign data extracted from the query.
213
+ # this processes each campaign data extracted from the query.
214
214
  for email_campaign_data in email_campaigns_data:
215
- #this extracts and format sender information.
215
+ # this extracts and format sender information.
216
216
  sender_info = {}
217
217
  if 'sender_name' in email_campaign_data:
218
218
  sender_info['name'] = email_campaign_data.pop('sender_name')
@@ -227,7 +227,7 @@ class EmailCampaignsTable(APITable):
227
227
 
228
228
  email_campaign_data['sender'] = sender_info
229
229
 
230
- #this creates each email campaign.
230
+ # this creates each email campaign.
231
231
  self.create_email_campaign(email_campaign_data)
232
232
 
233
233
  def create_email_campaign(self, email_campaign_data: Dict[str, Any]) -> None:
@@ -244,33 +244,33 @@ class EmailCampaignsTable(APITable):
244
244
  Exception
245
245
  For any errors during the email campaign creation process.
246
246
  """
247
- #this establish a connection to the Sendinblue API.
247
+ # this establish a connection to the Sendinblue API.
248
248
  api_session = self.handler.connect()
249
249
  email_campaigns_api_instance = sib_api_v3_sdk.EmailCampaignsApi(api_session)
250
250
 
251
- #this logs the data for the email campaign being created.
251
+ # this logs the data for the email campaign being created.
252
252
  logger.info(f"Email campaign data before creating the object: {email_campaign_data}")
253
253
 
254
254
  try:
255
- #this creates the email campaign object and send it to Sendinblue.
255
+ # this creates the email campaign object and send it to Sendinblue.
256
256
  email_campaign = sib_api_v3_sdk.CreateEmailCampaign(**email_campaign_data)
257
257
  logger.info(f"Email campaign object after creation: {email_campaign}")
258
258
 
259
- #this executes the API call to create the campaign.
259
+ # this executes the API call to create the campaign.
260
260
  created_campaign = email_campaigns_api_instance.create_email_campaign(email_campaign)
261
261
 
262
- #this checks and log the response from the API.
262
+ # this checks and log the response from the API.
263
263
  if 'id' not in created_campaign.to_dict():
264
264
  logger.error('Email campaign creation failed')
265
265
  else:
266
266
  logger.info(f'Email Campaign {created_campaign.to_dict()["id"]} created')
267
267
  except ApiException as e:
268
- #this handles API exceptions and log the detailed response.
268
+ # this handles API exceptions and log the detailed response.
269
269
  logger.error(f"Exception when calling EmailCampaignsApi->create_email_campaign: {e}")
270
270
  if hasattr(e, 'body'):
271
271
  logger.error(f"Sendinblue API response body: {e.body}")
272
272
  raise Exception(f'Failed to create Email Campaign with data: {email_campaign_data}') from e
273
273
  except Exception as e:
274
- #this handles any other unexpected exceptions.
274
+ # this handles any other unexpected exceptions.
275
275
  logger.error(f"Unexpected error occurred: {e}")
276
276
  raise Exception(f'Unexpected error during Email Campaign creation: {e}') from e
@@ -18,4 +18,4 @@ icon_path = "icon.svg"
18
18
  permanent = False
19
19
  execution_method = "subprocess_keep"
20
20
 
21
- __all__ = ["Handler", "version", "name", "type", "title", "description", "import_error", "icon_path"]
21
+ __all__ = ["Handler", "version", "name", "type", "title", "description", "import_error", "icon_path"]
@@ -17,4 +17,4 @@ connection_args = OrderedDict(
17
17
  connection_args_example = OrderedDict(
18
18
  spreadsheet_id='12wgS-1KJ9ymUM-6VYzQ0nJYGitONxay7cMKLnEE2_d0',
19
19
  sheet_name='iris'
20
- )
20
+ )
@@ -13,6 +13,7 @@ from mindsdb.integrations.libs.api_handler_exceptions import InvalidNativeQuery,
13
13
 
14
14
  logger = log.getLogger(__name__)
15
15
 
16
+
16
17
  class ShopifyHandler(APIHandler):
17
18
  """
18
19
  The Shopify handler implementation.
@@ -30,7 +31,7 @@ class ShopifyHandler(APIHandler):
30
31
  super().__init__(name)
31
32
 
32
33
  if kwargs.get("connection_data") is None:
33
- raise MissingConnectionParams(f"Incomplete parameters passed to Shopify Handler")
34
+ raise MissingConnectionParams("Incomplete parameters passed to Shopify Handler")
34
35
 
35
36
  connection_data = kwargs.get("connection_data", {})
36
37
  self.connection_data = connection_data
@@ -78,7 +79,7 @@ class ShopifyHandler(APIHandler):
78
79
  return self.connection
79
80
 
80
81
  if self.kwargs.get("connection_data") is None:
81
- raise MissingConnectionParams(f"Incomplete parameters passed to Shopify Handler")
82
+ raise MissingConnectionParams("Incomplete parameters passed to Shopify Handler")
82
83
 
83
84
  api_session = shopify.Session(self.connection_data['shop_url'], '2021-10', self.connection_data['access_token'])
84
85
 
@@ -106,8 +107,8 @@ class ShopifyHandler(APIHandler):
106
107
  shopify.Shop.current()
107
108
  response.success = True
108
109
  except Exception as e:
109
- logger.error(f'Error connecting to Shopify!')
110
- raise ConnectionFailed(f"Conenction to Shopify failed.")
110
+ logger.error('Error connecting to Shopify!')
111
+ raise ConnectionFailed("Conenction to Shopify failed.")
111
112
  response.error_message = str(e)
112
113
 
113
114
  if self.yotpo_app_key is not None and self.yotpo_access_token is not None:
@@ -138,6 +139,6 @@ class ShopifyHandler(APIHandler):
138
139
  """
139
140
  try:
140
141
  ast = parse_sql(query)
141
- except Exception as e:
142
+ except Exception:
142
143
  raise InvalidNativeQuery(f"The query {query} is invalid.")
143
- return self.query(ast)
144
+ return self.query(ast)
@@ -57,7 +57,7 @@ class ProductsTable(APITable):
57
57
  products_df = select_statement_executor.execute_query()
58
58
 
59
59
  return products_df
60
-
60
+
61
61
  def insert(self, query: ast.Insert) -> None:
62
62
  """Inserts data into the Shopify "POST /products" API endpoint.
63
63
 
@@ -78,12 +78,12 @@ class ProductsTable(APITable):
78
78
  insert_statement_parser = INSERTQueryParser(
79
79
  query,
80
80
  supported_columns=['title', 'body_html', 'vendor', 'product_type', 'tags', 'status'],
81
- mandatory_columns=['title' ],
81
+ mandatory_columns=['title'],
82
82
  all_mandatory=False
83
83
  )
84
84
  product_data = insert_statement_parser.parse_query()
85
85
  self.create_products(product_data)
86
-
86
+
87
87
  def delete(self, query: ast.Delete) -> None:
88
88
  """
89
89
  Deletes data from the Shopify "DELETE /products" API endpoint.
@@ -407,7 +407,7 @@ class OrdersTable(APITable):
407
407
  ----------
408
408
  query : ast.Insert
409
409
  Given SQL INSERT query
410
-
410
+
411
411
  Returns
412
412
  -------
413
413
  None
@@ -420,26 +420,26 @@ class OrdersTable(APITable):
420
420
  insert_statement_parser = INSERTQueryParser(
421
421
  query,
422
422
  supported_columns=['address1_ba', 'address2_ba', 'city_ba', 'company_ba', 'country_ba',
423
- 'country_code_ba', 'first_name_ba', 'last_name_ba', 'latitude_ba',
424
- 'longitude_ba', 'name_ba', 'phone_ba', 'province_ba', 'province_code_ba',
425
- 'zip_ba',
423
+ 'country_code_ba', 'first_name_ba', 'last_name_ba', 'latitude_ba',
424
+ 'longitude_ba', 'name_ba', 'phone_ba', 'province_ba', 'province_code_ba',
425
+ 'zip_ba',
426
426
  'address1_sa', 'address2_sa', 'city_sa', 'company_sa',
427
- 'country_sa', 'country_code_sa', 'first_name_sa', 'last_name_sa',
428
- 'latitude_sa', 'longitude_sa', 'name_sa', 'phone_sa', 'province_sa',
429
- 'province_code_sa', 'zip_sa',
427
+ 'country_sa', 'country_code_sa', 'first_name_sa', 'last_name_sa',
428
+ 'latitude_sa', 'longitude_sa', 'name_sa', 'phone_sa', 'province_sa',
429
+ 'province_code_sa', 'zip_sa',
430
430
  'amount_dc', 'code_dc', 'type_dc',
431
- 'gift_card_li', 'grams_li', 'price_li', 'quantity_li', 'title_li',
432
- 'vendor_li', 'fulfillment_status_li', 'sku_li', 'variant_title_li',
431
+ 'gift_card_li', 'grams_li', 'price_li', 'quantity_li', 'title_li',
432
+ 'vendor_li', 'fulfillment_status_li', 'sku_li', 'variant_title_li',
433
433
  'name_li', 'value_li',
434
434
  'price_tl', 'rate_tl', 'title_tl', 'channel_liable_tl',
435
435
  'name_na', 'value_na',
436
- 'code_sl', 'price_sl', 'discounted_price_sl', 'source_sl',
437
- 'title_sl',
438
- 'carrier_identifier_sl', 'requested_fulfillment_service_id_sl',
436
+ 'code_sl', 'price_sl', 'discounted_price_sl', 'source_sl',
437
+ 'title_sl',
438
+ 'carrier_identifier_sl', 'requested_fulfillment_service_id_sl',
439
439
  'is_removed_sl',
440
- 'buyer_accepts_marketing', 'currency', 'email', 'financial_status',
441
- 'fulfillment_status', 'note', 'phone', 'po_number', 'processed_at',
442
- 'referring_site', 'source_name', 'source_identifier', 'source_url',
440
+ 'buyer_accepts_marketing', 'currency', 'email', 'financial_status',
441
+ 'fulfillment_status', 'note', 'phone', 'po_number', 'processed_at',
442
+ 'referring_site', 'source_name', 'source_identifier', 'source_url',
443
443
  'tags', 'taxes_included', 'test', 'total_tax', 'total_weight'],
444
444
  mandatory_columns=['price_li', 'title_li'],
445
445
  all_mandatory=False
@@ -447,7 +447,6 @@ class OrdersTable(APITable):
447
447
  order_data = insert_statement_parser.parse_query()
448
448
  self.create_orders(order_data)
449
449
 
450
-
451
450
  def update(self, query: ast.Update) -> None:
452
451
  """Updates data in the Shopify "PUT /orders" API endpoint.
453
452
 
@@ -525,15 +524,15 @@ class OrdersTable(APITable):
525
524
  shopify.ShopifyResource.activate_session(api_session)
526
525
  # separate columns by API object
527
526
  line_items_columns = {'gift_card_li', 'grams_li', 'price_li', 'quantity_li', 'title_li',
528
- 'vendor_li', 'fulfillment_status_li', 'sku_li', 'variant_title_li'}
527
+ 'vendor_li', 'fulfillment_status_li', 'sku_li', 'variant_title_li'}
529
528
  billing_address_columns = {'address1_ba', 'address2_ba', 'city_ba', 'company_ba',
530
- 'country_ba', 'country_code_ba', 'first_name_ba', 'last_name_ba',
529
+ 'country_ba', 'country_code_ba', 'first_name_ba', 'last_name_ba',
531
530
  'latitude_ba', 'longitude_ba', 'name_ba', 'phone_ba',
532
531
  'province_ba', 'province_code_ba', 'zip_ba'}
533
532
  shipping_address_columns = {'address1_sa', 'address2_sa', 'city_sa', 'company_sa',
534
- 'country_sa', 'country_code_sa', 'first_name_sa', 'last_name_sa',
535
- 'latitude_sa', 'longitude_sa', 'name_sa', 'phone_sa',
536
- 'province_sa', 'province_code_sa', 'zip_sa'}
533
+ 'country_sa', 'country_code_sa', 'first_name_sa', 'last_name_sa',
534
+ 'latitude_sa', 'longitude_sa', 'name_sa', 'phone_sa',
535
+ 'province_sa', 'province_code_sa', 'zip_sa'}
537
536
  discount_codes_columns = {'amount_dc', 'code_dc', 'type_dc'}
538
537
  tax_lines_columns = {'price_tl', 'rate_tl', 'title_tl', 'channel_liable_tl'}
539
538
  note_attributes_columns = {'name_na', 'value_na'}
@@ -541,15 +540,15 @@ class OrdersTable(APITable):
541
540
  'source_sl', 'title_sl', 'carrier_identifier_sl',
542
541
  'requested_fulfillment_service_id_sl', 'is_removed_sl'}
543
542
  line_items_properties_columns = {'name_li', 'value_li'}
544
- all_columns = (line_items_columns | billing_address_columns | shipping_address_columns |
545
- discount_codes_columns | tax_lines_columns | note_attributes_columns |
546
- shipping_lines_columns | line_items_properties_columns)
543
+ all_columns = (line_items_columns | billing_address_columns | shipping_address_columns
544
+ | discount_codes_columns | tax_lines_columns | note_attributes_columns
545
+ | shipping_lines_columns | line_items_properties_columns)
547
546
  modified_order_data = []
548
547
 
549
548
  for order in order_data:
550
549
  # separate values by object
551
550
  order_data_trimmed = {key: val for key, val in order.items()
552
- if key not in all_columns}
551
+ if key not in all_columns}
553
552
  line_items_data = OrdersTable._extract_data_helper(order, line_items_columns)
554
553
  billing_address_data = OrdersTable._extract_data_helper(order, billing_address_columns)
555
554
  shipping_address_data = OrdersTable._extract_data_helper(order, shipping_address_columns)
@@ -604,6 +603,7 @@ class OrdersTable(APITable):
604
603
  orders = shopify.Order.find(**kwargs)
605
604
  return [order.to_dict() for order in orders]
606
605
 
606
+
607
607
  class InventoryLevelTable(APITable):
608
608
  """The Shopify Inventory Table implementation"""
609
609
 
@@ -687,6 +687,7 @@ class InventoryLevelTable(APITable):
687
687
  inventories = shopify.InventoryLevel.find(**kwargs)
688
688
  return [inventory.to_dict() for inventory in inventories]
689
689
 
690
+
690
691
  class LocationTable(APITable):
691
692
  """The Shopify Location Table implementation"""
692
693
 
@@ -738,6 +739,7 @@ class LocationTable(APITable):
738
739
  locations = shopify.Location.find(**kwargs)
739
740
  return [location.to_dict() for location in locations]
740
741
 
742
+
741
743
  class CustomerReviews(APITable):
742
744
  """The Shopify Customer Reviews Table implementation"""
743
745
 
@@ -794,6 +796,7 @@ class CustomerReviews(APITable):
794
796
  json_response = requests.get(url, headers=headers).json()
795
797
  return [review for review in json_response['reviews']] if 'reviews' in json_response else []
796
798
 
799
+
797
800
  class CarrierServiceTable(APITable):
798
801
  """The Shopify carrier service Table implementation. Example carrier services like usps, dhl etc."""
799
802
 
@@ -831,11 +834,11 @@ class CarrierServiceTable(APITable):
831
834
  where_conditions,
832
835
  order_by_conditions
833
836
  )
834
-
837
+
835
838
  carrier_service_df = select_statement_executor.execute_query()
836
839
 
837
840
  return carrier_service_df
838
-
841
+
839
842
  def insert(self, query: ast.Insert) -> None:
840
843
  """Inserts data into the Shopify "POST /carrier_services" API endpoint.
841
844
 
@@ -895,7 +898,6 @@ class CarrierServiceTable(APITable):
895
898
  carrier_service_ids = carrier_services_df['id'].tolist()
896
899
  self.delete_carrier_services(carrier_service_ids)
897
900
 
898
-
899
901
  def update(self, query: ast.Update) -> None:
900
902
  """Updates data from the Shopify "PUT /carrier_services" API endpoint.
901
903
 
@@ -925,8 +927,6 @@ class CarrierServiceTable(APITable):
925
927
  carrier_service_ids = carrier_services_df['id'].tolist()
926
928
  self.update_carrier_service(carrier_service_ids, values_to_update)
927
929
 
928
-
929
-
930
930
  def get_columns(self) -> List[Text]:
931
931
  return ["id", "name", "active", "service_discovery", "carrier_service_type", "admin_graphql_api_id"]
932
932
 
@@ -935,7 +935,7 @@ class CarrierServiceTable(APITable):
935
935
  shopify.ShopifyResource.activate_session(api_session)
936
936
  services = shopify.CarrierService.find()
937
937
  return [service.to_dict() for service in services]
938
-
938
+
939
939
  def create_carrier_service(self, carrier_service_data: List[Dict[Text, Any]]) -> None:
940
940
  api_session = self.handler.connect()
941
941
  shopify.ShopifyResource.activate_session(api_session)
@@ -968,7 +968,6 @@ class CarrierServiceTable(APITable):
968
968
  logger.info(f'Carrier Service {carrier_service_id} updated')
969
969
 
970
970
 
971
-
972
971
  class ShippingZoneTable(APITable):
973
972
  """The Shopify shipping zone Table implementation"""
974
973
 
@@ -1000,7 +999,6 @@ class ShippingZoneTable(APITable):
1000
999
 
1001
1000
  shipping_zone_df = pd.json_normalize(self.get_shipping_zone(), record_path="countries", meta=["id", "name"], record_prefix="countries_")
1002
1001
 
1003
-
1004
1002
  select_statement_executor = SELECTQueryExecutor(
1005
1003
  shipping_zone_df,
1006
1004
  selected_columns,
@@ -1008,7 +1006,7 @@ class ShippingZoneTable(APITable):
1008
1006
  order_by_conditions,
1009
1007
  result_limit
1010
1008
  )
1011
-
1009
+
1012
1010
  shipping_zone_df = select_statement_executor.execute_query()
1013
1011
 
1014
1012
  return shipping_zone_df
@@ -1029,12 +1027,13 @@ class ShippingZoneTable(APITable):
1029
1027
  zones = shopify.ShippingZone.find()
1030
1028
  return [self.clean_response(zone.to_dict()) for zone in zones]
1031
1029
 
1030
+
1032
1031
  class SalesChannelTable(APITable):
1033
1032
  """The Shopify Sales Channel Table implementation"""
1034
1033
 
1035
1034
  def select(self, query: ast.Select) -> pd.DataFrame:
1036
1035
  """Pulls data from the Shopify "GET /publication API endpoint, as Channel API endpoint is deprecated
1037
-
1036
+
1038
1037
 
1039
1038
  Parameters
1040
1039
  ----------
@@ -1071,13 +1070,11 @@ class SalesChannelTable(APITable):
1071
1070
  sales_channel_df = select_statement_executor.execute_query()
1072
1071
  return sales_channel_df
1073
1072
 
1074
-
1075
1073
  def get_columns(self) -> List[Text]:
1076
1074
  return pd.json_normalize(self.get_sales_channel(limit=1)).columns.tolist()
1077
-
1078
1075
 
1079
1076
  def get_sales_channel(self, **kwargs) -> List[Dict]:
1080
1077
  api_session = self.handler.connect()
1081
1078
  shopify.ShopifyResource.activate_session(api_session)
1082
1079
  sales_channels = shopify.Publication.find(**kwargs)
1083
- return [sales_channel.to_dict() for sales_channel in sales_channels]
1080
+ return [sales_channel.to_dict() for sales_channel in sales_channels]
@@ -6,4 +6,4 @@ __author__ = 'MindsDB Inc'
6
6
  __github__ = 'https://github.com/mindsdb/mindsdb'
7
7
  __pypi__ = 'https://pypi.org/project/mindsdb/'
8
8
  __license__ = 'MIT'
9
- __copyright__ = 'Copyright 2022- mindsdb'
9
+ __copyright__ = 'Copyright 2022- mindsdb'
@@ -11,7 +11,6 @@ from .__about__ import __version__ as version, __description__ as description
11
11
 
12
12
  title = 'SingleStore'
13
13
  name = 'singlestore'
14
- version = 0.1
15
14
  type = HANDLER_TYPE.DATA
16
15
  icon_path = 'icon.svg'
17
16
 
@@ -1,6 +1,7 @@
1
1
  from mindsdb.integrations.handlers.mysql_handler import Handler as MySQLHandler
2
2
  from .__about__ import __version__ as version
3
3
 
4
+
4
5
  class SingleStoreHandler(MySQLHandler):
5
6
  """
6
7
  This handler handles connection and execution of the SingleStore statements.
@@ -27,10 +27,10 @@ class MySQLHandlerTest(unittest.TestCase):
27
27
  def test_2_get_tables(self):
28
28
  tbls = self.handler.get_tables()
29
29
  assert tbls['type'] is not RESPONSE_TYPE.ERROR
30
-
30
+
31
31
  def test_5_drop_table(self):
32
32
  res = self.handler.native_query("DROP TABLE IF EXISTS test_mdb")
33
- assert res['type'] is not RESPONSE_TYPE.ERROR
33
+ assert res['type'] is not RESPONSE_TYPE.ERROR
34
34
 
35
35
  def test_4_create_table(self):
36
36
  res = self.handler.native_query("CREATE TABLE IF NOT EXISTS test_mdb (test_col INT)")
@@ -39,4 +39,4 @@ class MySQLHandlerTest(unittest.TestCase):
39
39
  def test_7_select_query(self):
40
40
  query = "SELECT * FROM test_mdb WHERE 'id'='a'"
41
41
  result = self.handler.native_query(query)
42
- assert result['type'] is RESPONSE_TYPE.TABLE
42
+ assert result['type'] is RESPONSE_TYPE.TABLE
@@ -9,7 +9,7 @@ try:
9
9
  import_error = None
10
10
  except Exception as e:
11
11
  Handler = None
12
- import_error = e
12
+ import_error = e
13
13
 
14
14
  title = 'Slack'
15
15
  name = 'slack'
@@ -21,8 +21,8 @@ __all__ = [
21
21
  'version',
22
22
  'name',
23
23
  'type',
24
- 'title',
24
+ 'title',
25
25
  'description',
26
26
  'import_error',
27
27
  'icon_path'
28
- ]
28
+ ]