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

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

Potentially problematic release.


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

Files changed (310) hide show
  1. mindsdb/__about__.py +1 -1
  2. mindsdb/__main__.py +127 -79
  3. mindsdb/api/a2a/__init__.py +0 -0
  4. mindsdb/api/a2a/__main__.py +114 -0
  5. mindsdb/api/a2a/a2a_client.py +439 -0
  6. mindsdb/api/a2a/agent.py +308 -0
  7. mindsdb/api/a2a/common/__init__.py +0 -0
  8. mindsdb/api/a2a/common/client/__init__.py +4 -0
  9. mindsdb/api/a2a/common/client/card_resolver.py +21 -0
  10. mindsdb/api/a2a/common/client/client.py +86 -0
  11. mindsdb/api/a2a/common/server/__init__.py +4 -0
  12. mindsdb/api/a2a/common/server/server.py +164 -0
  13. mindsdb/api/a2a/common/server/task_manager.py +287 -0
  14. mindsdb/api/a2a/common/server/utils.py +28 -0
  15. mindsdb/api/a2a/common/types.py +365 -0
  16. mindsdb/api/a2a/constants.py +9 -0
  17. mindsdb/api/a2a/run_a2a.py +129 -0
  18. mindsdb/api/a2a/task_manager.py +594 -0
  19. mindsdb/api/executor/command_executor.py +47 -27
  20. mindsdb/api/executor/datahub/classes/response.py +5 -2
  21. mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
  22. mindsdb/api/executor/planner/query_planner.py +10 -1
  23. mindsdb/api/executor/sql_query/result_set.py +185 -52
  24. mindsdb/api/executor/sql_query/sql_query.py +1 -1
  25. mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +9 -12
  26. mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
  27. mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
  28. mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
  29. mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
  30. mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
  31. mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
  32. mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
  33. mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
  34. mindsdb/api/http/initialize.py +99 -83
  35. mindsdb/api/http/namespaces/analysis.py +3 -3
  36. mindsdb/api/http/namespaces/file.py +8 -2
  37. mindsdb/api/http/namespaces/sql.py +13 -27
  38. mindsdb/api/mcp/start.py +42 -5
  39. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
  40. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
  41. mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
  42. mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
  43. mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +82 -115
  44. mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
  45. mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
  46. mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
  47. mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
  48. mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
  49. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
  50. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
  51. mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
  52. mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
  53. mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
  54. mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
  55. mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
  56. mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
  57. mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
  58. mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
  59. mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
  60. mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
  61. mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
  62. mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
  63. mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
  64. mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
  65. mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
  66. mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
  67. mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
  68. mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
  69. mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
  70. mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
  71. mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
  72. mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
  73. mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
  74. mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
  75. mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
  76. mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
  77. mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
  78. mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
  79. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
  80. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
  81. mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
  82. mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
  83. mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
  84. mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
  85. mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
  86. mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
  87. mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
  88. mindsdb/integrations/handlers/email_handler/settings.py +0 -1
  89. mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
  90. mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
  91. mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
  92. mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
  93. mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
  94. mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
  95. mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
  96. mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
  97. mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
  98. mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
  99. mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
  100. mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
  101. mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
  102. mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
  103. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
  104. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
  105. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
  106. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
  107. mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
  108. mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
  109. mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
  110. mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
  111. mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
  112. mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
  113. mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
  114. mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
  115. mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
  116. mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
  117. mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
  118. mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
  119. mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
  120. mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
  121. mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
  122. mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
  123. mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
  124. mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
  125. mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
  126. mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
  127. mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
  128. mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
  129. mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
  130. mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
  131. mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
  132. mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
  133. mindsdb/integrations/handlers/jira_handler/jira_handler.py +4 -4
  134. mindsdb/integrations/handlers/jira_handler/jira_tables.py +9 -9
  135. mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
  136. mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
  137. mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
  138. mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
  139. mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
  140. mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -1
  141. mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
  142. mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
  143. mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
  144. mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
  145. mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
  146. mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
  147. mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
  148. mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
  149. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
  150. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
  151. mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
  152. mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
  153. mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
  154. mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
  155. mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
  156. mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
  157. mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
  158. mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
  159. mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
  160. mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
  161. mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
  162. mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
  163. mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
  164. mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
  165. mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
  166. mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
  167. mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
  168. mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
  169. mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
  170. mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
  171. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
  172. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
  173. mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
  174. mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
  175. mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
  176. mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
  177. mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
  178. mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
  179. mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
  180. mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
  181. mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
  182. mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
  183. mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
  184. mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
  185. mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
  186. mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
  187. mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
  188. mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
  189. mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
  190. mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
  191. mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
  192. mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
  193. mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
  194. mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
  195. mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
  196. mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
  197. mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
  198. mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
  199. mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
  200. mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
  201. mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
  202. mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
  203. mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
  204. mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
  205. mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
  206. mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
  207. mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
  208. mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
  209. mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
  210. mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
  211. mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
  212. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
  213. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
  214. mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
  215. mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
  216. mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
  217. mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
  218. mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
  219. mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
  220. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
  221. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
  222. mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
  223. mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
  224. mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
  225. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
  226. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
  227. mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
  228. mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
  229. mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
  230. mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
  231. mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
  232. mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
  233. mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
  234. mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
  235. mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
  236. mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
  237. mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
  238. mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
  239. mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
  240. mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
  241. mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
  242. mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
  243. mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
  244. mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
  245. mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
  246. mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
  247. mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
  248. mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
  249. mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
  250. mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
  251. mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
  252. mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
  253. mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
  254. mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
  255. mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
  256. mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
  257. mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
  258. mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
  259. mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
  260. mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
  261. mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
  262. mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
  263. mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
  264. mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
  265. mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
  266. mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
  267. mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
  268. mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
  269. mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
  270. mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
  271. mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
  272. mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
  273. mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
  274. mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
  275. mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
  276. mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
  277. mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
  278. mindsdb/integrations/libs/response.py +67 -52
  279. mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
  280. mindsdb/integrations/utilities/handler_utils.py +15 -3
  281. mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
  282. mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
  283. mindsdb/integrations/utilities/utils.py +3 -3
  284. mindsdb/interfaces/agents/agents_controller.py +164 -1
  285. mindsdb/interfaces/agents/constants.py +15 -0
  286. mindsdb/interfaces/agents/langchain_agent.py +16 -4
  287. mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
  288. mindsdb/interfaces/knowledge_base/controller.py +25 -0
  289. mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +13 -10
  290. mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
  291. mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
  292. mindsdb/interfaces/query_context/context_controller.py +66 -10
  293. mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
  294. mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
  295. mindsdb/interfaces/skills/skill_tool.py +202 -57
  296. mindsdb/interfaces/skills/sql_agent.py +205 -17
  297. mindsdb/interfaces/storage/fs.py +1 -0
  298. mindsdb/interfaces/variables/__init__.py +0 -0
  299. mindsdb/interfaces/variables/variables_controller.py +97 -0
  300. mindsdb/migrations/env.py +5 -7
  301. mindsdb/migrations/migrate.py +47 -7
  302. mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
  303. mindsdb/utilities/config.py +331 -219
  304. mindsdb/utilities/starters.py +13 -0
  305. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +641 -695
  306. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +309 -288
  307. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
  308. mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
  309. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
  310. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,10 @@
1
1
  import re
2
2
  from typing import List
3
-
4
3
  import pandas as pd
5
4
 
6
- from mindsdb_sql_parser import ast
7
-
8
5
  from mindsdb.integrations.libs.api_handler import APIResource
9
- from mindsdb.integrations.utilities.handlers.query_utilities import SELECTQueryParser, SELECTQueryExecutor
10
6
  from mindsdb.integrations.utilities.sql_utils import (
11
- extract_comparison_conditions, FilterCondition, FilterOperator, SortColumn)
7
+ FilterCondition, FilterOperator, SortColumn)
12
8
  from mindsdb.utilities import log
13
9
 
14
10
 
@@ -241,8 +237,6 @@ class GithubPullRequestsTable(APIResource):
241
237
  limit: int = None,
242
238
  sort: List[SortColumn] = None,
243
239
  targets: List[str] = None) -> pd.DataFrame:
244
-
245
-
246
240
  """Pulls data from the GitHub "List repository pull requests" API
247
241
 
248
242
  Native filters:
@@ -397,7 +391,6 @@ class GithubCommitsTable(APIResource):
397
391
  limit: int = None,
398
392
  sort: List[SortColumn] = None,
399
393
  targets: List[str] = None) -> pd.DataFrame:
400
-
401
394
  """Pulls data from the GitHub "List commits" API
402
395
 
403
396
  Returns
@@ -473,7 +466,6 @@ class GithubReleasesTable(APIResource):
473
466
  limit: int = None,
474
467
  sort: List[SortColumn] = None,
475
468
  targets: List[str] = None) -> pd.DataFrame:
476
-
477
469
  """Pulls data from the GitHub "List repository releases" API
478
470
 
479
471
  Returns
@@ -550,7 +542,6 @@ class GithubBranchesTable(APIResource):
550
542
  limit: int = None,
551
543
  sort: List[SortColumn] = None,
552
544
  targets: List[str] = None) -> pd.DataFrame:
553
-
554
545
  """Pulls data from the GitHub "List repository branches" API
555
546
 
556
547
  Returns
@@ -616,7 +607,6 @@ class GithubContributorsTable(APIResource):
616
607
  limit: int = None,
617
608
  sort: List[SortColumn] = None,
618
609
  targets: List[str] = None) -> pd.DataFrame:
619
-
620
610
  """Pulls data from the GitHub "List repository contributors" API
621
611
 
622
612
  Returns
@@ -718,7 +708,6 @@ class GithubProjectsTable(APIResource):
718
708
  limit: int = None,
719
709
  sort: List[SortColumn] = None,
720
710
  targets: List[str] = None) -> pd.DataFrame:
721
-
722
711
  """Pulls data from the GitHub "List repository projects" API
723
712
 
724
713
  Returns
@@ -799,6 +788,7 @@ class GithubProjectsTable(APIResource):
799
788
  "creator_site_admin"
800
789
  ]
801
790
 
791
+
802
792
  class GithubMilestonesTable(APIResource):
803
793
  """The GitHub Milestones Table implementation"""
804
794
 
@@ -807,7 +797,6 @@ class GithubMilestonesTable(APIResource):
807
797
  limit: int = None,
808
798
  sort: List[SortColumn] = None,
809
799
  targets: List[str] = None) -> pd.DataFrame:
810
-
811
800
  """Pulls data from the GitHub "List repository milestones" API
812
801
 
813
802
  Returns
@@ -899,17 +888,17 @@ class GithubFilesTable(APIResource):
899
888
  limit -= len(subres)
900
889
  else:
901
890
  if (
902
- (
891
+ (
903
892
  file_matches is None
904
- or
905
- any(re.match(pattern, item.name) for pattern in file_matches)
906
- )
907
- and
908
- (
909
- file_not_matches is None
910
- or
911
- not any(re.match(pattern, item.name) for pattern in file_not_matches)
912
- )
893
+
894
+ or any(re.match(pattern, item.name) for pattern in file_matches)
895
+ )
896
+
897
+ and (
898
+ file_not_matches is None
899
+
900
+ or not any(re.match(pattern, item.name) for pattern in file_not_matches)
901
+ )
913
902
  ):
914
903
 
915
904
  file = {
@@ -965,4 +954,4 @@ class GithubFilesTable(APIResource):
965
954
  return pd.DataFrame(res, columns=self.get_columns())
966
955
 
967
956
  def get_columns(self) -> list:
968
- return ['path', 'name', 'content']
957
+ return ['path', 'name', 'content']
@@ -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 GitlabHandler(APIHandler):
15
16
  """The GitLab handler implementation"""
16
17
 
@@ -60,7 +61,7 @@ class GitlabHandler(APIHandler):
60
61
  try:
61
62
  self.connect()
62
63
  if self.connection_data.get("api_key", None):
63
- logger.info(f"Authenticated as user")
64
+ logger.info("Authenticated as user")
64
65
  else:
65
66
  logger.info("Proceeding without an API key")
66
67
 
@@ -10,6 +10,7 @@ from mindsdb_sql_parser import ast
10
10
 
11
11
  logger = log.getLogger(__name__)
12
12
 
13
+
13
14
  class GitlabIssuesTable(APITable):
14
15
  """The GitLab Issue Table implementation"""
15
16
 
@@ -81,8 +82,6 @@ class GitlabIssuesTable(APITable):
81
82
 
82
83
  gitlab_issues_df = pd.DataFrame(columns=self.get_columns())
83
84
 
84
- start = 0
85
-
86
85
  issues_kwargs["per_page"] = total_results
87
86
  issues_kwargs["get_all"] = False
88
87
  while True:
@@ -253,8 +252,6 @@ class GitlabMergeRequestsTable(APITable):
253
252
 
254
253
  gitlab_merge_requests_df = pd.DataFrame(columns=self.get_columns())
255
254
 
256
- start = 0
257
-
258
255
  merge_requests_kwargs["per_page"] = total_results
259
256
  merge_requests_kwargs["get_all"] = False
260
257
  while True:
@@ -22,7 +22,7 @@ from email.message import EmailMessage
22
22
 
23
23
  from base64 import urlsafe_b64encode, urlsafe_b64decode
24
24
 
25
- from mindsdb.integrations.utilities.handlers.auth_utilities import GoogleUserOAuth2Manager
25
+ from mindsdb.integrations.utilities.handlers.auth_utilities.google import GoogleUserOAuth2Manager
26
26
  from mindsdb.integrations.utilities.handlers.auth_utilities.exceptions import AuthException
27
27
 
28
28
  DEFAULT_SCOPES = [
@@ -59,20 +59,17 @@ class EmailsTable(APITable):
59
59
  conditions = extract_comparison_conditions(query.where)
60
60
 
61
61
  params = {}
62
- include_attachments = False
63
62
  for op, arg1, arg2 in conditions:
64
63
 
65
64
  if op == 'or':
66
- raise NotImplementedError(f'OR is not supported')
65
+ raise NotImplementedError('OR is not supported')
67
66
 
68
- if arg1 in ['query', 'label_ids', 'include_spam_trash', 'include_attachments']:
67
+ if arg1 in ['query', 'label_ids', 'include_spam_trash']:
69
68
  if op == '=':
70
69
  if arg1 == 'query':
71
70
  params['q'] = arg2
72
71
  elif arg1 == 'label_ids':
73
72
  params['labelIds'] = arg2.split(',')
74
- elif arg1 == 'include_attachments':
75
- include_attachments = arg2 == 'true'
76
73
  else:
77
74
  params['includeSpamTrash'] = arg2
78
75
  else:
@@ -88,9 +85,6 @@ class EmailsTable(APITable):
88
85
  method_name='list_messages',
89
86
  params=params
90
87
  )
91
- attachments = []
92
- if include_attachments:
93
- attachments = self.handler.get_attachments(result)
94
88
  # filter targets
95
89
  columns = []
96
90
  for target in query.targets:
@@ -172,7 +166,7 @@ class EmailsTable(APITable):
172
166
  for row in query.values:
173
167
  params = dict(zip(columns, row))
174
168
 
175
- if not 'to_email' in params:
169
+ if 'to_email' not in params:
176
170
  raise ValueError('"to_email" parameter is required to send an email')
177
171
 
178
172
  message = EmailMessage()
@@ -213,7 +207,7 @@ class EmailsTable(APITable):
213
207
  conditions = extract_comparison_conditions(query.where)
214
208
  for op, arg1, arg2 in conditions:
215
209
  if op == 'or':
216
- raise NotImplementedError(f'OR is not supported')
210
+ raise NotImplementedError('OR is not supported')
217
211
  if arg1 == 'message_id':
218
212
  if op == '=':
219
213
  self.handler.call_gmail_api('delete_message', {'id': arg2})
@@ -235,7 +229,7 @@ class EmailsTable(APITable):
235
229
  conditions = extract_comparison_conditions(query.where)
236
230
  for op, arg1, arg2 in conditions:
237
231
  if op == 'or':
238
- raise NotImplementedError(f'OR is not supported')
232
+ raise NotImplementedError('OR is not supported')
239
233
  if arg1 == 'id':
240
234
  if op == '=':
241
235
  params['id'] = arg2
@@ -434,7 +428,6 @@ class GmailHandler(APIHandler):
434
428
  for attachment in attachments:
435
429
  attachment_id = attachment['attachmentId']
436
430
  filename = attachment['filename']
437
- mimeType = attachment['mimeType']
438
431
  attachment_data = self.service.users().messages().attachments().get(
439
432
  userId='me', messageId=email['id'], id=attachment_id).execute()
440
433
  file_data = attachment_data['data']
@@ -16,6 +16,7 @@ from mindsdb.utilities import log
16
16
 
17
17
  logger = log.getLogger(__name__)
18
18
 
19
+
19
20
  class GoogleBooksHandler(APIHandler):
20
21
  """
21
22
  A class for handling connections and interactions with the Google Books API.
@@ -81,7 +82,7 @@ class GoogleBooksHandler(APIHandler):
81
82
  response = StatusResponse(False)
82
83
 
83
84
  try:
84
- service = self.connect()
85
+ self.connect()
85
86
  response.success = True
86
87
  except Exception as e:
87
88
  logger.error(f'Error connecting to Google Books API: {e}!')
@@ -3,9 +3,6 @@ from mindsdb_sql_parser import ast
3
3
  from pandas import DataFrame
4
4
 
5
5
  from mindsdb.integrations.libs.api_handler import APITable
6
- from mindsdb.integrations.libs.response import (
7
- HandlerResponse as Response,
8
- )
9
6
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
10
7
 
11
8
 
@@ -9,7 +9,7 @@ from mindsdb.integrations.libs.response import (
9
9
  )
10
10
  from mindsdb.utilities.config import Config
11
11
  from mindsdb.utilities import log
12
- from mindsdb.integrations.utilities.handlers.auth_utilities import GoogleUserOAuth2Manager
12
+ from mindsdb.integrations.utilities.handlers.auth_utilities.google import GoogleUserOAuth2Manager
13
13
  from mindsdb.integrations.utilities.handlers.auth_utilities.exceptions import AuthException
14
14
 
15
15
  from .google_calendar_tables import GoogleCalendarEventsTable
@@ -177,8 +177,8 @@ class GoogleCalendarHandler(APIHandler):
177
177
  'recurrence': [
178
178
  'RRULE:FREQ=DAILY;COUNT=1'
179
179
  ],
180
- 'attendees': [{'email': attendee['email']} for attendee in (params['attendees']
181
- if isinstance(params['attendees'], list) else [params['attendees']])],
180
+ 'attendees': [{'email': attendee['email']} for attendee in (params['attendees']
181
+ if isinstance(params['attendees'], list) else [params['attendees']])],
182
182
  'reminders': {
183
183
  'useDefault': False,
184
184
  'overrides': [
@@ -188,7 +188,7 @@ class GoogleCalendarHandler(APIHandler):
188
188
  },
189
189
  }
190
190
 
191
- event = service.events().insert(calendarId='primary',
191
+ event = service.events().insert(calendarId='primary',
192
192
  body=event).execute()
193
193
  return pd.DataFrame([event], columns=self.events.get_columns())
194
194
 
@@ -4,9 +4,6 @@ from mindsdb_sql_parser import ast
4
4
  from pandas import DataFrame
5
5
 
6
6
  from mindsdb.integrations.libs.api_handler import APITable
7
- from mindsdb.integrations.libs.response import (
8
- HandlerResponse as Response,
9
- )
10
7
  from mindsdb.integrations.utilities.date_utils import utc_date_str_to_timestamp_ms, parse_utc_date
11
8
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
12
9
 
@@ -41,7 +38,6 @@ class GoogleCalendarEventsTable(APITable):
41
38
  params[arg1] = arg2
42
39
  elif arg1 == 'q':
43
40
  params[arg1] = arg2
44
-
45
41
 
46
42
  # Get the order by from the query.
47
43
  if query.order_by is not None:
@@ -93,7 +89,7 @@ class GoogleCalendarEventsTable(APITable):
93
89
  event_data = {}
94
90
  timestamp_columns = {'start_time', 'end_time', 'created', 'updated'}
95
91
  regular_columns = {'summary', 'description', 'location', 'status', 'html_link',
96
- 'creator', 'organizer', 'reminders', 'timeZone', 'calendar_id', 'attendees'}
92
+ 'creator', 'organizer', 'reminders', 'timeZone', 'calendar_id', 'attendees'}
97
93
 
98
94
  # TODO: check why query.columns is None
99
95
  for col, val in zip(query.columns, values):
@@ -103,7 +99,7 @@ class GoogleCalendarEventsTable(APITable):
103
99
  event_data[col.name] = val
104
100
  else:
105
101
  raise NotImplementedError
106
-
102
+
107
103
  st = datetime.datetime.utcfromtimestamp(event_data['start_time'] / 1000).isoformat() + 'Z'
108
104
  et = datetime.datetime.utcfromtimestamp(event_data['end_time'] / 1000).isoformat() + 'Z'
109
105
 
@@ -17,6 +17,7 @@ from mindsdb.utilities import log
17
17
 
18
18
  logger = log.getLogger(__name__)
19
19
 
20
+
20
21
  class GoogleContentShoppingHandler(APIHandler):
21
22
  """
22
23
  A class for handling connections and interactions with the Google Content API for Shopping.
@@ -88,7 +89,7 @@ class GoogleContentShoppingHandler(APIHandler):
88
89
  response = StatusResponse(False)
89
90
 
90
91
  try:
91
- service = self.connect()
92
+ self.connect()
92
93
  response.success = True
93
94
  except Exception as e:
94
95
  logger.error(f'Error connecting to Google Content API for Shopping: {e}!')
@@ -205,7 +206,7 @@ class GoogleContentShoppingHandler(APIHandler):
205
206
  'placedDateStart',
206
207
  'placedDateEnd',
207
208
  'orderBy']
208
- and value is not None
209
+ and value is not None
209
210
  }
210
211
  if params['order_id']:
211
212
  result = service.orders().get(merchantId=self.merchant_id, orderId=params['order_id'], **args).execute()
@@ -3,9 +3,6 @@ from mindsdb_sql_parser import ast
3
3
  from pandas import DataFrame
4
4
 
5
5
  from mindsdb.integrations.libs.api_handler import APITable
6
- from mindsdb.integrations.libs.response import (
7
- HandlerResponse as Response,
8
- )
9
6
  from mindsdb.integrations.utilities.date_utils import parse_utc_date
10
7
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
11
8
 
@@ -15,7 +15,7 @@ from mindsdb_sql_parser import parse_sql
15
15
 
16
16
  from mindsdb.utilities import log
17
17
  from mindsdb.integrations.handlers.google_fit_handler.google_fit_tables import GoogleFitTable
18
- from mindsdb.integrations.libs.api_handler import APIHandler,FuncParser
18
+ from mindsdb.integrations.libs.api_handler import APIHandler
19
19
  from mindsdb.integrations.libs.response import (
20
20
  HandlerStatusResponse as StatusResponse,
21
21
  HandlerResponse as Response,
@@ -46,7 +46,6 @@ class GoogleFitHandler(APIHandler):
46
46
  self.credentials_path = 'mindsdb/integrations/handlers/google_fit_handler/credentials.json'
47
47
  else:
48
48
  raise Exception('Connection args have to content ether service_account_file or service_account_json')
49
-
50
49
 
51
50
  self.api = None
52
51
  self.is_connected = False
@@ -58,11 +57,11 @@ class GoogleFitHandler(APIHandler):
58
57
  if self.is_connected is True and self.api:
59
58
  return self.api
60
59
  if self.connection_args:
61
- credentialDict = {"installed":self.connection_args}
60
+ credentialDict = {"installed": self.connection_args}
62
61
  f = open(self.credentials_path, "w")
63
62
  f.write(json.dumps(credentialDict).replace(" ", ""))
64
63
  f.close()
65
-
64
+
66
65
  creds = None
67
66
 
68
67
  if os.path.isfile('mindsdb/integrations/handlers/google_fit_handler/token.json'):
@@ -77,7 +76,7 @@ class GoogleFitHandler(APIHandler):
77
76
  with open('mindsdb/integrations/handlers/google_fit_handler/token.json', 'w') as token:
78
77
  token.write(creds.to_json())
79
78
  self.api = build('fitness', 'v1', credentials=creds)
80
-
79
+
81
80
  self.is_connected = True
82
81
  return self.api
83
82
 
@@ -85,7 +84,7 @@ class GoogleFitHandler(APIHandler):
85
84
  response = StatusResponse(False)
86
85
 
87
86
  try:
88
- api = self.connect()
87
+ self.connect()
89
88
  response.success = True
90
89
 
91
90
  except Exception as e:
@@ -109,7 +108,6 @@ class GoogleFitHandler(APIHandler):
109
108
  except HttpError:
110
109
  raise HttpError
111
110
 
112
-
113
111
  def native_query(self, query: str = None) -> Response:
114
112
  """Receive raw query and act upon it somehow.
115
113
  Args:
@@ -120,13 +118,13 @@ class GoogleFitHandler(APIHandler):
120
118
  """
121
119
  ast = parse_sql(query)
122
120
  return self.query(ast)
123
-
121
+
124
122
  def get_steps(self, start_time_millis, end_time_millis) -> pd.DataFrame:
125
123
  steps = {}
126
124
  steps_data = self.retrieve_data(self.api, start_time_millis, end_time_millis, "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps")
127
125
  for daily_step_data in steps_data['bucket']:
128
126
  local_date = datetime.fromtimestamp(int(daily_step_data['startTimeMillis']) / 1000,
129
- tz=pytz.timezone(str(get_localzone())))
127
+ tz=pytz.timezone(str(get_localzone())))
130
128
  local_date_str = local_date.strftime(DATE_FORMAT)
131
129
 
132
130
  data_point = daily_step_data['dataset'][0]['point']
@@ -139,8 +137,8 @@ class GoogleFitHandler(APIHandler):
139
137
  ret = ret.drop('originDataSourceId', axis=1)
140
138
  ret = ret.reset_index(drop=False)
141
139
  return ret
142
-
143
- def call_google_fit_api(self, method_name:str = None, params:dict = None) -> pd.DataFrame:
140
+
141
+ def call_google_fit_api(self, method_name: str = None, params: dict = None) -> pd.DataFrame:
144
142
  """Receive query as AST (abstract syntax tree) and act upon it somehow.
145
143
  Args:
146
144
  query (ASTNode): sql query represented as AST. May be any kind
@@ -152,4 +150,4 @@ class GoogleFitHandler(APIHandler):
152
150
  if method_name == 'get_steps':
153
151
  val = self.get_steps(params['start_time'], params['end_time'])
154
152
  return val
155
- raise NotImplementedError('Method name {} not supported by Google Fit Handler'.format(method_name))
153
+ raise NotImplementedError('Method name {} not supported by Google Fit Handler'.format(method_name))
@@ -7,6 +7,7 @@ import pytz
7
7
  import time
8
8
  from tzlocal import get_localzone
9
9
 
10
+
10
11
  class GoogleFitTable(APITable):
11
12
 
12
13
  def time_parser(self, args) -> int:
@@ -21,38 +22,35 @@ class GoogleFitTable(APITable):
21
22
  epoch0 = datetime.datetime(1970, 1, 1, tzinfo=pytz.utc)
22
23
  time = pytz.timezone(str(get_localzone())).localize(datetime.datetime(int(ymd[0].rstrip()), int(ymd[1].rstrip()), int(ymd[2].rstrip())))
23
24
  return int((time - epoch0).total_seconds() * 1000)
24
-
25
+
25
26
  def select(self, query: ast.Select) -> Response:
26
27
 
27
28
  conditions = extract_comparison_conditions(query.where)
28
-
29
+
29
30
  params = {}
30
- filters = []
31
- steps = {}
32
- #get the local time
31
+ # get the local time
33
32
  now = int(round(time.time() * 1000))
34
33
 
35
- #hard coded for now as user default query time period
36
- one_year = 31536000000
34
+ # hard coded for now as user default query time period
37
35
  one_month = 2629746000
38
36
  for op, arg1, arg2 in conditions:
39
37
  if op == 'or':
40
- raise NotImplementedError(f'OR is not supported')
38
+ raise NotImplementedError('OR is not supported')
41
39
  if arg1 == 'date':
42
40
  date = self.time_parser(arg2)
43
41
  if op == '>':
44
42
  params['start_time'] = date
45
43
  params['end_time'] = now
46
-
47
- #hard coded as a month
44
+
45
+ # hard coded as a month
48
46
  elif op == '<':
49
47
  params['start_time'] = date - one_month
50
48
  params['end_time'] = date
51
49
  else:
52
50
  raise NotImplementedError
53
51
  else:
54
- raise NotImplementedError(f'This query is not supported')
55
- # if time is not provided in the query, the time range is one month ago to now
52
+ raise NotImplementedError('This query is not supported')
53
+ # if time is not provided in the query, the time range is one month ago to now
56
54
  if not params:
57
55
  params['start_time'] = now - one_month
58
56
  params['end_time'] = now
@@ -66,4 +64,4 @@ class GoogleFitTable(APITable):
66
64
  return [
67
65
  'dates',
68
66
  'steps'
69
- ]
67
+ ]
@@ -16,6 +16,7 @@ from mindsdb.utilities import log
16
16
 
17
17
  logger = log.getLogger(__name__)
18
18
 
19
+
19
20
  class GoogleSearchConsoleHandler(APIHandler):
20
21
  """
21
22
  A class for handling connections and interactions with the Google Search Console API.
@@ -86,7 +87,7 @@ class GoogleSearchConsoleHandler(APIHandler):
86
87
  response = StatusResponse(False)
87
88
 
88
89
  try:
89
- service = self.connect()
90
+ self.connect()
90
91
  response.success = True
91
92
  except Exception as e:
92
93
  logger.error(f'Error connecting to Google Search Console API: {e}!')
@@ -3,9 +3,6 @@ from mindsdb_sql_parser import ast
3
3
  from pandas import DataFrame
4
4
 
5
5
  from mindsdb.integrations.libs.api_handler import APITable
6
- from mindsdb.integrations.libs.response import (
7
- HandlerResponse as Response,
8
- )
9
6
  from mindsdb.integrations.utilities.date_utils import parse_utc_date
10
7
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
11
8
 
@@ -1,10 +1,10 @@
1
+ from .__about__ import __version__ as version
2
+ from .__about__ import __description__ as description
1
3
  from mindsdb.integrations.libs.const import HANDLER_TYPE
2
4
  from mindsdb.utilities import log
3
5
 
4
6
  logger = log.getLogger(__name__)
5
7
 
6
- from .__about__ import __description__ as description
7
- from .__about__ import __version__ as version
8
8
 
9
9
  try:
10
10
  from .groq_handler import GroqHandler as Handler
@@ -20,4 +20,4 @@ type = HANDLER_TYPE.ML
20
20
  icon_path = 'icon.svg'
21
21
  permanent = False
22
22
 
23
- __all__ = ["Handler", "version", "name", "type", "title", "description", "import_error", "icon_path"]
23
+ __all__ = ["Handler", "version", "name", "type", "title", "description", "import_error", "icon_path"]
@@ -1,14 +1,13 @@
1
1
  import requests
2
2
  import pandas as pd
3
3
  from mindsdb.utilities import log
4
- from mindsdb.utilities.config import Config
5
- from mindsdb_sql_parser import ast
6
- from mindsdb.integrations.libs.api_handler import APIHandler, APITable
4
+ from mindsdb.integrations.libs.api_handler import APIHandler
7
5
  from mindsdb.integrations.libs.response import HandlerStatusResponse as StatusResponse, HandlerResponse as Response, RESPONSE_TYPE
8
- from .hn_table import StoriesTable, CommentsTable , HNStoriesTable ,JobStoriesTable, ShowStoriesTable
6
+ from .hn_table import StoriesTable, CommentsTable, HNStoriesTable, JobStoriesTable, ShowStoriesTable
9
7
 
10
8
  logger = log.getLogger(__name__)
11
9
 
10
+
12
11
  class HackerNewsHandler(APIHandler):
13
12
  """
14
13
  A class for handling connections and interactions with the Hacker News API.
@@ -23,10 +22,10 @@ class HackerNewsHandler(APIHandler):
23
22
  self._register_table('stories', stories)
24
23
 
25
24
  hnstories = HNStoriesTable(self)
26
- self._register_table('hnstories',hnstories)
25
+ self._register_table('hnstories', hnstories)
27
26
 
28
27
  jobstories = JobStoriesTable(self)
29
- self._register_table('jobstories',jobstories)
28
+ self._register_table('jobstories', jobstories)
30
29
 
31
30
  showstories = ShowStoriesTable(self)
32
31
  self._register_table('showstories', showstories)
@@ -99,4 +98,3 @@ class HackerNewsHandler(APIHandler):
99
98
  raise ValueError(f'Unknown method_name: {method_name}')
100
99
 
101
100
  return df
102
-
@@ -2,8 +2,7 @@ import pandas as pd
2
2
  from mindsdb.integrations.libs.api_handler import APITable
3
3
  from mindsdb_sql_parser import ast
4
4
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
5
- from typing import List, Tuple
6
- import requests
5
+ from typing import List
7
6
 
8
7
 
9
8
  class StoriesTable(APITable):
@@ -40,7 +39,6 @@ class StoriesTable(APITable):
40
39
 
41
40
  return df
42
41
 
43
-
44
42
  def get_columns(self):
45
43
  """Get the list of column names for the stories table.
46
44
  Returns:
@@ -63,15 +61,17 @@ class StoriesTable(APITable):
63
61
  columns.append(target.value)
64
62
  df = df[columns]
65
63
  return df
66
-
64
+
65
+
67
66
  class HNStoriesTable(StoriesTable):
68
67
  json_endpoint = "askstories.json"
69
68
  columns = ['id', 'time', 'title', 'text', 'score', 'descendants']
70
69
 
70
+
71
71
  class JobStoriesTable(StoriesTable):
72
72
  json_endpoint = "jobstories.json"
73
73
  columns = ['id', 'time', 'title', 'url', 'score', 'type']
74
-
74
+
75
75
 
76
76
  class ShowStoriesTable(StoriesTable):
77
77
  json_endpoint = "showstories.json"
@@ -116,8 +116,7 @@ class CommentsTable(APITable):
116
116
  comments_df = comments_df.head(limit)
117
117
 
118
118
  return comments_df
119
-
120
-
119
+
121
120
  def get_columns(self) -> List[str]:
122
121
  """Get the list of column names for the comments table.
123
122
  Returns:
@@ -47,4 +47,4 @@ class HiveHandlerTest(unittest.TestCase):
47
47
 
48
48
 
49
49
  if __name__ == '__main__':
50
- unittest.main()
50
+ unittest.main()