MindsDB 25.5.3.0__py3-none-any.whl → 25.5.4.1__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 (313) hide show
  1. mindsdb/__about__.py +8 -8
  2. mindsdb/__main__.py +127 -79
  3. mindsdb/api/a2a/__init__.py +0 -0
  4. mindsdb/api/a2a/__main__.py +144 -0
  5. mindsdb/api/a2a/agent.py +308 -0
  6. mindsdb/api/a2a/common/__init__.py +0 -0
  7. mindsdb/api/a2a/common/server/__init__.py +4 -0
  8. mindsdb/api/a2a/common/server/server.py +164 -0
  9. mindsdb/api/a2a/common/server/task_manager.py +287 -0
  10. mindsdb/api/a2a/common/server/utils.py +28 -0
  11. mindsdb/api/a2a/common/types.py +365 -0
  12. mindsdb/api/a2a/constants.py +9 -0
  13. mindsdb/api/a2a/run_a2a.py +86 -0
  14. mindsdb/api/a2a/task_manager.py +560 -0
  15. mindsdb/api/executor/command_executor.py +185 -309
  16. mindsdb/api/executor/datahub/classes/response.py +5 -2
  17. mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
  18. mindsdb/api/executor/planner/query_planner.py +10 -1
  19. mindsdb/api/executor/sql_query/result_set.py +185 -52
  20. mindsdb/api/executor/sql_query/sql_query.py +1 -1
  21. mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +9 -12
  22. mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
  23. mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
  24. mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
  25. mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
  26. mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
  27. mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
  28. mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
  29. mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
  30. mindsdb/api/http/initialize.py +99 -83
  31. mindsdb/api/http/namespaces/analysis.py +3 -3
  32. mindsdb/api/http/namespaces/config.py +61 -86
  33. mindsdb/api/http/namespaces/file.py +8 -2
  34. mindsdb/api/http/namespaces/sql.py +13 -27
  35. mindsdb/api/mcp/start.py +42 -5
  36. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
  37. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
  38. mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
  39. mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
  40. mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +82 -115
  41. mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
  42. mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
  43. mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
  44. mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
  45. mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
  46. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
  47. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
  48. mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
  49. mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
  50. mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
  51. mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
  52. mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
  53. mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
  54. mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
  55. mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
  56. mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
  57. mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
  58. mindsdb/integrations/handlers/byom_handler/requirements.txt +1 -2
  59. mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
  60. mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
  61. mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
  62. mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
  63. mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
  64. mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
  65. mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
  66. mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
  67. mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
  68. mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
  69. mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
  70. mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
  71. mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
  72. mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
  73. mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
  74. mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
  75. mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
  76. mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
  77. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
  78. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
  79. mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
  80. mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
  81. mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
  82. mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
  83. mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
  84. mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
  85. mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
  86. mindsdb/integrations/handlers/email_handler/settings.py +0 -1
  87. mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
  88. mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
  89. mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
  90. mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
  91. mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
  92. mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
  93. mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
  94. mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
  95. mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
  96. mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
  97. mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
  98. mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
  99. mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
  100. mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
  101. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
  102. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
  103. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
  104. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
  105. mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
  106. mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
  107. mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
  108. mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
  109. mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
  110. mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
  111. mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
  112. mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
  113. mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
  114. mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
  115. mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
  116. mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
  117. mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
  118. mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
  119. mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
  120. mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
  121. mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
  122. mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
  123. mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
  124. mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
  125. mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
  126. mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
  127. mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
  128. mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
  129. mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
  130. mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
  131. mindsdb/integrations/handlers/jira_handler/jira_handler.py +4 -4
  132. mindsdb/integrations/handlers/jira_handler/jira_tables.py +9 -9
  133. mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
  134. mindsdb/integrations/handlers/lancedb_handler/requirements.txt +0 -1
  135. mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
  136. mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
  137. mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
  138. mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
  139. mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -1
  140. mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
  141. mindsdb/integrations/handlers/litellm_handler/litellm_handler.py +37 -20
  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/llm/config.py +13 -0
  279. mindsdb/integrations/libs/llm/utils.py +37 -65
  280. mindsdb/integrations/libs/response.py +67 -52
  281. mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
  282. mindsdb/integrations/utilities/handler_utils.py +15 -3
  283. mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
  284. mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
  285. mindsdb/integrations/utilities/rag/rerankers/base_reranker.py +230 -227
  286. mindsdb/integrations/utilities/utils.py +3 -3
  287. mindsdb/interfaces/agents/agents_controller.py +164 -1
  288. mindsdb/interfaces/agents/constants.py +32 -13
  289. mindsdb/interfaces/agents/langchain_agent.py +106 -95
  290. mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
  291. mindsdb/interfaces/knowledge_base/controller.py +250 -216
  292. mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +13 -10
  293. mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
  294. mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
  295. mindsdb/interfaces/query_context/context_controller.py +66 -10
  296. mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
  297. mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
  298. mindsdb/interfaces/skills/skill_tool.py +202 -57
  299. mindsdb/interfaces/skills/sql_agent.py +205 -17
  300. mindsdb/interfaces/storage/fs.py +1 -0
  301. mindsdb/interfaces/variables/__init__.py +0 -0
  302. mindsdb/interfaces/variables/variables_controller.py +97 -0
  303. mindsdb/migrations/env.py +5 -7
  304. mindsdb/migrations/migrate.py +47 -7
  305. mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
  306. mindsdb/utilities/config.py +287 -216
  307. mindsdb/utilities/starters.py +13 -0
  308. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/METADATA +646 -698
  309. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/RECORD +312 -295
  310. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/WHEEL +1 -1
  311. mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
  312. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/licenses/LICENSE +0 -0
  313. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,5 @@
1
1
  import tiktoken
2
-
3
- from typing import Callable, Dict
2
+ from typing import Callable
4
3
 
5
4
  from mindsdb_sql_parser import parse_sql
6
5
  from mindsdb_sql_parser.ast import Insert
@@ -13,21 +12,18 @@ from langchain.chains.llm import LLMChain
13
12
  from langchain.chains.combine_documents.stuff import StuffDocumentsChain
14
13
  from langchain.chains import ReduceDocumentsChain, MapReduceDocumentsChain
15
14
 
16
- from mindsdb.integrations.utilities.rag.rag_pipeline_builder import RAG
17
- from mindsdb.integrations.utilities.rag.settings import RAGPipelineModel, VectorStoreType, DEFAULT_COLLECTION_NAME
18
- from mindsdb.interfaces.skills.skill_tool import skill_tool, SkillType
19
- from mindsdb.interfaces.storage import db
15
+ from mindsdb.interfaces.skills.skill_tool import skill_tool
20
16
  from mindsdb.utilities import log
21
17
  from langchain_core.prompts import PromptTemplate
22
18
  from langchain_core.tools import Tool
23
19
  from langchain_text_splitters import CharacterTextSplitter
24
20
 
25
21
  logger = log.getLogger(__name__)
26
- from mindsdb.interfaces.storage.db import KnowledgeBase
27
- from mindsdb.utilities import log
28
22
 
29
23
  # Individual tools
30
24
  # Note: all tools are defined in a closure to pass required args (apart from LLM input) through it, as custom tools don't allow custom field assignment. # noqa
25
+
26
+
31
27
  def get_exec_call_tool(llm, executor, model_kwargs) -> Callable:
32
28
  def mdb_exec_call_tool(query: str) -> str:
33
29
  try:
@@ -50,6 +46,7 @@ def get_exec_call_tool(llm, executor, model_kwargs) -> Callable:
50
46
  return data
51
47
  return mdb_exec_call_tool
52
48
 
49
+
53
50
  def get_exec_metadata_tool(llm, executor, model_kwargs) -> Callable:
54
51
  def mdb_exec_metadata_call(query: str) -> str:
55
52
  try:
@@ -80,9 +77,9 @@ def get_exec_metadata_tool(llm, executor, model_kwargs) -> Callable:
80
77
  data = f'Metadata for table {table_name}:\n'
81
78
  fields = handler.get_columns(table_name).data_frame['Field'].to_list()
82
79
  types = handler.get_columns(table_name).data_frame['Type'].to_list()
83
- data += f'List of columns and types:\n'
80
+ data += 'List of columns and types:\n'
84
81
  data += '\n'.join([f'\tColumn: `{field}`\tType: `{typ}`' for field, typ in zip(fields, types)])
85
- except:
82
+ except BaseException:
86
83
  data = f'Table {table_name} not found.'
87
84
  except Exception as e:
88
85
  data = f"mindsdb tool failed with error:\n{str(e)}" # let the agent know
@@ -93,6 +90,7 @@ def get_exec_metadata_tool(llm, executor, model_kwargs) -> Callable:
93
90
  return data
94
91
  return mdb_exec_metadata_call
95
92
 
93
+
96
94
  def get_mdb_write_tool(executor) -> Callable:
97
95
  def mdb_write_call(query: str) -> str:
98
96
  try:
@@ -105,6 +103,7 @@ def get_mdb_write_tool(executor) -> Callable:
105
103
  return f"mindsdb write tool failed with error:\n{str(e)}"
106
104
  return mdb_write_call
107
105
 
106
+
108
107
  def _setup_standard_tools(tools, llm, model_kwargs):
109
108
  executor = skill_tool.get_command_executor()
110
109
 
@@ -2,7 +2,7 @@ from mindsdb.integrations.libs.const import HANDLER_TYPE
2
2
 
3
3
  from .__about__ import __version__ as version, __description__ as description
4
4
  try:
5
- from .leonardo_ai_handler import LeonardoAIHandler as Handler
5
+ from .leonardo_ai_handler import LeonardoAIHandler as Handler
6
6
  import_error = None
7
7
  except Exception as e:
8
8
  Handler = None
@@ -9,13 +9,12 @@ from pathlib import Path
9
9
  import lightwood
10
10
  import pandas as pd
11
11
  import requests
12
- from lightwood.api.types import JsonAI, ProblemDefinition
12
+ from lightwood.api.types import JsonAI
13
13
  from pandas.core.frame import DataFrame
14
14
 
15
15
  import mindsdb.utilities.profiler as profiler
16
16
  from mindsdb.integrations.libs.const import PREDICTOR_STATUS
17
17
  from mindsdb.integrations.utilities.utils import format_exception_error
18
- from mindsdb.interfaces.model.functions import get_model_records
19
18
  from mindsdb.interfaces.storage import db
20
19
  from mindsdb.interfaces.storage.fs import RESOURCE_GROUP, FileStorage
21
20
  from mindsdb.interfaces.storage.json import get_json_storage
@@ -26,6 +25,7 @@ from .utils import brack_to_mod, rep_recur, unpack_jsonai_old_args
26
25
 
27
26
  logger = log.getLogger(__name__)
28
27
 
28
+
29
29
  def create_learn_mark():
30
30
  if os.name == 'posix':
31
31
  p = Path(tempfile.gettempdir()).joinpath('mindsdb/learn_processes/')
@@ -1,6 +1,5 @@
1
1
  import copy
2
2
  import json
3
- import sys
4
3
  from datetime import datetime
5
4
  from functools import lru_cache
6
5
  from typing import Dict, Optional
@@ -1,3 +1,12 @@
1
+ import mindsdb.interfaces.storage.db as db
2
+ from mindsdb.integrations.libs.response import RESPONSE_TYPE
3
+ from mindsdb.interfaces.model.model_controller import ModelController
4
+ from mindsdb.interfaces.storage.fs import FsStore
5
+ from mindsdb.integrations.handlers.lightwood_handler.lightwood_handler.lightwood_handler import LightwoodHandler
6
+ from mindsdb.interfaces.database.integrations import integration_controller
7
+ from mindsdb.integrations.utilities.test_utils import PG_HANDLER_NAME, PG_CONNECTION_DATA
8
+ from mindsdb.utilities.config import Config
9
+ from mindsdb.migrations import migrate
1
10
  import os
2
11
  import time
3
12
  import unittest
@@ -7,18 +16,9 @@ temp_dir = tempfile.mkdtemp(dir='/tmp/', prefix='lightwood_handler_test_')
7
16
  os.environ['MINDSDB_STORAGE_DIR'] = os.environ.get('MINDSDB_STORAGE_DIR', temp_dir)
8
17
  os.environ['MINDSDB_DB_CON'] = 'sqlite:///' + os.path.join(os.environ['MINDSDB_STORAGE_DIR'], 'mindsdb.sqlite3.db') + '?check_same_thread=False&timeout=30'
9
18
 
10
- from mindsdb.migrations import migrate
11
19
  migrate.migrate_to_head()
12
20
 
13
- from mindsdb.utilities.config import Config
14
- from mindsdb.integrations.utilities.test_utils import HandlerControllerMock, PG_HANDLER_NAME, PG_CONNECTION_DATA
15
- from mindsdb.interfaces.database.integrations import integration_controller
16
- from mindsdb.integrations.handlers.lightwood_handler.lightwood_handler.lightwood_handler import LightwoodHandler
17
21
  # from mindsdb.integrations.handlers.lightwood_handler.lightwood_handler.utils import load_predictor
18
- from mindsdb.interfaces.storage.fs import FsStore
19
- from mindsdb.interfaces.model.model_controller import ModelController
20
- from mindsdb.integrations.libs.response import RESPONSE_TYPE
21
- import mindsdb.interfaces.storage.db as db
22
22
 
23
23
 
24
24
  # TODO: drop all models and tables when closing tests
@@ -96,7 +96,7 @@ class LightwoodHandlerTest(unittest.TestCase):
96
96
  self.assertTrue(response.type == RESPONSE_TYPE.OK)
97
97
 
98
98
  def test_04_query_predictor_single_where_condition(self):
99
- time.sleep(120) # TODO
99
+ time.sleep(120) # TODO
100
100
  query = f"""
101
101
  SELECT target
102
102
  from {self.test_model_1}
@@ -255,4 +255,4 @@ class LightwoodHandlerTest(unittest.TestCase):
255
255
 
256
256
 
257
257
  if __name__ == "__main__":
258
- unittest.main(failfast=True)
258
+ unittest.main(failfast=True)
@@ -1,6 +1,8 @@
1
1
  import ast
2
2
  from typing import Dict, Optional, List
3
3
 
4
+
5
+ from litellm import completion, batch_completion, embedding
4
6
  import pandas as pd
5
7
 
6
8
  from mindsdb.integrations.libs.base import BaseMLEngine
@@ -8,8 +10,6 @@ from mindsdb.utilities import log
8
10
 
9
11
  from mindsdb.integrations.handlers.litellm_handler.settings import CompletionParameters
10
12
 
11
- from litellm import completion, batch_completion
12
-
13
13
 
14
14
  logger = log.getLogger(__name__)
15
15
 
@@ -28,10 +28,24 @@ class LiteLLMHandler(BaseMLEngine):
28
28
  @staticmethod
29
29
  def create_validation(target, args=None, **kwargs):
30
30
  if "using" not in args:
31
- raise Exception(
32
- "Litellm engine requires a USING clause. See settings.py for more info on supported args."
31
+ raise Exception("Litellm engine requires a USING clause. See settings.py for more info on supported args.")
32
+
33
+ @staticmethod
34
+ def embeddings(model: str, messages: List[str], args: dict) -> List[list]:
35
+ response = embedding(model=model, input=messages, **args)
36
+ return [rec["embedding"] for rec in response.data]
37
+
38
+ @staticmethod
39
+ async def acompletion(model: str, messages: List[dict], args: dict):
40
+ if model.startswith("snowflake/") and "snowflake_account_id" in args:
41
+ args["api_base"] = (
42
+ f"https://{args['snowflake_account_id']}.snowflakecomputing.com/api/v2/cortex/inference:complete"
33
43
  )
34
44
 
45
+ from litellm import acompletion
46
+
47
+ return await acompletion(model=model, messages=messages, stream=False, **args)
48
+
35
49
  def create(
36
50
  self,
37
51
  target: str,
@@ -70,9 +84,9 @@ class LiteLLMHandler(BaseMLEngine):
70
84
  self._build_messages(args, df)
71
85
 
72
86
  # remove prompt_template from args
73
- args.pop('prompt_template', None)
87
+ args.pop("prompt_template", None)
74
88
 
75
- if len(args['messages']) > 1:
89
+ if len(args["messages"]) > 1:
76
90
  # if more than one message, use batch completion
77
91
  responses = batch_completion(**args)
78
92
  return pd.DataFrame({"result": [response.choices[0].message.content for response in responses]})
@@ -103,36 +117,39 @@ class LiteLLMHandler(BaseMLEngine):
103
117
 
104
118
  if "prompt_template" in prompt_kwargs:
105
119
  # if prompt_template is passed in predict query, use it
106
- logger.info("Using 'prompt_template' passed in SELECT Predict query. "
107
- "Note this will overwrite a 'prompt_template' passed in create MODEL query.")
120
+ logger.info(
121
+ "Using 'prompt_template' passed in SELECT Predict query. "
122
+ "Note this will overwrite a 'prompt_template' passed in create MODEL query."
123
+ )
108
124
 
109
- args['prompt_template'] = prompt_kwargs.pop('prompt_template')
125
+ args["prompt_template"] = prompt_kwargs.pop("prompt_template")
110
126
 
111
- if 'mock_response' in prompt_kwargs:
127
+ if "mock_response" in prompt_kwargs:
112
128
  # used for testing to save on real completion api calls
113
- args['mock_response']: str = prompt_kwargs.pop('mock_response')
129
+ args["mock_response"]: str = prompt_kwargs.pop("mock_response")
114
130
 
115
- if 'messages' in prompt_kwargs and len(prompt_kwargs) > 1:
131
+ if "messages" in prompt_kwargs and len(prompt_kwargs) > 1:
116
132
  # if user passes in messages, no other args can be passed in
117
- raise Exception(
118
- "If 'messages' is passed in SELECT Predict query, no other args can be passed in."
119
- )
133
+ raise Exception("If 'messages' is passed in SELECT Predict query, no other args can be passed in.")
120
134
 
121
135
  # if user passes in messages, use those instead
122
- if 'messages' in prompt_kwargs:
136
+ if "messages" in prompt_kwargs:
123
137
  logger.info("Using messages passed in SELECT Predict query. 'prompt_template' will be ignored.")
124
138
 
125
- args['messages']: List = ast.literal_eval(df['messages'].iloc[0])
139
+ args["messages"]: List = ast.literal_eval(df["messages"].iloc[0])
126
140
 
127
141
  else:
128
142
  # if user passes in prompt_template, use that to create messages
129
143
  if len(prompt_kwargs) == 1:
130
- args['messages'] = self._prompt_to_messages(args['prompt_template'], **prompt_kwargs) \
131
- if args['prompt_template'] else self._prompt_to_messages(df.iloc[0][0])
144
+ args["messages"] = (
145
+ self._prompt_to_messages(args["prompt_template"], **prompt_kwargs)
146
+ if args["prompt_template"]
147
+ else self._prompt_to_messages(df.iloc[0][0])
148
+ )
132
149
 
133
150
  elif len(prompt_kwargs) > 1:
134
151
  try:
135
- args['messages'] = self._prompt_to_messages(args['prompt_template'], **prompt_kwargs)
152
+ args["messages"] = self._prompt_to_messages(args["prompt_template"], **prompt_kwargs)
136
153
  except KeyError as e:
137
154
  raise Exception(
138
155
  f"{e}: Please pass in either a prompt_template on create MODEL or "
@@ -50,7 +50,7 @@ class LlamaIndexHandler(BaseMLEngine):
50
50
  # workaround to create llama model without input data
51
51
  if df is None or df.empty:
52
52
  df = pd.DataFrame([{"text": ""}])
53
-
53
+
54
54
  args_reader = args.get("using", {}).get("reader", self.default_reader)
55
55
 
56
56
  if args_reader == "DFReader":
@@ -138,7 +138,7 @@ class LlamaIndexHandler(BaseMLEngine):
138
138
 
139
139
  if input_column is None:
140
140
  raise Exception(
141
- f"`input_column` must be provided at model creation time or through USING clause when predicting. Please try again."
141
+ "`input_column` must be provided at model creation time or through USING clause when predicting. Please try again."
142
142
  ) # noqa
143
143
 
144
144
  if input_column not in df.columns:
@@ -151,7 +151,7 @@ class LlamaIndexHandler(BaseMLEngine):
151
151
  index_path = self.model_storage.folder_get("context")
152
152
  storage_context = StorageContext.from_defaults(persist_dir=index_path)
153
153
  self._get_service_context()
154
-
154
+
155
155
  index = load_index_from_storage(
156
156
  storage_context
157
157
  )
@@ -182,7 +182,7 @@ class LlamaIndexHandler(BaseMLEngine):
182
182
  llm_kwargs["model_name"] = args["using"]["model_name"]
183
183
  if "max_tokens" in args["using"]:
184
184
  llm_kwargs["max_tokens"] = args["using"]["max_tokens"]
185
- #only way this works is by sending the key through openai
185
+ # only way this works is by sending the key through openai
186
186
 
187
187
  openai.api_key = openai_api_key
188
188
  if Settings.llm is None:
@@ -2,6 +2,7 @@ from typing import List, Optional
2
2
  from pydantic import BaseModel, field_validator, model_validator
3
3
  from pydantic_settings import BaseSettings
4
4
 
5
+
5
6
  class LlamaIndexConfig(BaseSettings):
6
7
  """
7
8
  Model for LlamaIndexHandler settings.
@@ -12,14 +13,15 @@ class LlamaIndexConfig(BaseSettings):
12
13
  default_reader (str): Default reader. Note this is custom data frame reader.
13
14
  supported_reader (List[str]): Supported readers.
14
15
  """
15
- DEFAULT_INDEX_CLASS : str = "VectorStoreIndex"
16
- SUPPORTED_INDEXES : List[str] = ["VectorStoreIndex"]
16
+ DEFAULT_INDEX_CLASS: str = "VectorStoreIndex"
17
+ SUPPORTED_INDEXES: List[str] = ["VectorStoreIndex"]
17
18
  DEFAULT_READER: str = "DFReader"
18
- SUPPORTED_READERS : List[str] = ["DFReader", "SimpleWebPageReader"]
19
+ SUPPORTED_READERS: List[str] = ["DFReader", "SimpleWebPageReader"]
19
20
 
20
21
 
21
22
  llama_index_config = LlamaIndexConfig()
22
23
 
24
+
23
25
  class LlamaIndexModel(BaseModel):
24
26
  """
25
27
  Model for LlamaIndexHandler.
@@ -45,7 +47,7 @@ class LlamaIndexModel(BaseModel):
45
47
  def validate_reader(cls, value):
46
48
  if value not in llama_index_config.SUPPORTED_READERS:
47
49
  raise ValueError(f"Reader {value} is not supported.")
48
-
50
+
49
51
  return value
50
52
 
51
53
  @field_validator('index_class')
@@ -53,13 +55,12 @@ class LlamaIndexModel(BaseModel):
53
55
  def validate_index_class(cls, value):
54
56
  if value not in llama_index_config.SUPPORTED_INDEXES:
55
57
  raise ValueError(f"Index class {value} is not supported.")
56
-
58
+
57
59
  return value
58
-
60
+
59
61
  @model_validator(mode='after')
60
62
  def validate_mode(self):
61
63
  if self.mode == "conversational" and not all([self.user_column, self.assistant_column]):
62
- raise ValueError(f"Conversational mode requires user_column and assistant_column parameter")
63
-
64
- return self
64
+ raise ValueError("Conversational mode requires user_column and assistant_column parameter")
65
65
 
66
+ return self
@@ -2,6 +2,7 @@ import unittest
2
2
  from mindsdb.integrations.handlers.materialize_handler.materialize_handler import MaterializeHandler
3
3
  from mindsdb.integrations.libs.response import RESPONSE_TYPE
4
4
 
5
+
5
6
  class materializeHandlerTest(unittest.TestCase):
6
7
  @classmethod
7
8
  def setUpClass(cls):
@@ -21,36 +22,33 @@ class materializeHandlerTest(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
-
@@ -18,6 +18,7 @@ from mindsdb.integrations.libs.response import (
18
18
 
19
19
  logger = log.getLogger(__name__)
20
20
 
21
+
21
22
  class MatrixOneHandler(DatabaseHandler):
22
23
  """
23
24
  This handler handles connection and execution of the MatrixOne statements.
@@ -25,7 +26,7 @@ class MatrixOneHandler(DatabaseHandler):
25
26
 
26
27
  name = 'matrixone'
27
28
 
28
- def __init__(self, name,connection_data: Optional[dict], **kwargs):
29
+ def __init__(self, name, connection_data: Optional[dict], **kwargs):
29
30
  super().__init__(name)
30
31
  self.mysql_url = None
31
32
  self.parser = parse_sql
@@ -158,11 +159,10 @@ class MatrixOneHandler(DatabaseHandler):
158
159
  """
159
160
  q = f"SHOW COLUMNS FROM {table_name};"
160
161
  result = self.native_query(q)
161
- df=result.data_frame
162
- result.data_frame=df.rename(columns={
162
+ df = result.data_frame
163
+ result.data_frame = df.rename(columns={
163
164
  df.columns[0]: 'COLUMN_NAME',
164
165
  df.columns[1]: 'DATA TYPE'
165
166
  })
166
167
 
167
-
168
168
  return result
@@ -19,38 +19,37 @@ class MatrixOneHandlerTest(unittest.TestCase):
19
19
  }
20
20
  cls.handler = MatrixOneHandler('test_mysql_handler', cls.kwargs)
21
21
 
22
-
23
22
  def test_0_connect(self):
24
23
  self.handler.connect()
25
24
 
26
25
  def test_1_drop_table(self):
27
26
  res = self.handler.query("DROP TABLE IF EXISTS PREM;")
28
- assert res.type is not RESPONSE_TYPE.ERROR
27
+ assert res.type is not RESPONSE_TYPE.ERROR
29
28
 
30
29
  def test_2_create_table(self):
31
30
  res = self.handler.query("CREATE TABLE IF NOT EXISTS PREM (Premi varchar(50));")
32
- assert res.type is not RESPONSE_TYPE.ERROR
31
+ assert res.type is not RESPONSE_TYPE.ERROR
33
32
 
34
33
  def test_3_insert_table(self):
35
34
  res = self.handler.query("INSERT INTO PREM VALUES('Radha <3 Krishna');")
36
- assert res.type is not RESPONSE_TYPE.ERROR
35
+ assert res.type is not RESPONSE_TYPE.ERROR
37
36
 
38
37
  def test_4_get_tables(self):
39
38
  tables = self.handler.get_tables()
40
- assert tables.type is not RESPONSE_TYPE.ERROR
39
+ assert tables.type is not RESPONSE_TYPE.ERROR
41
40
 
42
41
  def test_5_select_query(self):
43
42
  query = "SELECT * FROM PREM;"
44
43
  result = self.handler.native_query(query)
45
- assert result.type is not RESPONSE_TYPE.ERROR
46
-
44
+ assert result.type is not RESPONSE_TYPE.ERROR
45
+
47
46
  def test_6_get_columns(self):
48
47
  result = self.handler.get_columns('PREM')
49
- assert result.type is not RESPONSE_TYPE.ERROR
48
+ assert result.type is not RESPONSE_TYPE.ERROR
50
49
 
51
50
  def test_7_check_connection(self):
52
51
  self.handler.check_connection()
53
52
 
54
53
 
55
54
  if __name__ == '__main__':
56
- unittest.main()
55
+ unittest.main()
@@ -4,31 +4,31 @@ from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE as ARG_T
4
4
 
5
5
 
6
6
  connection_args = OrderedDict(
7
- host={
8
- 'type': ARG_TYPE.STR,
9
- 'description': 'The host name or IP address of the SAP MaxDB server.'
10
- },
11
- port={
12
- 'type': ARG_TYPE.INT,
13
- 'description': 'The TCP/IP port of the SAP MaxDB. Must be an integer.'
14
- },
15
- database={
16
- 'type': ARG_TYPE.STR,
17
- 'description': 'The database name to use when connecting with the SAP MaxDB server.'
18
- },
19
- jdbc_location={
20
- 'type': ARG_TYPE.STR,
21
- 'description': 'The location of the jar file which contains the JDBC class.'
22
- },
23
- user={
24
- 'type': ARG_TYPE.STR,
25
- 'description': 'The user name used to authenticate with the SAP MaxDB server.'
26
- },
27
- password={
28
- 'type': ARG_TYPE.PWD,
29
- 'description': 'The password to authenticate the user with the SAP MaxDB server.',
30
- 'secret': True
31
- }
7
+ host={
8
+ 'type': ARG_TYPE.STR,
9
+ 'description': 'The host name or IP address of the SAP MaxDB server.'
10
+ },
11
+ port={
12
+ 'type': ARG_TYPE.INT,
13
+ 'description': 'The TCP/IP port of the SAP MaxDB. Must be an integer.'
14
+ },
15
+ database={
16
+ 'type': ARG_TYPE.STR,
17
+ 'description': 'The database name to use when connecting with the SAP MaxDB server.'
18
+ },
19
+ jdbc_location={
20
+ 'type': ARG_TYPE.STR,
21
+ 'description': 'The location of the jar file which contains the JDBC class.'
22
+ },
23
+ user={
24
+ 'type': ARG_TYPE.STR,
25
+ 'description': 'The user name used to authenticate with the SAP MaxDB server.'
26
+ },
27
+ password={
28
+ 'type': ARG_TYPE.PWD,
29
+ 'description': 'The password to authenticate the user with the SAP MaxDB server.',
30
+ 'secret': True
31
+ }
32
32
  )
33
33
 
34
34
 
@@ -16,6 +16,7 @@ import jaydebeapi as jd
16
16
 
17
17
  logger = log.getLogger(__name__)
18
18
 
19
+
19
20
  class MaxDBHandler(DatabaseHandler):
20
21
  """
21
22
  This handler handles connection and execution of the SAP MaxDB statements.
@@ -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 MediaWikiHandler(APIHandler):
15
16
  """
16
17
  The MediaWiki handler implementation.
@@ -65,7 +66,7 @@ class MediaWikiHandler(APIHandler):
65
66
  self.connect()
66
67
  response.success = True
67
68
  except Exception as e:
68
- logger.error(f'Error connecting to MediaWiki!')
69
+ logger.error('Error connecting to MediaWiki!')
69
70
  response.error_message = str(e)
70
71
 
71
72
  self.is_connected = response.success
@@ -84,4 +85,4 @@ class MediaWikiHandler(APIHandler):
84
85
  Request status
85
86
  """
86
87
  ast = parse_sql(query)
87
- return self.query(ast)
88
+ return self.query(ast)
@@ -95,4 +95,4 @@ class PagesTable(APITable):
95
95
  except KeyError:
96
96
  logger.debug(f"Error accessing '{attribute}' attribute. Skipping...")
97
97
 
98
- return result
98
+ return result
@@ -6,4 +6,4 @@ __author__ = 'Christina Nikolovieni'
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,9 +11,9 @@ except Exception as e:
11
11
  title = 'Mendeley'
12
12
  name = 'mendeley'
13
13
  type = HANDLER_TYPE.DATA
14
- icon_path= 'icon.svg'
14
+ icon_path = 'icon.svg'
15
15
  permanent = False
16
16
 
17
17
  __all__ = [
18
- 'Handler', 'version', 'name', 'type', 'title', 'description', 'import_error','icon_path'
18
+ 'Handler', 'version', 'name', 'type', 'title', 'description', 'import_error', 'icon_path'
19
19
  ]