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.
- mindsdb/__about__.py +1 -1
- mindsdb/__main__.py +215 -185
- 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 +49 -28
- mindsdb/api/executor/datahub/classes/response.py +5 -2
- mindsdb/api/executor/datahub/datanodes/information_schema_datanode.py +8 -0
- mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
- mindsdb/api/executor/datahub/datanodes/system_tables.py +10 -13
- mindsdb/api/executor/planner/query_planner.py +14 -2
- 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 +11 -13
- 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 +118 -85
- mindsdb/api/http/namespaces/analysis.py +17 -4
- mindsdb/api/http/namespaces/file.py +8 -2
- mindsdb/api/http/namespaces/sql.py +13 -27
- mindsdb/api/http/namespaces/tree.py +1 -1
- mindsdb/api/http/start.py +7 -2
- 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 +86 -123
- mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
- mindsdb/api/mysql/mysql_proxy/utilities/exceptions.py +0 -4
- mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
- mindsdb/api/postgres/postgres_proxy/postgres_packets/postgres_message_formats.py +2 -2
- 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/requirements.txt +1 -0
- 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/chromadb_handler/requirements.txt +1 -0
- 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/gmail_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/google_analytics_handler/requirements.txt +2 -1
- 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_books_handler/requirements.txt +1 -1
- 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_calendar_handler/requirements.txt +1 -0
- 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_content_shopping_handler/requirements.txt +1 -1
- 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_fit_handler/requirements.txt +2 -0
- 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/google_search_handler/requirements.txt +1 -1
- 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.archived.py +75 -0
- mindsdb/integrations/handlers/jira_handler/jira_handler.py +113 -38
- mindsdb/integrations/handlers/jira_handler/jira_tables.py +229 -0
- mindsdb/integrations/handlers/jira_handler/requirements.txt +1 -0
- 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/lightfm_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
- mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -3
- mindsdb/integrations/handlers/lightwood_handler/requirements.txt +4 -4
- mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
- mindsdb/integrations/handlers/lindorm_handler/requirements.txt +1 -0
- 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_one_drive_handler/requirements.txt +2 -0
- 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/ms_teams_handler/requirements.txt +3 -1
- 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/openai_handler/openai_handler.py +5 -4
- 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/requirements.txt +1 -1
- 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/requirements.txt +1 -0
- 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/requirements.txt +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/files/file_reader.py +5 -2
- 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 +29 -2
- mindsdb/interfaces/agents/langchain_agent.py +18 -8
- mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
- mindsdb/interfaces/database/projects.py +1 -7
- mindsdb/interfaces/functions/controller.py +11 -14
- mindsdb/interfaces/functions/to_markdown.py +9 -124
- mindsdb/interfaces/knowledge_base/controller.py +47 -19
- mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +41 -15
- mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
- mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
- mindsdb/interfaces/knowledge_base/utils.py +10 -15
- mindsdb/interfaces/model/model_controller.py +0 -2
- 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 +238 -28
- 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 -9
- mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
- mindsdb/utilities/config.py +333 -220
- mindsdb/utilities/context.py +1 -1
- mindsdb/utilities/functions.py +0 -36
- mindsdb/utilities/langfuse.py +19 -10
- mindsdb/utilities/otel/__init__.py +9 -193
- mindsdb/utilities/otel/metric_handlers/__init__.py +5 -1
- mindsdb/utilities/otel/prepare.py +198 -0
- mindsdb/utilities/sql.py +83 -0
- mindsdb/utilities/starters.py +13 -0
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +351 -338
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +348 -322
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
- mindsdb/api/mysql/mysql_proxy/classes/sql_statement_parser.py +0 -151
- mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import re
|
|
2
2
|
from typing import List
|
|
3
|
-
|
|
4
3
|
import pandas as pd
|
|
5
4
|
|
|
6
|
-
from mindsdb_sql_parser import ast
|
|
7
|
-
|
|
8
5
|
from mindsdb.integrations.libs.api_handler import APIResource
|
|
9
|
-
from mindsdb.integrations.utilities.handlers.query_utilities import SELECTQueryParser, SELECTQueryExecutor
|
|
10
6
|
from mindsdb.integrations.utilities.sql_utils import (
|
|
11
|
-
|
|
7
|
+
FilterCondition, FilterOperator, SortColumn)
|
|
12
8
|
from mindsdb.utilities import log
|
|
13
9
|
|
|
14
10
|
|
|
@@ -241,8 +237,6 @@ class GithubPullRequestsTable(APIResource):
|
|
|
241
237
|
limit: int = None,
|
|
242
238
|
sort: List[SortColumn] = None,
|
|
243
239
|
targets: List[str] = None) -> pd.DataFrame:
|
|
244
|
-
|
|
245
|
-
|
|
246
240
|
"""Pulls data from the GitHub "List repository pull requests" API
|
|
247
241
|
|
|
248
242
|
Native filters:
|
|
@@ -397,7 +391,6 @@ class GithubCommitsTable(APIResource):
|
|
|
397
391
|
limit: int = None,
|
|
398
392
|
sort: List[SortColumn] = None,
|
|
399
393
|
targets: List[str] = None) -> pd.DataFrame:
|
|
400
|
-
|
|
401
394
|
"""Pulls data from the GitHub "List commits" API
|
|
402
395
|
|
|
403
396
|
Returns
|
|
@@ -473,7 +466,6 @@ class GithubReleasesTable(APIResource):
|
|
|
473
466
|
limit: int = None,
|
|
474
467
|
sort: List[SortColumn] = None,
|
|
475
468
|
targets: List[str] = None) -> pd.DataFrame:
|
|
476
|
-
|
|
477
469
|
"""Pulls data from the GitHub "List repository releases" API
|
|
478
470
|
|
|
479
471
|
Returns
|
|
@@ -550,7 +542,6 @@ class GithubBranchesTable(APIResource):
|
|
|
550
542
|
limit: int = None,
|
|
551
543
|
sort: List[SortColumn] = None,
|
|
552
544
|
targets: List[str] = None) -> pd.DataFrame:
|
|
553
|
-
|
|
554
545
|
"""Pulls data from the GitHub "List repository branches" API
|
|
555
546
|
|
|
556
547
|
Returns
|
|
@@ -616,7 +607,6 @@ class GithubContributorsTable(APIResource):
|
|
|
616
607
|
limit: int = None,
|
|
617
608
|
sort: List[SortColumn] = None,
|
|
618
609
|
targets: List[str] = None) -> pd.DataFrame:
|
|
619
|
-
|
|
620
610
|
"""Pulls data from the GitHub "List repository contributors" API
|
|
621
611
|
|
|
622
612
|
Returns
|
|
@@ -718,7 +708,6 @@ class GithubProjectsTable(APIResource):
|
|
|
718
708
|
limit: int = None,
|
|
719
709
|
sort: List[SortColumn] = None,
|
|
720
710
|
targets: List[str] = None) -> pd.DataFrame:
|
|
721
|
-
|
|
722
711
|
"""Pulls data from the GitHub "List repository projects" API
|
|
723
712
|
|
|
724
713
|
Returns
|
|
@@ -799,6 +788,7 @@ class GithubProjectsTable(APIResource):
|
|
|
799
788
|
"creator_site_admin"
|
|
800
789
|
]
|
|
801
790
|
|
|
791
|
+
|
|
802
792
|
class GithubMilestonesTable(APIResource):
|
|
803
793
|
"""The GitHub Milestones Table implementation"""
|
|
804
794
|
|
|
@@ -807,7 +797,6 @@ class GithubMilestonesTable(APIResource):
|
|
|
807
797
|
limit: int = None,
|
|
808
798
|
sort: List[SortColumn] = None,
|
|
809
799
|
targets: List[str] = None) -> pd.DataFrame:
|
|
810
|
-
|
|
811
800
|
"""Pulls data from the GitHub "List repository milestones" API
|
|
812
801
|
|
|
813
802
|
Returns
|
|
@@ -899,17 +888,17 @@ class GithubFilesTable(APIResource):
|
|
|
899
888
|
limit -= len(subres)
|
|
900
889
|
else:
|
|
901
890
|
if (
|
|
902
|
-
|
|
891
|
+
(
|
|
903
892
|
file_matches is None
|
|
904
|
-
|
|
905
|
-
any(re.match(pattern, item.name) for pattern in file_matches)
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
893
|
+
|
|
894
|
+
or any(re.match(pattern, item.name) for pattern in file_matches)
|
|
895
|
+
)
|
|
896
|
+
|
|
897
|
+
and (
|
|
898
|
+
file_not_matches is None
|
|
899
|
+
|
|
900
|
+
or not any(re.match(pattern, item.name) for pattern in file_not_matches)
|
|
901
|
+
)
|
|
913
902
|
):
|
|
914
903
|
|
|
915
904
|
file = {
|
|
@@ -965,4 +954,4 @@ class GithubFilesTable(APIResource):
|
|
|
965
954
|
return pd.DataFrame(res, columns=self.get_columns())
|
|
966
955
|
|
|
967
956
|
def get_columns(self) -> list:
|
|
968
|
-
return ['path', 'name', 'content']
|
|
957
|
+
return ['path', 'name', 'content']
|
|
@@ -11,6 +11,7 @@ from mindsdb_sql_parser import parse_sql
|
|
|
11
11
|
|
|
12
12
|
logger = log.getLogger(__name__)
|
|
13
13
|
|
|
14
|
+
|
|
14
15
|
class GitlabHandler(APIHandler):
|
|
15
16
|
"""The GitLab handler implementation"""
|
|
16
17
|
|
|
@@ -60,7 +61,7 @@ class GitlabHandler(APIHandler):
|
|
|
60
61
|
try:
|
|
61
62
|
self.connect()
|
|
62
63
|
if self.connection_data.get("api_key", None):
|
|
63
|
-
logger.info(
|
|
64
|
+
logger.info("Authenticated as user")
|
|
64
65
|
else:
|
|
65
66
|
logger.info("Proceeding without an API key")
|
|
66
67
|
|
|
@@ -10,6 +10,7 @@ from mindsdb_sql_parser import ast
|
|
|
10
10
|
|
|
11
11
|
logger = log.getLogger(__name__)
|
|
12
12
|
|
|
13
|
+
|
|
13
14
|
class GitlabIssuesTable(APITable):
|
|
14
15
|
"""The GitLab Issue Table implementation"""
|
|
15
16
|
|
|
@@ -81,8 +82,6 @@ class GitlabIssuesTable(APITable):
|
|
|
81
82
|
|
|
82
83
|
gitlab_issues_df = pd.DataFrame(columns=self.get_columns())
|
|
83
84
|
|
|
84
|
-
start = 0
|
|
85
|
-
|
|
86
85
|
issues_kwargs["per_page"] = total_results
|
|
87
86
|
issues_kwargs["get_all"] = False
|
|
88
87
|
while True:
|
|
@@ -253,8 +252,6 @@ class GitlabMergeRequestsTable(APITable):
|
|
|
253
252
|
|
|
254
253
|
gitlab_merge_requests_df = pd.DataFrame(columns=self.get_columns())
|
|
255
254
|
|
|
256
|
-
start = 0
|
|
257
|
-
|
|
258
255
|
merge_requests_kwargs["per_page"] = total_results
|
|
259
256
|
merge_requests_kwargs["get_all"] = False
|
|
260
257
|
while True:
|
|
@@ -22,7 +22,7 @@ from email.message import EmailMessage
|
|
|
22
22
|
|
|
23
23
|
from base64 import urlsafe_b64encode, urlsafe_b64decode
|
|
24
24
|
|
|
25
|
-
from mindsdb.integrations.utilities.handlers.auth_utilities import GoogleUserOAuth2Manager
|
|
25
|
+
from mindsdb.integrations.utilities.handlers.auth_utilities.google import GoogleUserOAuth2Manager
|
|
26
26
|
from mindsdb.integrations.utilities.handlers.auth_utilities.exceptions import AuthException
|
|
27
27
|
|
|
28
28
|
DEFAULT_SCOPES = [
|
|
@@ -59,20 +59,17 @@ class EmailsTable(APITable):
|
|
|
59
59
|
conditions = extract_comparison_conditions(query.where)
|
|
60
60
|
|
|
61
61
|
params = {}
|
|
62
|
-
include_attachments = False
|
|
63
62
|
for op, arg1, arg2 in conditions:
|
|
64
63
|
|
|
65
64
|
if op == 'or':
|
|
66
|
-
raise NotImplementedError(
|
|
65
|
+
raise NotImplementedError('OR is not supported')
|
|
67
66
|
|
|
68
|
-
if arg1 in ['query', 'label_ids', 'include_spam_trash'
|
|
67
|
+
if arg1 in ['query', 'label_ids', 'include_spam_trash']:
|
|
69
68
|
if op == '=':
|
|
70
69
|
if arg1 == 'query':
|
|
71
70
|
params['q'] = arg2
|
|
72
71
|
elif arg1 == 'label_ids':
|
|
73
72
|
params['labelIds'] = arg2.split(',')
|
|
74
|
-
elif arg1 == 'include_attachments':
|
|
75
|
-
include_attachments = arg2 == 'true'
|
|
76
73
|
else:
|
|
77
74
|
params['includeSpamTrash'] = arg2
|
|
78
75
|
else:
|
|
@@ -88,9 +85,6 @@ class EmailsTable(APITable):
|
|
|
88
85
|
method_name='list_messages',
|
|
89
86
|
params=params
|
|
90
87
|
)
|
|
91
|
-
attachments = []
|
|
92
|
-
if include_attachments:
|
|
93
|
-
attachments = self.handler.get_attachments(result)
|
|
94
88
|
# filter targets
|
|
95
89
|
columns = []
|
|
96
90
|
for target in query.targets:
|
|
@@ -172,7 +166,7 @@ class EmailsTable(APITable):
|
|
|
172
166
|
for row in query.values:
|
|
173
167
|
params = dict(zip(columns, row))
|
|
174
168
|
|
|
175
|
-
if
|
|
169
|
+
if 'to_email' not in params:
|
|
176
170
|
raise ValueError('"to_email" parameter is required to send an email')
|
|
177
171
|
|
|
178
172
|
message = EmailMessage()
|
|
@@ -213,7 +207,7 @@ class EmailsTable(APITable):
|
|
|
213
207
|
conditions = extract_comparison_conditions(query.where)
|
|
214
208
|
for op, arg1, arg2 in conditions:
|
|
215
209
|
if op == 'or':
|
|
216
|
-
raise NotImplementedError(
|
|
210
|
+
raise NotImplementedError('OR is not supported')
|
|
217
211
|
if arg1 == 'message_id':
|
|
218
212
|
if op == '=':
|
|
219
213
|
self.handler.call_gmail_api('delete_message', {'id': arg2})
|
|
@@ -235,7 +229,7 @@ class EmailsTable(APITable):
|
|
|
235
229
|
conditions = extract_comparison_conditions(query.where)
|
|
236
230
|
for op, arg1, arg2 in conditions:
|
|
237
231
|
if op == 'or':
|
|
238
|
-
raise NotImplementedError(
|
|
232
|
+
raise NotImplementedError('OR is not supported')
|
|
239
233
|
if arg1 == 'id':
|
|
240
234
|
if op == '=':
|
|
241
235
|
params['id'] = arg2
|
|
@@ -434,7 +428,6 @@ class GmailHandler(APIHandler):
|
|
|
434
428
|
for attachment in attachments:
|
|
435
429
|
attachment_id = attachment['attachmentId']
|
|
436
430
|
filename = attachment['filename']
|
|
437
|
-
mimeType = attachment['mimeType']
|
|
438
431
|
attachment_data = self.service.users().messages().attachments().get(
|
|
439
432
|
userId='me', messageId=email['id'], id=attachment_id).execute()
|
|
440
433
|
file_data = attachment_data['data']
|
|
@@ -16,6 +16,7 @@ from mindsdb.utilities import log
|
|
|
16
16
|
|
|
17
17
|
logger = log.getLogger(__name__)
|
|
18
18
|
|
|
19
|
+
|
|
19
20
|
class GoogleBooksHandler(APIHandler):
|
|
20
21
|
"""
|
|
21
22
|
A class for handling connections and interactions with the Google Books API.
|
|
@@ -81,7 +82,7 @@ class GoogleBooksHandler(APIHandler):
|
|
|
81
82
|
response = StatusResponse(False)
|
|
82
83
|
|
|
83
84
|
try:
|
|
84
|
-
|
|
85
|
+
self.connect()
|
|
85
86
|
response.success = True
|
|
86
87
|
except Exception as e:
|
|
87
88
|
logger.error(f'Error connecting to Google Books API: {e}!')
|
|
@@ -3,9 +3,6 @@ from mindsdb_sql_parser import ast
|
|
|
3
3
|
from pandas import DataFrame
|
|
4
4
|
|
|
5
5
|
from mindsdb.integrations.libs.api_handler import APITable
|
|
6
|
-
from mindsdb.integrations.libs.response import (
|
|
7
|
-
HandlerResponse as Response,
|
|
8
|
-
)
|
|
9
6
|
from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
|
|
10
7
|
|
|
11
8
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
google-api-python-client
|
|
2
|
-
google-auth
|
|
2
|
+
google-auth
|
|
@@ -9,7 +9,7 @@ from mindsdb.integrations.libs.response import (
|
|
|
9
9
|
)
|
|
10
10
|
from mindsdb.utilities.config import Config
|
|
11
11
|
from mindsdb.utilities import log
|
|
12
|
-
from mindsdb.integrations.utilities.handlers.auth_utilities import GoogleUserOAuth2Manager
|
|
12
|
+
from mindsdb.integrations.utilities.handlers.auth_utilities.google import GoogleUserOAuth2Manager
|
|
13
13
|
from mindsdb.integrations.utilities.handlers.auth_utilities.exceptions import AuthException
|
|
14
14
|
|
|
15
15
|
from .google_calendar_tables import GoogleCalendarEventsTable
|
|
@@ -177,8 +177,8 @@ class GoogleCalendarHandler(APIHandler):
|
|
|
177
177
|
'recurrence': [
|
|
178
178
|
'RRULE:FREQ=DAILY;COUNT=1'
|
|
179
179
|
],
|
|
180
|
-
'attendees': [{'email': attendee['email']} for attendee in (params['attendees']
|
|
181
|
-
|
|
180
|
+
'attendees': [{'email': attendee['email']} for attendee in (params['attendees']
|
|
181
|
+
if isinstance(params['attendees'], list) else [params['attendees']])],
|
|
182
182
|
'reminders': {
|
|
183
183
|
'useDefault': False,
|
|
184
184
|
'overrides': [
|
|
@@ -188,7 +188,7 @@ class GoogleCalendarHandler(APIHandler):
|
|
|
188
188
|
},
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
event = service.events().insert(calendarId='primary',
|
|
191
|
+
event = service.events().insert(calendarId='primary',
|
|
192
192
|
body=event).execute()
|
|
193
193
|
return pd.DataFrame([event], columns=self.events.get_columns())
|
|
194
194
|
|
|
@@ -4,9 +4,6 @@ from mindsdb_sql_parser import ast
|
|
|
4
4
|
from pandas import DataFrame
|
|
5
5
|
|
|
6
6
|
from mindsdb.integrations.libs.api_handler import APITable
|
|
7
|
-
from mindsdb.integrations.libs.response import (
|
|
8
|
-
HandlerResponse as Response,
|
|
9
|
-
)
|
|
10
7
|
from mindsdb.integrations.utilities.date_utils import utc_date_str_to_timestamp_ms, parse_utc_date
|
|
11
8
|
from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
|
|
12
9
|
|
|
@@ -41,7 +38,6 @@ class GoogleCalendarEventsTable(APITable):
|
|
|
41
38
|
params[arg1] = arg2
|
|
42
39
|
elif arg1 == 'q':
|
|
43
40
|
params[arg1] = arg2
|
|
44
|
-
|
|
45
41
|
|
|
46
42
|
# Get the order by from the query.
|
|
47
43
|
if query.order_by is not None:
|
|
@@ -93,7 +89,7 @@ class GoogleCalendarEventsTable(APITable):
|
|
|
93
89
|
event_data = {}
|
|
94
90
|
timestamp_columns = {'start_time', 'end_time', 'created', 'updated'}
|
|
95
91
|
regular_columns = {'summary', 'description', 'location', 'status', 'html_link',
|
|
96
|
-
|
|
92
|
+
'creator', 'organizer', 'reminders', 'timeZone', 'calendar_id', 'attendees'}
|
|
97
93
|
|
|
98
94
|
# TODO: check why query.columns is None
|
|
99
95
|
for col, val in zip(query.columns, values):
|
|
@@ -103,7 +99,7 @@ class GoogleCalendarEventsTable(APITable):
|
|
|
103
99
|
event_data[col.name] = val
|
|
104
100
|
else:
|
|
105
101
|
raise NotImplementedError
|
|
106
|
-
|
|
102
|
+
|
|
107
103
|
st = datetime.datetime.utcfromtimestamp(event_data['start_time'] / 1000).isoformat() + 'Z'
|
|
108
104
|
et = datetime.datetime.utcfromtimestamp(event_data['end_time'] / 1000).isoformat() + 'Z'
|
|
109
105
|
|
mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py
CHANGED
|
@@ -17,6 +17,7 @@ from mindsdb.utilities import log
|
|
|
17
17
|
|
|
18
18
|
logger = log.getLogger(__name__)
|
|
19
19
|
|
|
20
|
+
|
|
20
21
|
class GoogleContentShoppingHandler(APIHandler):
|
|
21
22
|
"""
|
|
22
23
|
A class for handling connections and interactions with the Google Content API for Shopping.
|
|
@@ -88,7 +89,7 @@ class GoogleContentShoppingHandler(APIHandler):
|
|
|
88
89
|
response = StatusResponse(False)
|
|
89
90
|
|
|
90
91
|
try:
|
|
91
|
-
|
|
92
|
+
self.connect()
|
|
92
93
|
response.success = True
|
|
93
94
|
except Exception as e:
|
|
94
95
|
logger.error(f'Error connecting to Google Content API for Shopping: {e}!')
|
|
@@ -205,7 +206,7 @@ class GoogleContentShoppingHandler(APIHandler):
|
|
|
205
206
|
'placedDateStart',
|
|
206
207
|
'placedDateEnd',
|
|
207
208
|
'orderBy']
|
|
208
|
-
|
|
209
|
+
and value is not None
|
|
209
210
|
}
|
|
210
211
|
if params['order_id']:
|
|
211
212
|
result = service.orders().get(merchantId=self.merchant_id, orderId=params['order_id'], **args).execute()
|
mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py
CHANGED
|
@@ -3,9 +3,6 @@ from mindsdb_sql_parser import ast
|
|
|
3
3
|
from pandas import DataFrame
|
|
4
4
|
|
|
5
5
|
from mindsdb.integrations.libs.api_handler import APITable
|
|
6
|
-
from mindsdb.integrations.libs.response import (
|
|
7
|
-
HandlerResponse as Response,
|
|
8
|
-
)
|
|
9
6
|
from mindsdb.integrations.utilities.date_utils import parse_utc_date
|
|
10
7
|
from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
|
|
11
8
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
google-api-python-client
|
|
2
|
-
google-auth
|
|
2
|
+
google-auth
|
|
@@ -15,7 +15,7 @@ from mindsdb_sql_parser import parse_sql
|
|
|
15
15
|
|
|
16
16
|
from mindsdb.utilities import log
|
|
17
17
|
from mindsdb.integrations.handlers.google_fit_handler.google_fit_tables import GoogleFitTable
|
|
18
|
-
from mindsdb.integrations.libs.api_handler import APIHandler
|
|
18
|
+
from mindsdb.integrations.libs.api_handler import APIHandler
|
|
19
19
|
from mindsdb.integrations.libs.response import (
|
|
20
20
|
HandlerStatusResponse as StatusResponse,
|
|
21
21
|
HandlerResponse as Response,
|
|
@@ -46,7 +46,6 @@ class GoogleFitHandler(APIHandler):
|
|
|
46
46
|
self.credentials_path = 'mindsdb/integrations/handlers/google_fit_handler/credentials.json'
|
|
47
47
|
else:
|
|
48
48
|
raise Exception('Connection args have to content ether service_account_file or service_account_json')
|
|
49
|
-
|
|
50
49
|
|
|
51
50
|
self.api = None
|
|
52
51
|
self.is_connected = False
|
|
@@ -58,11 +57,11 @@ class GoogleFitHandler(APIHandler):
|
|
|
58
57
|
if self.is_connected is True and self.api:
|
|
59
58
|
return self.api
|
|
60
59
|
if self.connection_args:
|
|
61
|
-
credentialDict = {"installed":self.connection_args}
|
|
60
|
+
credentialDict = {"installed": self.connection_args}
|
|
62
61
|
f = open(self.credentials_path, "w")
|
|
63
62
|
f.write(json.dumps(credentialDict).replace(" ", ""))
|
|
64
63
|
f.close()
|
|
65
|
-
|
|
64
|
+
|
|
66
65
|
creds = None
|
|
67
66
|
|
|
68
67
|
if os.path.isfile('mindsdb/integrations/handlers/google_fit_handler/token.json'):
|
|
@@ -77,7 +76,7 @@ class GoogleFitHandler(APIHandler):
|
|
|
77
76
|
with open('mindsdb/integrations/handlers/google_fit_handler/token.json', 'w') as token:
|
|
78
77
|
token.write(creds.to_json())
|
|
79
78
|
self.api = build('fitness', 'v1', credentials=creds)
|
|
80
|
-
|
|
79
|
+
|
|
81
80
|
self.is_connected = True
|
|
82
81
|
return self.api
|
|
83
82
|
|
|
@@ -85,7 +84,7 @@ class GoogleFitHandler(APIHandler):
|
|
|
85
84
|
response = StatusResponse(False)
|
|
86
85
|
|
|
87
86
|
try:
|
|
88
|
-
|
|
87
|
+
self.connect()
|
|
89
88
|
response.success = True
|
|
90
89
|
|
|
91
90
|
except Exception as e:
|
|
@@ -109,7 +108,6 @@ class GoogleFitHandler(APIHandler):
|
|
|
109
108
|
except HttpError:
|
|
110
109
|
raise HttpError
|
|
111
110
|
|
|
112
|
-
|
|
113
111
|
def native_query(self, query: str = None) -> Response:
|
|
114
112
|
"""Receive raw query and act upon it somehow.
|
|
115
113
|
Args:
|
|
@@ -120,13 +118,13 @@ class GoogleFitHandler(APIHandler):
|
|
|
120
118
|
"""
|
|
121
119
|
ast = parse_sql(query)
|
|
122
120
|
return self.query(ast)
|
|
123
|
-
|
|
121
|
+
|
|
124
122
|
def get_steps(self, start_time_millis, end_time_millis) -> pd.DataFrame:
|
|
125
123
|
steps = {}
|
|
126
124
|
steps_data = self.retrieve_data(self.api, start_time_millis, end_time_millis, "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps")
|
|
127
125
|
for daily_step_data in steps_data['bucket']:
|
|
128
126
|
local_date = datetime.fromtimestamp(int(daily_step_data['startTimeMillis']) / 1000,
|
|
129
|
-
|
|
127
|
+
tz=pytz.timezone(str(get_localzone())))
|
|
130
128
|
local_date_str = local_date.strftime(DATE_FORMAT)
|
|
131
129
|
|
|
132
130
|
data_point = daily_step_data['dataset'][0]['point']
|
|
@@ -139,8 +137,8 @@ class GoogleFitHandler(APIHandler):
|
|
|
139
137
|
ret = ret.drop('originDataSourceId', axis=1)
|
|
140
138
|
ret = ret.reset_index(drop=False)
|
|
141
139
|
return ret
|
|
142
|
-
|
|
143
|
-
def call_google_fit_api(self, method_name:str = None, params:dict = None) -> pd.DataFrame:
|
|
140
|
+
|
|
141
|
+
def call_google_fit_api(self, method_name: str = None, params: dict = None) -> pd.DataFrame:
|
|
144
142
|
"""Receive query as AST (abstract syntax tree) and act upon it somehow.
|
|
145
143
|
Args:
|
|
146
144
|
query (ASTNode): sql query represented as AST. May be any kind
|
|
@@ -152,4 +150,4 @@ class GoogleFitHandler(APIHandler):
|
|
|
152
150
|
if method_name == 'get_steps':
|
|
153
151
|
val = self.get_steps(params['start_time'], params['end_time'])
|
|
154
152
|
return val
|
|
155
|
-
raise NotImplementedError('Method name {} not supported by Google Fit Handler'.format(method_name))
|
|
153
|
+
raise NotImplementedError('Method name {} not supported by Google Fit Handler'.format(method_name))
|
|
@@ -7,6 +7,7 @@ import pytz
|
|
|
7
7
|
import time
|
|
8
8
|
from tzlocal import get_localzone
|
|
9
9
|
|
|
10
|
+
|
|
10
11
|
class GoogleFitTable(APITable):
|
|
11
12
|
|
|
12
13
|
def time_parser(self, args) -> int:
|
|
@@ -21,38 +22,35 @@ class GoogleFitTable(APITable):
|
|
|
21
22
|
epoch0 = datetime.datetime(1970, 1, 1, tzinfo=pytz.utc)
|
|
22
23
|
time = pytz.timezone(str(get_localzone())).localize(datetime.datetime(int(ymd[0].rstrip()), int(ymd[1].rstrip()), int(ymd[2].rstrip())))
|
|
23
24
|
return int((time - epoch0).total_seconds() * 1000)
|
|
24
|
-
|
|
25
|
+
|
|
25
26
|
def select(self, query: ast.Select) -> Response:
|
|
26
27
|
|
|
27
28
|
conditions = extract_comparison_conditions(query.where)
|
|
28
|
-
|
|
29
|
+
|
|
29
30
|
params = {}
|
|
30
|
-
|
|
31
|
-
steps = {}
|
|
32
|
-
#get the local time
|
|
31
|
+
# get the local time
|
|
33
32
|
now = int(round(time.time() * 1000))
|
|
34
33
|
|
|
35
|
-
#hard coded for now as user default query time period
|
|
36
|
-
one_year = 31536000000
|
|
34
|
+
# hard coded for now as user default query time period
|
|
37
35
|
one_month = 2629746000
|
|
38
36
|
for op, arg1, arg2 in conditions:
|
|
39
37
|
if op == 'or':
|
|
40
|
-
raise NotImplementedError(
|
|
38
|
+
raise NotImplementedError('OR is not supported')
|
|
41
39
|
if arg1 == 'date':
|
|
42
40
|
date = self.time_parser(arg2)
|
|
43
41
|
if op == '>':
|
|
44
42
|
params['start_time'] = date
|
|
45
43
|
params['end_time'] = now
|
|
46
|
-
|
|
47
|
-
#hard coded as a month
|
|
44
|
+
|
|
45
|
+
# hard coded as a month
|
|
48
46
|
elif op == '<':
|
|
49
47
|
params['start_time'] = date - one_month
|
|
50
48
|
params['end_time'] = date
|
|
51
49
|
else:
|
|
52
50
|
raise NotImplementedError
|
|
53
51
|
else:
|
|
54
|
-
raise NotImplementedError(
|
|
55
|
-
# if time is not provided in the query, the time range is one month ago to now
|
|
52
|
+
raise NotImplementedError('This query is not supported')
|
|
53
|
+
# if time is not provided in the query, the time range is one month ago to now
|
|
56
54
|
if not params:
|
|
57
55
|
params['start_time'] = now - one_month
|
|
58
56
|
params['end_time'] = now
|
|
@@ -66,4 +64,4 @@ class GoogleFitTable(APITable):
|
|
|
66
64
|
return [
|
|
67
65
|
'dates',
|
|
68
66
|
'steps'
|
|
69
|
-
]
|
|
67
|
+
]
|
|
@@ -16,6 +16,7 @@ from mindsdb.utilities import log
|
|
|
16
16
|
|
|
17
17
|
logger = log.getLogger(__name__)
|
|
18
18
|
|
|
19
|
+
|
|
19
20
|
class GoogleSearchConsoleHandler(APIHandler):
|
|
20
21
|
"""
|
|
21
22
|
A class for handling connections and interactions with the Google Search Console API.
|
|
@@ -86,7 +87,7 @@ class GoogleSearchConsoleHandler(APIHandler):
|
|
|
86
87
|
response = StatusResponse(False)
|
|
87
88
|
|
|
88
89
|
try:
|
|
89
|
-
|
|
90
|
+
self.connect()
|
|
90
91
|
response.success = True
|
|
91
92
|
except Exception as e:
|
|
92
93
|
logger.error(f'Error connecting to Google Search Console API: {e}!')
|
|
@@ -3,9 +3,6 @@ from mindsdb_sql_parser import ast
|
|
|
3
3
|
from pandas import DataFrame
|
|
4
4
|
|
|
5
5
|
from mindsdb.integrations.libs.api_handler import APITable
|
|
6
|
-
from mindsdb.integrations.libs.response import (
|
|
7
|
-
HandlerResponse as Response,
|
|
8
|
-
)
|
|
9
6
|
from mindsdb.integrations.utilities.date_utils import parse_utc_date
|
|
10
7
|
from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
|
|
11
8
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
google-api-python-client
|
|
2
|
-
google-auth
|
|
2
|
+
google-auth
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
from .__about__ import __version__ as version
|
|
2
|
+
from .__about__ import __description__ as description
|
|
1
3
|
from mindsdb.integrations.libs.const import HANDLER_TYPE
|
|
2
4
|
from mindsdb.utilities import log
|
|
3
5
|
|
|
4
6
|
logger = log.getLogger(__name__)
|
|
5
7
|
|
|
6
|
-
from .__about__ import __description__ as description
|
|
7
|
-
from .__about__ import __version__ as version
|
|
8
8
|
|
|
9
9
|
try:
|
|
10
10
|
from .groq_handler import GroqHandler as Handler
|
|
@@ -20,4 +20,4 @@ type = HANDLER_TYPE.ML
|
|
|
20
20
|
icon_path = 'icon.svg'
|
|
21
21
|
permanent = False
|
|
22
22
|
|
|
23
|
-
__all__ = ["Handler", "version", "name", "type", "title", "description", "import_error", "icon_path"]
|
|
23
|
+
__all__ = ["Handler", "version", "name", "type", "title", "description", "import_error", "icon_path"]
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import requests
|
|
2
2
|
import pandas as pd
|
|
3
3
|
from mindsdb.utilities import log
|
|
4
|
-
from mindsdb.
|
|
5
|
-
from mindsdb_sql_parser import ast
|
|
6
|
-
from mindsdb.integrations.libs.api_handler import APIHandler, APITable
|
|
4
|
+
from mindsdb.integrations.libs.api_handler import APIHandler
|
|
7
5
|
from mindsdb.integrations.libs.response import HandlerStatusResponse as StatusResponse, HandlerResponse as Response, RESPONSE_TYPE
|
|
8
|
-
from .hn_table import StoriesTable, CommentsTable
|
|
6
|
+
from .hn_table import StoriesTable, CommentsTable, HNStoriesTable, JobStoriesTable, ShowStoriesTable
|
|
9
7
|
|
|
10
8
|
logger = log.getLogger(__name__)
|
|
11
9
|
|
|
10
|
+
|
|
12
11
|
class HackerNewsHandler(APIHandler):
|
|
13
12
|
"""
|
|
14
13
|
A class for handling connections and interactions with the Hacker News API.
|
|
@@ -23,10 +22,10 @@ class HackerNewsHandler(APIHandler):
|
|
|
23
22
|
self._register_table('stories', stories)
|
|
24
23
|
|
|
25
24
|
hnstories = HNStoriesTable(self)
|
|
26
|
-
self._register_table('hnstories',hnstories)
|
|
25
|
+
self._register_table('hnstories', hnstories)
|
|
27
26
|
|
|
28
27
|
jobstories = JobStoriesTable(self)
|
|
29
|
-
self._register_table('jobstories',jobstories)
|
|
28
|
+
self._register_table('jobstories', jobstories)
|
|
30
29
|
|
|
31
30
|
showstories = ShowStoriesTable(self)
|
|
32
31
|
self._register_table('showstories', showstories)
|
|
@@ -99,4 +98,3 @@ class HackerNewsHandler(APIHandler):
|
|
|
99
98
|
raise ValueError(f'Unknown method_name: {method_name}')
|
|
100
99
|
|
|
101
100
|
return df
|
|
102
|
-
|