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.
- mindsdb/__about__.py +1 -1
- mindsdb/__main__.py +127 -79
- mindsdb/api/a2a/__init__.py +0 -0
- mindsdb/api/a2a/__main__.py +114 -0
- mindsdb/api/a2a/a2a_client.py +439 -0
- mindsdb/api/a2a/agent.py +308 -0
- mindsdb/api/a2a/common/__init__.py +0 -0
- mindsdb/api/a2a/common/client/__init__.py +4 -0
- mindsdb/api/a2a/common/client/card_resolver.py +21 -0
- mindsdb/api/a2a/common/client/client.py +86 -0
- mindsdb/api/a2a/common/server/__init__.py +4 -0
- mindsdb/api/a2a/common/server/server.py +164 -0
- mindsdb/api/a2a/common/server/task_manager.py +287 -0
- mindsdb/api/a2a/common/server/utils.py +28 -0
- mindsdb/api/a2a/common/types.py +365 -0
- mindsdb/api/a2a/constants.py +9 -0
- mindsdb/api/a2a/run_a2a.py +129 -0
- mindsdb/api/a2a/task_manager.py +594 -0
- mindsdb/api/executor/command_executor.py +47 -27
- mindsdb/api/executor/datahub/classes/response.py +5 -2
- mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
- mindsdb/api/executor/planner/query_planner.py +10 -1
- mindsdb/api/executor/sql_query/result_set.py +185 -52
- mindsdb/api/executor/sql_query/sql_query.py +1 -1
- mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +9 -12
- mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
- mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
- mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
- mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
- mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
- mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
- mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
- mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
- mindsdb/api/http/initialize.py +99 -83
- mindsdb/api/http/namespaces/analysis.py +3 -3
- mindsdb/api/http/namespaces/file.py +8 -2
- mindsdb/api/http/namespaces/sql.py +13 -27
- mindsdb/api/mcp/start.py +42 -5
- mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
- mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
- mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
- mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
- mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +82 -115
- mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
- mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
- mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
- mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
- mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
- mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
- mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
- mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
- mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
- mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
- mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
- mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
- mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
- mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
- mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
- mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
- mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
- mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
- mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
- mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
- mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
- mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
- mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
- mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
- mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
- mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
- mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
- mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
- mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
- mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
- mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
- mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
- mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
- mindsdb/integrations/handlers/email_handler/settings.py +0 -1
- mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
- mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
- mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
- mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
- mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
- mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
- mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
- mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
- mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
- mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
- mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
- mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
- mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
- mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
- mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
- mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
- mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
- mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
- mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
- mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
- mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
- mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
- mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
- mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
- mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
- mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
- mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
- mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
- mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
- mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
- mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
- mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
- mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
- mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
- mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
- mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
- mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
- mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
- mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
- mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
- mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
- mindsdb/integrations/handlers/jira_handler/jira_handler.py +4 -4
- mindsdb/integrations/handlers/jira_handler/jira_tables.py +9 -9
- mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
- mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
- mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
- mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -1
- mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
- mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
- mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
- mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
- mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
- mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
- mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
- mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
- mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
- mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
- mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
- mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
- mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
- mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
- mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
- mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
- mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
- mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
- mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
- mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
- mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
- mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
- mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
- mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
- mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
- mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
- mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
- mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
- mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
- mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
- mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
- mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
- mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
- mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
- mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
- mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
- mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
- mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
- mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
- mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
- mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
- mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
- mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
- mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
- mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
- mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
- mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
- mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
- mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
- mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
- mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
- mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
- mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
- mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
- mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
- mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
- mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
- mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
- mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
- mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
- mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
- mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
- mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
- mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
- mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
- mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
- mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
- mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
- mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
- mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
- mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
- mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
- mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
- mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
- mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
- mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
- mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
- mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
- mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
- mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
- mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
- mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
- mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
- mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
- mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
- mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
- mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
- mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
- mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
- mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
- mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
- mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
- mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
- mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
- mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
- mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
- mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
- mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
- mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
- mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
- mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
- mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
- mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
- mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
- mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
- mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
- mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
- mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
- mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
- mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
- mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
- mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
- mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
- mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
- mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
- mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
- mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
- mindsdb/integrations/libs/response.py +67 -52
- mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
- mindsdb/integrations/utilities/handler_utils.py +15 -3
- mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
- mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
- mindsdb/integrations/utilities/utils.py +3 -3
- mindsdb/interfaces/agents/agents_controller.py +164 -1
- mindsdb/interfaces/agents/constants.py +15 -0
- mindsdb/interfaces/agents/langchain_agent.py +16 -4
- mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
- mindsdb/interfaces/knowledge_base/controller.py +25 -0
- mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +13 -10
- mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
- mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
- mindsdb/interfaces/query_context/context_controller.py +66 -10
- mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
- mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
- mindsdb/interfaces/skills/skill_tool.py +202 -57
- mindsdb/interfaces/skills/sql_agent.py +205 -17
- mindsdb/interfaces/storage/fs.py +1 -0
- mindsdb/interfaces/variables/__init__.py +0 -0
- mindsdb/interfaces/variables/variables_controller.py +97 -0
- mindsdb/migrations/env.py +5 -7
- mindsdb/migrations/migrate.py +47 -7
- mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
- mindsdb/utilities/config.py +331 -219
- mindsdb/utilities/starters.py +13 -0
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +641 -695
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +309 -288
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
|
@@ -28,7 +28,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
28
28
|
except RequestException as request_error:
|
|
29
29
|
logger.error(f"Failed to check connection to Microsoft Teams: {request_error}")
|
|
30
30
|
return False
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
def get_teams(self) -> List[Dict]:
|
|
33
33
|
"""
|
|
34
34
|
Get teams from Microsoft Teams.
|
|
@@ -37,7 +37,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
37
37
|
List[Dict]: The teams data.
|
|
38
38
|
"""
|
|
39
39
|
return self._get_all_groups()
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
def get_channels(self, group_id: Text = None, channel_ids: List[Text] = None) -> List[Dict]:
|
|
42
42
|
"""
|
|
43
43
|
Get channels from Microsoft Teams.
|
|
@@ -57,7 +57,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
57
57
|
return self._get_channels_across_all_groups_by_ids(channel_ids)
|
|
58
58
|
else:
|
|
59
59
|
return self._get_all_channels_across_all_groups()
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
def get_channel_messages(self, group_id: Text, channel_id: Text, message_ids: List[Text] = None) -> List[Dict]:
|
|
62
62
|
"""
|
|
63
63
|
Get channel messages from Microsoft Teams.
|
|
@@ -74,7 +74,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
74
74
|
return self._get_messages_in_channel_by_ids(group_id, channel_id, message_ids)
|
|
75
75
|
else:
|
|
76
76
|
return self._get_all_messages_in_channel(group_id, channel_id)
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
def get_chats(self, chat_ids: List[Text] = None) -> List[Dict]:
|
|
79
79
|
"""
|
|
80
80
|
Get chats from Microsoft Teams.
|
|
@@ -89,7 +89,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
89
89
|
return self._get_chats_by_ids(chat_ids)
|
|
90
90
|
else:
|
|
91
91
|
return self._get_all_chats()
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
def get_chat_messages(self, chat_id: Text, message_ids: List[Text] = None) -> List[Dict]:
|
|
94
94
|
"""
|
|
95
95
|
Get chat messages from Microsoft Teams.
|
|
@@ -118,7 +118,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
118
118
|
self._group_ids = [group["id"] for group in groups]
|
|
119
119
|
|
|
120
120
|
return self._group_ids
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
@abstractmethod
|
|
123
123
|
def _get_all_groups(self) -> List[Dict]:
|
|
124
124
|
"""
|
|
@@ -198,7 +198,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
198
198
|
channel.update({"teamId": group_id})
|
|
199
199
|
|
|
200
200
|
return channel
|
|
201
|
-
|
|
201
|
+
|
|
202
202
|
def _get_channels_in_group_by_ids(self, group_id: Text, channel_ids: List[Text]) -> List[Dict]:
|
|
203
203
|
"""
|
|
204
204
|
Get channels by their IDs and the ID of the group that they belong to.
|
|
@@ -215,7 +215,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
215
215
|
channels.append(self._get_channel_in_group_by_id(group_id, channel_id))
|
|
216
216
|
|
|
217
217
|
return channels
|
|
218
|
-
|
|
218
|
+
|
|
219
219
|
def _get_all_channels_in_group(self, group_id: Text) -> List[Dict]:
|
|
220
220
|
"""
|
|
221
221
|
Get all channels of a group by its ID.
|
|
@@ -231,7 +231,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
231
231
|
channel["teamId"] = group_id
|
|
232
232
|
|
|
233
233
|
return channels
|
|
234
|
-
|
|
234
|
+
|
|
235
235
|
def _get_all_channels_across_all_groups(self) -> List[Dict]:
|
|
236
236
|
"""
|
|
237
237
|
Get all channels across all groups related to Microsoft Teams.
|
|
@@ -244,7 +244,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
244
244
|
channels += self._get_all_channels_in_group(group_id)
|
|
245
245
|
|
|
246
246
|
return channels
|
|
247
|
-
|
|
247
|
+
|
|
248
248
|
def _get_channels_across_all_groups_by_ids(self, channel_ids: List[Text]) -> List[Dict]:
|
|
249
249
|
"""
|
|
250
250
|
Get channels by their IDs.
|
|
@@ -258,7 +258,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
258
258
|
channels = self._get_all_channels_across_all_groups()
|
|
259
259
|
|
|
260
260
|
return [channel for channel in channels if channel["id"] in channel_ids]
|
|
261
|
-
|
|
261
|
+
|
|
262
262
|
def _get_message_in_channel_by_id(self, group_id: Text, channel_id: Text, message_id: Text) -> Dict:
|
|
263
263
|
"""
|
|
264
264
|
Get a message by its ID, the ID of the group that it belongs to, and the ID of the channel that it belongs to.
|
|
@@ -272,7 +272,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
272
272
|
Dict: The message data.
|
|
273
273
|
"""
|
|
274
274
|
return self.fetch_data_json(f"teams/{group_id}/channels/{channel_id}/messages/{message_id}")
|
|
275
|
-
|
|
275
|
+
|
|
276
276
|
def _get_messages_in_channel_by_ids(self, group_id: Text, channel_id: Text, message_ids: List[Text]) -> List[Dict]:
|
|
277
277
|
"""
|
|
278
278
|
Get messages by their IDs, the ID of the group that they belong to, and the ID of the channel that they belong to.
|
|
@@ -310,7 +310,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
310
310
|
break
|
|
311
311
|
|
|
312
312
|
return messages[:limit]
|
|
313
|
-
|
|
313
|
+
|
|
314
314
|
def _get_chats_by_ids(self, chat_ids: List[Text]) -> List[Dict]:
|
|
315
315
|
"""
|
|
316
316
|
Get chats by their IDs.
|
|
@@ -326,7 +326,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
|
|
|
326
326
|
chats.append(self._get_chat_by_id(chat_id))
|
|
327
327
|
|
|
328
328
|
return chats
|
|
329
|
-
|
|
329
|
+
|
|
330
330
|
def _get_messages_in_chat_by_ids(self, chat_id: Text, message_ids: List[Text]) -> List[Dict]:
|
|
331
331
|
"""
|
|
332
332
|
Get messages by their IDs and the ID of the chat that they belong to.
|
|
@@ -351,7 +351,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
|
|
|
351
351
|
This client is used for accessing the Microsoft Teams specific endpoints of the Microsoft Graph API.
|
|
352
352
|
Several common methods for submitting requests, fetching data, etc. are inherited from the base class.
|
|
353
353
|
"""
|
|
354
|
-
|
|
354
|
+
|
|
355
355
|
def _get_all_groups(self) -> List[Dict]:
|
|
356
356
|
"""
|
|
357
357
|
Get all groups related to Microsoft Teams.
|
|
@@ -363,7 +363,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
|
|
|
363
363
|
"/groups",
|
|
364
364
|
params={"$filter": "resourceProvisioningOptions/Any(x:x eq 'Team')"}
|
|
365
365
|
)
|
|
366
|
-
|
|
366
|
+
|
|
367
367
|
def _get_chat_by_id(self, chat_id: Text) -> Dict:
|
|
368
368
|
"""
|
|
369
369
|
Get a chat by its ID.
|
|
@@ -375,7 +375,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
|
|
|
375
375
|
Dict: The chat data.
|
|
376
376
|
"""
|
|
377
377
|
return self.fetch_data_json(f"chats/{chat_id}")
|
|
378
|
-
|
|
378
|
+
|
|
379
379
|
def _get_all_chats(self, limit: int = None) -> List[Dict]:
|
|
380
380
|
"""
|
|
381
381
|
Get all chats related to Microsoft Teams.
|
|
@@ -400,7 +400,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
|
|
|
400
400
|
Dict: The message data.
|
|
401
401
|
"""
|
|
402
402
|
return self.fetch_data_json(f"chats/{chat_id}/messages/{message_id}")
|
|
403
|
-
|
|
403
|
+
|
|
404
404
|
def _get_all_messages_in_chat(self, chat_id: Text, limit: int = None) -> List[Dict]:
|
|
405
405
|
"""
|
|
406
406
|
Get messages of a chat by its ID.
|
|
@@ -421,13 +421,13 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
|
|
|
421
421
|
return messages[:limit]
|
|
422
422
|
|
|
423
423
|
|
|
424
|
-
class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
|
|
424
|
+
class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
|
|
425
425
|
"""
|
|
426
426
|
The Microsoft Graph API client for the Microsoft Teams handler with delegated permissions.
|
|
427
427
|
This client is used for accessing the Microsoft Teams specific endpoints of the Microsoft Graph API.
|
|
428
428
|
Several common methods for submitting requests, fetching data, etc. are inherited from the base class.
|
|
429
429
|
"""
|
|
430
|
-
|
|
430
|
+
|
|
431
431
|
def _get_all_groups(self) -> List[Dict]:
|
|
432
432
|
"""
|
|
433
433
|
Get all groups that the signed in user is a member of.
|
|
@@ -436,7 +436,7 @@ class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
|
|
|
436
436
|
List[Dict]: The groups data.
|
|
437
437
|
"""
|
|
438
438
|
return self.fetch_data_json("me/joinedTeams")
|
|
439
|
-
|
|
439
|
+
|
|
440
440
|
def _get_chat_by_id(self, chat_id: Text) -> Dict:
|
|
441
441
|
"""
|
|
442
442
|
Get a chat by its ID.
|
|
@@ -467,7 +467,7 @@ class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
|
|
|
467
467
|
break
|
|
468
468
|
|
|
469
469
|
return chats[:limit]
|
|
470
|
-
|
|
470
|
+
|
|
471
471
|
def _get_message_in_chat_by_id(self, chat_id: Text, message_id: Text) -> Dict:
|
|
472
472
|
"""
|
|
473
473
|
Get a message by its ID and the ID of the chat that it belongs to.
|
|
@@ -480,7 +480,7 @@ class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
|
|
|
480
480
|
Dict: The message data.
|
|
481
481
|
"""
|
|
482
482
|
return self.fetch_data_json(f"me/chats/{chat_id}/messages/{message_id}")
|
|
483
|
-
|
|
483
|
+
|
|
484
484
|
def _get_all_messages_in_chat(self, chat_id: Text, limit: int = None) -> List[Dict]:
|
|
485
485
|
"""
|
|
486
486
|
Get messages of a chat by its ID.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import Dict, Text, Callable, Union
|
|
2
2
|
|
|
3
3
|
from botbuilder.schema import Activity, ActivityTypes
|
|
4
4
|
from botbuilder.schema import ChannelAccount
|
|
@@ -19,7 +19,7 @@ from mindsdb.integrations.libs.response import (
|
|
|
19
19
|
HandlerStatusResponse as StatusResponse,
|
|
20
20
|
)
|
|
21
21
|
from mindsdb.integrations.libs.api_handler import APIChatHandler
|
|
22
|
-
from mindsdb.integrations.utilities.handlers.auth_utilities import (
|
|
22
|
+
from mindsdb.integrations.utilities.handlers.auth_utilities.microsoft import (
|
|
23
23
|
MSGraphAPIApplicationPermissionsManager,
|
|
24
24
|
MSGraphAPIDelegatedPermissionsManager
|
|
25
25
|
)
|
|
@@ -233,7 +233,7 @@ class MSTeamsHandler(APIChatHandler):
|
|
|
233
233
|
callback(
|
|
234
234
|
chat_id=request['conversation']['id'],
|
|
235
235
|
message=chat_bot_message
|
|
236
|
-
)
|
|
236
|
+
)
|
|
237
237
|
|
|
238
238
|
@chatbot_only
|
|
239
239
|
def respond(self, message: ChatBotMessage) -> None:
|
|
@@ -15,6 +15,7 @@ class TeamsTable(APIResource):
|
|
|
15
15
|
"""
|
|
16
16
|
The table abstraction for the 'teams' resource of the Microsoft Graph API.
|
|
17
17
|
"""
|
|
18
|
+
|
|
18
19
|
def list(
|
|
19
20
|
self,
|
|
20
21
|
conditions: List[FilterCondition] = None,
|
|
@@ -67,6 +68,7 @@ class ChannelsTable(APIResource):
|
|
|
67
68
|
"""
|
|
68
69
|
The table abstraction for the 'channels' resource of the Microsoft Graph API.
|
|
69
70
|
"""
|
|
71
|
+
|
|
70
72
|
def list(
|
|
71
73
|
self,
|
|
72
74
|
conditions: List[FilterCondition] = None,
|
|
@@ -146,6 +148,7 @@ class ChannelMessagesTable(APIResource):
|
|
|
146
148
|
"""
|
|
147
149
|
The table abstraction for the 'channel messages' resource of the Microsoft Graph API.
|
|
148
150
|
"""
|
|
151
|
+
|
|
149
152
|
def list(
|
|
150
153
|
self,
|
|
151
154
|
conditions: List[FilterCondition] = None,
|
|
@@ -206,7 +209,7 @@ class ChannelMessagesTable(APIResource):
|
|
|
206
209
|
|
|
207
210
|
if not group_id or not channel_id:
|
|
208
211
|
raise ValueError("The 'channelIdentity_teamId' and 'channelIdentity_channelId' columns are required.")
|
|
209
|
-
|
|
212
|
+
|
|
210
213
|
messages = client.get_channel_messages(group_id, channel_id, message_ids)
|
|
211
214
|
|
|
212
215
|
messages_df = pd.json_normalize(messages, sep="_")
|
|
@@ -247,12 +250,13 @@ class ChannelMessagesTable(APIResource):
|
|
|
247
250
|
"channelIdentity_teamId",
|
|
248
251
|
"channelIdentity_channelId",
|
|
249
252
|
]
|
|
250
|
-
|
|
253
|
+
|
|
251
254
|
|
|
252
255
|
class ChatsTable(APIResource):
|
|
253
256
|
"""
|
|
254
257
|
The table abstraction for the 'chats' resource of the Microsoft Graph API.
|
|
255
258
|
"""
|
|
259
|
+
|
|
256
260
|
def list(
|
|
257
261
|
self,
|
|
258
262
|
conditions: List[FilterCondition] = None,
|
|
@@ -312,12 +316,13 @@ class ChatsTable(APIResource):
|
|
|
312
316
|
"webUrl",
|
|
313
317
|
"isHiddenForAllMembers"
|
|
314
318
|
]
|
|
315
|
-
|
|
319
|
+
|
|
316
320
|
|
|
317
321
|
class ChatMessagesTable(APIResource):
|
|
318
322
|
"""
|
|
319
323
|
The table abstraction for the 'chat messages' resource of the Microsoft Graph API.
|
|
320
324
|
"""
|
|
325
|
+
|
|
321
326
|
def list(
|
|
322
327
|
self,
|
|
323
328
|
conditions: List[FilterCondition] = None,
|
|
@@ -367,7 +372,7 @@ class ChatMessagesTable(APIResource):
|
|
|
367
372
|
|
|
368
373
|
if not chat_id:
|
|
369
374
|
raise ValueError("The 'chatId' column is required.")
|
|
370
|
-
|
|
375
|
+
|
|
371
376
|
messages = client.get_chat_messages(chat_id, message_ids)
|
|
372
377
|
|
|
373
378
|
messages_df = pd.json_normalize(messages, sep="_")
|
|
@@ -405,4 +410,4 @@ class ChatMessagesTable(APIResource):
|
|
|
405
410
|
"from_user_userIdentityType",
|
|
406
411
|
"body_contentType",
|
|
407
412
|
"body_content",
|
|
408
|
-
]
|
|
413
|
+
]
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
import datetime
|
|
3
|
+
|
|
1
4
|
import pymssql
|
|
2
5
|
from pymssql import OperationalError
|
|
3
6
|
import pandas as pd
|
|
7
|
+
from pandas.api import types as pd_types
|
|
4
8
|
|
|
5
9
|
from mindsdb_sql_parser import parse_sql
|
|
6
10
|
from mindsdb_sql_parser.ast.base import ASTNode
|
|
@@ -46,10 +50,77 @@ def _map_type(mssql_type_text: str) -> MYSQL_DATA_TYPE:
|
|
|
46
50
|
if internal_type_name in db_types_list:
|
|
47
51
|
return mysql_data_type
|
|
48
52
|
|
|
49
|
-
logger.
|
|
53
|
+
logger.debug(f"MSSQL handler type mapping: unknown type: {internal_type_name}, use VARCHAR as fallback.")
|
|
50
54
|
return MYSQL_DATA_TYPE.VARCHAR
|
|
51
55
|
|
|
52
56
|
|
|
57
|
+
def _make_table_response(result: list[dict[str, Any]], cursor: pymssql.Cursor) -> Response:
|
|
58
|
+
"""Build response from result and cursor.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
result (list[dict[str, Any]]): result of the query.
|
|
62
|
+
cursor (pymssql.Cursor): cursor object.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
Response: response object.
|
|
66
|
+
"""
|
|
67
|
+
description: list[tuple[Any]] = cursor.description
|
|
68
|
+
mysql_types: list[MYSQL_DATA_TYPE] = []
|
|
69
|
+
|
|
70
|
+
data_frame = pd.DataFrame(
|
|
71
|
+
result,
|
|
72
|
+
columns=[x[0] for x in cursor.description]
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
for column in description:
|
|
76
|
+
column_name = column[0]
|
|
77
|
+
column_type = column[1]
|
|
78
|
+
column_dtype = data_frame[column_name].dtype
|
|
79
|
+
match column_type:
|
|
80
|
+
case pymssql.NUMBER:
|
|
81
|
+
if pd_types.is_integer_dtype(column_dtype):
|
|
82
|
+
mysql_types.append(MYSQL_DATA_TYPE.INT)
|
|
83
|
+
elif pd_types.is_float_dtype(column_dtype):
|
|
84
|
+
mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
|
|
85
|
+
elif pd_types.is_bool_dtype(column_dtype):
|
|
86
|
+
# it is 'bit' type
|
|
87
|
+
mysql_types.append(MYSQL_DATA_TYPE.TINYINT)
|
|
88
|
+
else:
|
|
89
|
+
mysql_types.append(MYSQL_DATA_TYPE.DOUBLE)
|
|
90
|
+
case pymssql.DECIMAL:
|
|
91
|
+
mysql_types.append(MYSQL_DATA_TYPE.DECIMAL)
|
|
92
|
+
case pymssql.STRING:
|
|
93
|
+
mysql_types.append(MYSQL_DATA_TYPE.TEXT)
|
|
94
|
+
case pymssql.DATETIME:
|
|
95
|
+
mysql_types.append(MYSQL_DATA_TYPE.DATETIME)
|
|
96
|
+
case pymssql.BINARY:
|
|
97
|
+
# DATE and TIME types returned as 'BINARY' type, and dataframe type is 'object', so it is not possible
|
|
98
|
+
# to infer correct mysql type for them
|
|
99
|
+
if pd_types.is_datetime64_any_dtype(column_dtype):
|
|
100
|
+
# pymssql return datetimes as 'binary' type
|
|
101
|
+
# if timezone is present, then it is datetime.timezone
|
|
102
|
+
series = data_frame[column_name]
|
|
103
|
+
if (
|
|
104
|
+
series.dt.tz is not None
|
|
105
|
+
and isinstance(series.dt.tz, datetime.timezone)
|
|
106
|
+
and series.dt.tz != datetime.timezone.utc
|
|
107
|
+
):
|
|
108
|
+
series = series.dt.tz_convert('UTC')
|
|
109
|
+
data_frame[column_name] = series.dt.tz_localize(None)
|
|
110
|
+
mysql_types.append(MYSQL_DATA_TYPE.DATETIME)
|
|
111
|
+
else:
|
|
112
|
+
mysql_types.append(MYSQL_DATA_TYPE.BINARY)
|
|
113
|
+
case _:
|
|
114
|
+
logger.warning(f"Unknown type: {column_type}, use TEXT as fallback.")
|
|
115
|
+
mysql_types.append(MYSQL_DATA_TYPE.TEXT)
|
|
116
|
+
|
|
117
|
+
return Response(
|
|
118
|
+
RESPONSE_TYPE.TABLE,
|
|
119
|
+
data_frame=data_frame,
|
|
120
|
+
mysql_types=mysql_types
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
53
124
|
class SqlServerHandler(DatabaseHandler):
|
|
54
125
|
"""
|
|
55
126
|
This handler handles connection and execution of the Microsoft SQL Server statements.
|
|
@@ -169,13 +240,7 @@ class SqlServerHandler(DatabaseHandler):
|
|
|
169
240
|
cur.execute(query)
|
|
170
241
|
if cur.description:
|
|
171
242
|
result = cur.fetchall()
|
|
172
|
-
response =
|
|
173
|
-
RESPONSE_TYPE.TABLE,
|
|
174
|
-
data_frame=pd.DataFrame(
|
|
175
|
-
result,
|
|
176
|
-
columns=[x[0] for x in cur.description]
|
|
177
|
-
)
|
|
178
|
-
)
|
|
243
|
+
response = _make_table_response(result, cur)
|
|
179
244
|
else:
|
|
180
245
|
response = Response(RESPONSE_TYPE.OK, affected_rows=cur.rowcount)
|
|
181
246
|
connection.commit()
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
__title__ =
|
|
2
|
-
__package_name__ =
|
|
3
|
-
__version__ =
|
|
1
|
+
__title__ = "MindsDB MySQL handler"
|
|
2
|
+
__package_name__ = "mindsdb_mysql_handler"
|
|
3
|
+
__version__ = "0.0.1"
|
|
4
4
|
__description__ = "MindsDB handler for MySQL"
|
|
5
|
-
__author__ =
|
|
6
|
-
__github__ =
|
|
7
|
-
__pypi__ =
|
|
8
|
-
__license__ =
|
|
9
|
-
__copyright__ =
|
|
5
|
+
__author__ = "MindsDB Inc"
|
|
6
|
+
__github__ = "https://github.com/mindsdb/mindsdb"
|
|
7
|
+
__pypi__ = "https://pypi.org/project/mindsdb/"
|
|
8
|
+
__license__ = "MIT"
|
|
9
|
+
__copyright__ = "Copyright 2022- mindsdb"
|
|
@@ -2,19 +2,29 @@ from mindsdb.integrations.libs.const import HANDLER_TYPE
|
|
|
2
2
|
|
|
3
3
|
from .__about__ import __version__ as version, __description__ as description
|
|
4
4
|
from .connection_args import connection_args, connection_args_example
|
|
5
|
+
|
|
5
6
|
try:
|
|
6
7
|
from .mysql_handler import MySQLHandler as Handler
|
|
8
|
+
|
|
7
9
|
import_error = None
|
|
8
10
|
except Exception as e:
|
|
9
11
|
Handler = None
|
|
10
12
|
import_error = e
|
|
11
13
|
|
|
12
|
-
title =
|
|
13
|
-
name =
|
|
14
|
+
title = "MySQL"
|
|
15
|
+
name = "mysql"
|
|
14
16
|
type = HANDLER_TYPE.DATA
|
|
15
|
-
icon_path =
|
|
17
|
+
icon_path = "icon.svg"
|
|
16
18
|
|
|
17
19
|
__all__ = [
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
"Handler",
|
|
21
|
+
"version",
|
|
22
|
+
"name",
|
|
23
|
+
"type",
|
|
24
|
+
"title",
|
|
25
|
+
"description",
|
|
26
|
+
"connection_args",
|
|
27
|
+
"connection_args_example",
|
|
28
|
+
"import_error",
|
|
29
|
+
"icon_path",
|
|
20
30
|
]
|
|
@@ -5,72 +5,68 @@ from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE as ARG_T
|
|
|
5
5
|
|
|
6
6
|
connection_args = OrderedDict(
|
|
7
7
|
url={
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
"type": ARG_TYPE.STR,
|
|
9
|
+
"description": "The URI-Like connection string to the MySQL server. If provided, it will override the other connection arguments.",
|
|
10
|
+
"required": False,
|
|
11
|
+
"label": "URL",
|
|
12
12
|
},
|
|
13
13
|
user={
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
"type": ARG_TYPE.STR,
|
|
15
|
+
"description": "The user name used to authenticate with the MySQL server.",
|
|
16
|
+
"required": True,
|
|
17
|
+
"label": "User",
|
|
18
18
|
},
|
|
19
19
|
password={
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
"type": ARG_TYPE.PWD,
|
|
21
|
+
"description": "The password to authenticate the user with the MySQL server.",
|
|
22
|
+
"required": True,
|
|
23
|
+
"label": "Password",
|
|
24
|
+
"secret": True,
|
|
25
25
|
},
|
|
26
26
|
database={
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
"type": ARG_TYPE.STR,
|
|
28
|
+
"description": "The database name to use when connecting with the MySQL server.",
|
|
29
|
+
"required": True,
|
|
30
|
+
"label": "Database",
|
|
31
31
|
},
|
|
32
32
|
host={
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
"type": ARG_TYPE.STR,
|
|
34
|
+
"description": "The host name or IP address of the MySQL server. NOTE: use '127.0.0.1' instead of 'localhost' to connect to local server.",
|
|
35
|
+
"required": True,
|
|
36
|
+
"label": "Host",
|
|
37
37
|
},
|
|
38
38
|
port={
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
"type": ARG_TYPE.INT,
|
|
40
|
+
"description": "The TCP/IP port of the MySQL server. Must be an integer.",
|
|
41
|
+
"required": True,
|
|
42
|
+
"label": "Port",
|
|
43
43
|
},
|
|
44
44
|
ssl={
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
"type": ARG_TYPE.BOOL,
|
|
46
|
+
"description": "Set it to True to enable ssl.",
|
|
47
|
+
"required": False,
|
|
48
|
+
"label": "ssl",
|
|
49
49
|
},
|
|
50
50
|
ssl_ca={
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
"type": ARG_TYPE.PATH,
|
|
52
|
+
"description": "Path or URL of the Certificate Authority (CA) certificate file",
|
|
53
|
+
"required": False,
|
|
54
|
+
"label": "ssl_ca",
|
|
55
55
|
},
|
|
56
56
|
ssl_cert={
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
"type": ARG_TYPE.PATH,
|
|
58
|
+
"description": "Path name or URL of the server public key certificate file",
|
|
59
|
+
"required": False,
|
|
60
|
+
"label": "ssl_cert",
|
|
61
61
|
},
|
|
62
62
|
ssl_key={
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
63
|
+
"type": ARG_TYPE.PATH,
|
|
64
|
+
"description": "The path name or URL of the server private key file",
|
|
65
|
+
"required": False,
|
|
66
|
+
"label": "ssl_key",
|
|
67
|
+
},
|
|
68
68
|
)
|
|
69
69
|
|
|
70
70
|
connection_args_example = OrderedDict(
|
|
71
|
-
host=
|
|
72
|
-
port=3306,
|
|
73
|
-
user='root',
|
|
74
|
-
password='password',
|
|
75
|
-
database='database'
|
|
71
|
+
host="127.0.0.1", port=3306, user="root", password="password", database="database"
|
|
76
72
|
)
|