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

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

Potentially problematic release.


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

Files changed (350) hide show
  1. mindsdb/__about__.py +1 -1
  2. mindsdb/__main__.py +215 -185
  3. mindsdb/api/a2a/__init__.py +0 -0
  4. mindsdb/api/a2a/__main__.py +114 -0
  5. mindsdb/api/a2a/a2a_client.py +439 -0
  6. mindsdb/api/a2a/agent.py +308 -0
  7. mindsdb/api/a2a/common/__init__.py +0 -0
  8. mindsdb/api/a2a/common/client/__init__.py +4 -0
  9. mindsdb/api/a2a/common/client/card_resolver.py +21 -0
  10. mindsdb/api/a2a/common/client/client.py +86 -0
  11. mindsdb/api/a2a/common/server/__init__.py +4 -0
  12. mindsdb/api/a2a/common/server/server.py +164 -0
  13. mindsdb/api/a2a/common/server/task_manager.py +287 -0
  14. mindsdb/api/a2a/common/server/utils.py +28 -0
  15. mindsdb/api/a2a/common/types.py +365 -0
  16. mindsdb/api/a2a/constants.py +9 -0
  17. mindsdb/api/a2a/run_a2a.py +129 -0
  18. mindsdb/api/a2a/task_manager.py +594 -0
  19. mindsdb/api/executor/command_executor.py +49 -28
  20. mindsdb/api/executor/datahub/classes/response.py +5 -2
  21. mindsdb/api/executor/datahub/datanodes/information_schema_datanode.py +8 -0
  22. mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
  23. mindsdb/api/executor/datahub/datanodes/system_tables.py +10 -13
  24. mindsdb/api/executor/planner/query_planner.py +14 -2
  25. mindsdb/api/executor/sql_query/result_set.py +185 -52
  26. mindsdb/api/executor/sql_query/sql_query.py +1 -1
  27. mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +11 -13
  28. mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
  29. mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
  30. mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
  31. mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
  32. mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
  33. mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
  34. mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
  35. mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
  36. mindsdb/api/http/initialize.py +118 -85
  37. mindsdb/api/http/namespaces/analysis.py +17 -4
  38. mindsdb/api/http/namespaces/file.py +8 -2
  39. mindsdb/api/http/namespaces/sql.py +13 -27
  40. mindsdb/api/http/namespaces/tree.py +1 -1
  41. mindsdb/api/http/start.py +7 -2
  42. mindsdb/api/mcp/start.py +42 -5
  43. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
  44. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
  45. mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
  46. mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
  47. mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +86 -123
  48. mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
  49. mindsdb/api/mysql/mysql_proxy/utilities/exceptions.py +0 -4
  50. mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
  51. mindsdb/api/postgres/postgres_proxy/postgres_packets/postgres_message_formats.py +2 -2
  52. mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
  53. mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
  54. mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
  55. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
  56. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
  57. mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
  58. mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
  59. mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
  60. mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
  61. mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
  62. mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
  63. mindsdb/integrations/handlers/bigquery_handler/requirements.txt +1 -0
  64. mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
  65. mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
  66. mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
  67. mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
  68. mindsdb/integrations/handlers/chromadb_handler/requirements.txt +1 -0
  69. mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
  70. mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
  71. mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
  72. mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
  73. mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
  74. mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
  75. mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
  76. mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
  77. mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
  78. mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
  79. mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
  80. mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
  81. mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
  82. mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
  83. mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
  84. mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
  85. mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
  86. mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
  87. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
  88. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
  89. mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
  90. mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
  91. mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
  92. mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
  93. mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
  94. mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
  95. mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
  96. mindsdb/integrations/handlers/email_handler/settings.py +0 -1
  97. mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
  98. mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
  99. mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
  100. mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
  101. mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
  102. mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
  103. mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
  104. mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
  105. mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
  106. mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
  107. mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
  108. mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
  109. mindsdb/integrations/handlers/gmail_handler/requirements.txt +1 -0
  110. mindsdb/integrations/handlers/google_analytics_handler/requirements.txt +2 -1
  111. mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
  112. mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
  113. mindsdb/integrations/handlers/google_books_handler/requirements.txt +1 -1
  114. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
  115. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
  116. mindsdb/integrations/handlers/google_calendar_handler/requirements.txt +1 -0
  117. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
  118. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
  119. mindsdb/integrations/handlers/google_content_shopping_handler/requirements.txt +1 -1
  120. mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
  121. mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
  122. mindsdb/integrations/handlers/google_fit_handler/requirements.txt +2 -0
  123. mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
  124. mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
  125. mindsdb/integrations/handlers/google_search_handler/requirements.txt +1 -1
  126. mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
  127. mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
  128. mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
  129. mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
  130. mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
  131. mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
  132. mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
  133. mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
  134. mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
  135. mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
  136. mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
  137. mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
  138. mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
  139. mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
  140. mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
  141. mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
  142. mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
  143. mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
  144. mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
  145. mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
  146. mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
  147. mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
  148. mindsdb/integrations/handlers/jira_handler/jira_handler.archived.py +75 -0
  149. mindsdb/integrations/handlers/jira_handler/jira_handler.py +113 -38
  150. mindsdb/integrations/handlers/jira_handler/jira_tables.py +229 -0
  151. mindsdb/integrations/handlers/jira_handler/requirements.txt +1 -0
  152. mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
  153. mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
  154. mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
  155. mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
  156. mindsdb/integrations/handlers/lightfm_handler/requirements.txt +1 -0
  157. mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
  158. mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -3
  159. mindsdb/integrations/handlers/lightwood_handler/requirements.txt +4 -4
  160. mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
  161. mindsdb/integrations/handlers/lindorm_handler/requirements.txt +1 -0
  162. mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
  163. mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
  164. mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
  165. mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
  166. mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
  167. mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
  168. mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
  169. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
  170. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
  171. mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
  172. mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
  173. mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
  174. mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
  175. mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
  176. mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
  177. mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
  178. mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
  179. mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
  180. mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
  181. mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
  182. mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
  183. mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
  184. mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
  185. mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
  186. mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
  187. mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
  188. mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
  189. mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
  190. mindsdb/integrations/handlers/ms_one_drive_handler/requirements.txt +2 -0
  191. mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
  192. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
  193. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
  194. mindsdb/integrations/handlers/ms_teams_handler/requirements.txt +3 -1
  195. mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
  196. mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
  197. mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
  198. mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
  199. mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
  200. mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
  201. mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
  202. mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
  203. mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
  204. mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
  205. mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
  206. mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
  207. mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
  208. mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
  209. mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
  210. mindsdb/integrations/handlers/openai_handler/openai_handler.py +5 -4
  211. mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
  212. mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
  213. mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
  214. mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
  215. mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
  216. mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
  217. mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
  218. mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
  219. mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
  220. mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
  221. mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
  222. mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
  223. mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
  224. mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
  225. mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
  226. mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
  227. mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
  228. mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
  229. mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
  230. mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
  231. mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
  232. mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
  233. mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
  234. mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
  235. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
  236. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
  237. mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
  238. mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
  239. mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
  240. mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
  241. mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
  242. mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
  243. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
  244. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
  245. mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
  246. mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
  247. mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
  248. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
  249. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
  250. mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
  251. mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
  252. mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
  253. mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
  254. mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
  255. mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
  256. mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
  257. mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
  258. mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
  259. mindsdb/integrations/handlers/snowflake_handler/requirements.txt +1 -1
  260. mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
  261. mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
  262. mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
  263. mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
  264. mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
  265. mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
  266. mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
  267. mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
  268. mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
  269. mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
  270. mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
  271. mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
  272. mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
  273. mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
  274. mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
  275. mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
  276. mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
  277. mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
  278. mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
  279. mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
  280. mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
  281. mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
  282. mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
  283. mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
  284. mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
  285. mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
  286. mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
  287. mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
  288. mindsdb/integrations/handlers/vertex_handler/requirements.txt +1 -0
  289. mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
  290. mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
  291. mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
  292. mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
  293. mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
  294. mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
  295. mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
  296. mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
  297. mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
  298. mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
  299. mindsdb/integrations/handlers/youtube_handler/requirements.txt +1 -0
  300. mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
  301. mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
  302. mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
  303. mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
  304. mindsdb/integrations/libs/response.py +67 -52
  305. mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
  306. mindsdb/integrations/utilities/files/file_reader.py +5 -2
  307. mindsdb/integrations/utilities/handler_utils.py +15 -3
  308. mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
  309. mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
  310. mindsdb/integrations/utilities/utils.py +3 -3
  311. mindsdb/interfaces/agents/agents_controller.py +164 -1
  312. mindsdb/interfaces/agents/constants.py +29 -2
  313. mindsdb/interfaces/agents/langchain_agent.py +18 -8
  314. mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
  315. mindsdb/interfaces/database/projects.py +1 -7
  316. mindsdb/interfaces/functions/controller.py +11 -14
  317. mindsdb/interfaces/functions/to_markdown.py +9 -124
  318. mindsdb/interfaces/knowledge_base/controller.py +47 -19
  319. mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +41 -15
  320. mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
  321. mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
  322. mindsdb/interfaces/knowledge_base/utils.py +10 -15
  323. mindsdb/interfaces/model/model_controller.py +0 -2
  324. mindsdb/interfaces/query_context/context_controller.py +66 -10
  325. mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
  326. mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
  327. mindsdb/interfaces/skills/skill_tool.py +202 -57
  328. mindsdb/interfaces/skills/sql_agent.py +238 -28
  329. mindsdb/interfaces/storage/fs.py +1 -0
  330. mindsdb/interfaces/variables/__init__.py +0 -0
  331. mindsdb/interfaces/variables/variables_controller.py +97 -0
  332. mindsdb/migrations/env.py +5 -7
  333. mindsdb/migrations/migrate.py +47 -9
  334. mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
  335. mindsdb/utilities/config.py +333 -220
  336. mindsdb/utilities/context.py +1 -1
  337. mindsdb/utilities/functions.py +0 -36
  338. mindsdb/utilities/langfuse.py +19 -10
  339. mindsdb/utilities/otel/__init__.py +9 -193
  340. mindsdb/utilities/otel/metric_handlers/__init__.py +5 -1
  341. mindsdb/utilities/otel/prepare.py +198 -0
  342. mindsdb/utilities/sql.py +83 -0
  343. mindsdb/utilities/starters.py +13 -0
  344. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +351 -338
  345. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +348 -322
  346. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
  347. mindsdb/api/mysql/mysql_proxy/classes/sql_statement_parser.py +0 -151
  348. mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
  349. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
  350. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
@@ -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
  ]
@@ -1,23 +1,21 @@
1
1
  from mindsdb_sql_parser import parse_sql
2
2
  import pandas as pd
3
3
  from mendeley import Mendeley
4
- from mindsdb.integrations.libs.api_handler import APIHandler, FuncParser
4
+ from mindsdb.integrations.libs.api_handler import APIHandler
5
5
  from mendeley.session import MendeleySession
6
- from mindsdb.integrations.handlers.mendeley_handler.mendeley_tables import CatalogSearchTable
6
+ from mindsdb.integrations.handlers.mendeley_handler.mendeley_tables import CatalogSearchTable
7
7
  from mindsdb.utilities import log
8
8
  from typing import Dict
9
9
  from mindsdb.integrations.libs.response import (
10
- HandlerStatusResponse as StatusResponse,
11
- HandlerResponse as Response,
12
- RESPONSE_TYPE
10
+ HandlerStatusResponse as StatusResponse
13
11
  )
14
12
 
15
13
  logger = log.getLogger(__name__)
16
14
 
17
- class MendeleyHandler(APIHandler):
18
15
 
19
- def __init__(self, name, **kwargs):
16
+ class MendeleyHandler(APIHandler):
20
17
 
18
+ def __init__(self, name, **kwargs):
21
19
  """ constructor
22
20
  Args:
23
21
  name (str): the handler name
@@ -25,16 +23,16 @@ class MendeleyHandler(APIHandler):
25
23
  super().__init__(name)
26
24
 
27
25
  self.connection_args = kwargs.get('connection_data', {})
28
-
26
+
29
27
  self.client_id = self.connection_args.get('client_id', None)
30
28
  self.client_secret = self.connection_args.get('client_secret', None)
31
29
  self.session = self.connect()
32
30
 
33
31
  self.session = None
34
32
  self.is_connected = False
35
-
33
+
36
34
  catalog_search_data = CatalogSearchTable(self)
37
- self.catalog_search_data = catalog_search_data
35
+ self.catalog_search_data = catalog_search_data
38
36
  self._register_table('catalog_search_data', catalog_search_data)
39
37
 
40
38
  def connect(self) -> MendeleySession:
@@ -47,7 +45,7 @@ class MendeleyHandler(APIHandler):
47
45
  Returns:
48
46
  HandlerStatusResponse """
49
47
 
50
- if self.is_connected == True:
48
+ if self.is_connected:
51
49
  return self.session
52
50
 
53
51
  mendeley = Mendeley(self.client_id, self.client_secret)
@@ -56,9 +54,8 @@ class MendeleyHandler(APIHandler):
56
54
 
57
55
  self.is_connected = True
58
56
  return self.session
59
-
60
- def check_connection(self) -> StatusResponse:
61
57
 
58
+ def check_connection(self) -> StatusResponse:
62
59
  """ The check_connection method checks the connection to the handler
63
60
  Returns:
64
61
  HandlerStatusResponse
@@ -77,7 +74,6 @@ class MendeleyHandler(APIHandler):
77
74
  return response
78
75
 
79
76
  def native_query(self, query_string: str):
80
-
81
77
  """The native_query method receives raw query and acts upon it.
82
78
  Args:
83
79
  query_string (str): query in native format
@@ -86,9 +82,9 @@ class MendeleyHandler(APIHandler):
86
82
  """
87
83
  ast = parse_sql(query_string)
88
84
  return self.query(ast)
89
-
90
- def get_authors(self,data):
91
- """The get_authors method receives the data - a specific document returned by the API, gets the names of the authors
85
+
86
+ def get_authors(self, data):
87
+ """The get_authors method receives the data - a specific document returned by the API, gets the names of the authors
92
88
  and combines them in a string, so as to allow the use of DataFrame.
93
89
  Args:
94
90
  data (CatalogDocument): document returned by API
@@ -97,18 +93,18 @@ class MendeleyHandler(APIHandler):
97
93
  """
98
94
  authors = ""
99
95
  sum = 0
100
- if data.authors!=None:
96
+ if data.authors is not None:
101
97
  for x in data.authors:
102
- if sum + 1 == len(data.authors) and x.first_name!=None and x.last_name!=None :
98
+ if sum + 1 == len(data.authors) and x.first_name is not None and x.last_name is not None:
103
99
  authors = authors + x.first_name + " " + x.last_name
104
100
  else:
105
- if x.first_name!=None and x.last_name!=None:
101
+ if x.first_name is not None and x.last_name is not None:
106
102
  authors = authors + x.first_name + " " + x.last_name + ", "
107
103
  sum = sum + 1
108
104
  return authors
109
105
 
110
- def get_keywords(self,data):
111
- """The get_keywords method receives the data-a specific document returned by the API, gets the specified keywords
106
+ def get_keywords(self, data):
107
+ """The get_keywords method receives the data-a specific document returned by the API, gets the specified keywords
112
108
  and combines them in a string, so as to allow the use of DataFrame.
113
109
  Args:
114
110
  data (CatalogDocument) : document returned by the API
@@ -117,18 +113,17 @@ class MendeleyHandler(APIHandler):
117
113
  """
118
114
  keywords = ""
119
115
  sum = 0
120
- if data.keywords!=None:
116
+ if data.keywords is not None:
121
117
  for x in data.keywords:
122
118
  if sum + 1 == len(data.keywords):
123
- keywords = keywords + x + " "
119
+ keywords = keywords + x + " "
124
120
  else:
125
- if x!=None :
121
+ if x is not None:
126
122
  keywords = keywords + x + ", "
127
123
  sum = sum + 1
128
124
  return keywords
129
-
130
- def create_dict(self,data):
131
125
 
126
+ def create_dict(self, data):
132
127
  """The create_dict method receives the data-a specific document returned by the API, gets the resources-fields of the document,
133
128
  as specified in Mendley documentation, and puts them in a dictionary.
134
129
 
@@ -142,7 +137,7 @@ class MendeleyHandler(APIHandler):
142
137
  dict["type"] = data.type
143
138
  dict["source"] = data.source
144
139
  dict["year"] = data.year
145
- if data.identifiers!=None:
140
+ if data.identifiers is not None:
146
141
  dict["pmid"] = data.identifiers.get("pmid")
147
142
  dict["sgr"] = data.identifiers.get("sgr")
148
143
  dict["issn"] = data.identifiers.get("issn")
@@ -150,16 +145,15 @@ class MendeleyHandler(APIHandler):
150
145
  dict["doi"] = data.identifiers.get("doi")
151
146
  dict["pui"] = data.identifiers.get("pui")
152
147
  dict["authors"] = self.get_authors(data)
153
- if data.keywords!=None:
148
+ if data.keywords is not None:
154
149
  dict["keywords"] = self.get_keywords(data)
155
150
  else:
156
151
  dict["keywords"] = None
157
152
  dict["link"] = data.link
158
153
  dict["id"] = data.id
159
154
  return dict
160
-
155
+
161
156
  def call_mendeley_api(self, method_name: str, params: Dict) -> pd.DataFrame:
162
-
163
157
  """The method call_mendeley_api is used to communicate with Mendeley. Depending on the method used there are three different types
164
158
  of search conducted.
165
159
  The advanced_search results in a CatalogSearch resource, which, depending on the parameters used, could either be a number of different documents (CatalogDocument),
@@ -174,28 +168,28 @@ class MendeleyHandler(APIHandler):
174
168
  DataFrame
175
169
  """
176
170
 
177
- self.session= self.connect()
171
+ self.session = self.connect()
178
172
 
179
173
  if method_name == 'advanced_search':
180
174
  search_params = {
181
- 'title': params.get("title"),
182
- 'author': params.get("author"),
183
- 'source': params.get("source"),
184
- 'abstract': params.get("abstract"),
185
- 'min_year': params.get("min_year"),
186
- 'max_year': params.get("max_year"),
187
- 'open_access': params.get("open_access")
175
+ 'title': params.get("title"),
176
+ 'author': params.get("author"),
177
+ 'source': params.get("source"),
178
+ 'abstract': params.get("abstract"),
179
+ 'min_year': params.get("min_year"),
180
+ 'max_year': params.get("max_year"),
181
+ 'open_access': params.get("open_access")
188
182
  }
189
183
  data = self.session.catalog.advanced_search(**search_params)
190
184
  sum = 0
191
185
  df = pd.DataFrame()
192
186
  for x in data.list(page_size=params["limit"]).items:
193
- if sum == 0:
194
- df = pd.DataFrame(self.create_dict(x),index=[0])
195
- sum += 1
196
- else :
197
- df = df.append(self.create_dict(x),ignore_index = True)
198
- sum += 1
187
+ if sum == 0:
188
+ df = pd.DataFrame(self.create_dict(x), index=[0])
189
+ sum += 1
190
+ else:
191
+ df = df.append(self.create_dict(x), ignore_index=True)
192
+ sum += 1
199
193
  if df.empty:
200
194
  raise NotImplementedError(('Insufficient or wrong input given'))
201
195
  else:
@@ -203,23 +197,21 @@ class MendeleyHandler(APIHandler):
203
197
 
204
198
  elif method_name == 'identifier_search':
205
199
  search_params = {
206
- 'arxiv': params.get("arxiv"),
207
- 'doi': params.get("doi"),
208
- 'isbn': params.get("isbn"),
209
- 'issn': params.get("issn"),
210
- 'pmid': params.get("pmid"),
211
- 'scopus': params.get("scopus"),
212
- 'filehash': params.get("filehash")
200
+ 'arxiv': params.get("arxiv"),
201
+ 'doi': params.get("doi"),
202
+ 'isbn': params.get("isbn"),
203
+ 'issn': params.get("issn"),
204
+ 'pmid': params.get("pmid"),
205
+ 'scopus': params.get("scopus"),
206
+ 'filehash': params.get("filehash")
213
207
  }
214
208
  data = self.session.catalog.by_identifier(**search_params)
215
- df = pd.DataFrame(self.create_dict(data),index=[0])
209
+ df = pd.DataFrame(self.create_dict(data), index=[0])
216
210
  return df
217
211
 
218
212
  elif method_name == 'get':
219
213
  data = self.session.catalog.get(params.get("id"))
220
- df = pd.DataFrame(self.create_dict(data),index=[0])
214
+ df = pd.DataFrame(self.create_dict(data), index=[0])
221
215
  return df
222
216
 
223
217
  raise NotImplementedError('Method name {} not supported by Mendeley API Handler'.format(method_name))
224
-
225
-