databao-context-engine 0.6.0__tar.gz → 0.6.1.dev1__tar.gz
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.
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/PKG-INFO +1 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/pyproject.toml +1 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/__init__.py +8 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/build_runner.py +11 -10
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/build_service.py +15 -25
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/build_wiring.py +13 -29
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/export_results.py +8 -13
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/databao_context_domain_manager.py +4 -6
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/databao_context_engine.py +14 -2
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/config_wizard.py +1 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/datasource_context.py +9 -3
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/introspection/property_extract.py +2 -8
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/mcp/mcp_server.py +1 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/build_plugin.py +1 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/config.py +1 -2
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/athena/athena_introspector.py +13 -32
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/base_introspector.py +115 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/bigquery/bigquery_introspector.py +16 -44
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/clickhouse/clickhouse_introspector.py +25 -43
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/clickhouse/config_file.py +2 -2
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/duckdb/duckdb_introspector.py +58 -62
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mssql/config_file.py +2 -2
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mssql/mssql_introspector.py +96 -94
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mysql/config_file.py +2 -2
- databao_context_engine-0.6.1.dev1/src/databao_context_engine/plugins/databases/mysql/mysql_introspector.py +520 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/postgresql/config_file.py +1 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/postgresql/postgresql_introspector.py +75 -69
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/snowflake/snowflake_introspector.py +86 -35
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/sqlite/sqlite_introspector.py +32 -46
- databao_context_engine-0.6.1.dev1/src/databao_context_engine/plugins/dbt/context_filtering.py +150 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/dbt_context_extractor.py +60 -27
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/types.py +9 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/types_artifacts.py +4 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/files/pdf_plugin.py +1 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/layout.py +1 -1
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/migrate.py +5 -2
- databao_context_engine-0.6.0/src/databao_context_engine/plugins/databases/mysql/mysql_introspector.py +0 -326
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/LICENSE.md +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/README.md +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/plugin_execution.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/types.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/commands.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/datasources.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/info.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/config/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/config/log_config.yaml +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/config/logging.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/check_config.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/datasource_discovery.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/execute_sql_query.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/sql_read_only.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/types.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/event_journal/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/event_journal/writer.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/generate_configs_schemas.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/init_domain.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/introspection/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/api.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/config.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/descriptions/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/descriptions/ollama.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/descriptions/provider.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/embeddings/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/embeddings/ollama.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/embeddings/provider.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/errors.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/factory.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/install.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/prompts/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/prompts/ollama.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/prompts/provider.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/runtime.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/service.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/main.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/mcp/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/mcp/mcp_runner.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/perf/core.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/plugin_utils.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/sql/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/sql/sql_types.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/athena/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/athena/athena_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/athena/config_file.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/base_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/bigquery/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/bigquery/bigquery_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/bigquery/config_file.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/clickhouse/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/clickhouse/clickhouse_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/database_chunker.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/databases_types.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/duckdb/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/duckdb/config_file.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/duckdb/duckdb_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/introspection_model_builder.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/introspection_scope.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/introspection_scope_matcher.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mssql/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mssql/mssql_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mysql/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mysql/mysql_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/postgresql/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/postgresql/postgresql_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/snowflake/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/snowflake/config_file.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/snowflake/snowflake_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/sqlite/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/sqlite/config_file.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/sqlite/sqlite_db_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/dbt_chunker.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/dbt_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/duckdb_tools.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/files/__init__.py +0 -0
- {databao_context_engine-0.6.0/src/databao_context_engine/services → databao_context_engine-0.6.1.dev1/src/databao_context_engine/plugins/files}/docling_chunker.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/files/unstructured_files_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/plugin_loader.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/parquet_chunker.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/parquet_introspector.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/parquet_plugin.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/types.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/info.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/init_project.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/project_config.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/resources/examples/src/databases/example_postgres.yaml +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/resources/examples/src/files/documentation.md +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/resources/examples/src/files/notes.txt +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/py.typed +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/search_context/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/search_context/chunk_search_repository.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/search_context/search_service.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/search_context/search_wiring.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/serialization/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/serialization/yaml.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/chunk_embedding_service.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/embedding_shard_resolver.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/factories.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/models.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/persistence_service.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/table_name_policy.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/connection.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/exceptions/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/exceptions/exceptions.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/migrations/V01__init.sql +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/migrations/V02__add_keyword_index_text.sql +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/models.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/chunk_repository.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/embedding_model_registry_repository.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/embedding_repository.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/factories.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/transaction.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/system/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/system/properties.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/templating/__init__.py +0 -0
- {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/templating/renderer.py +0 -0
|
@@ -55,6 +55,11 @@ from databao_context_engine.plugins.databases.snowflake.config_file import (
|
|
|
55
55
|
SnowflakeSSOAuth,
|
|
56
56
|
)
|
|
57
57
|
from databao_context_engine.plugins.databases.sqlite.config_file import SQLiteConfigFile, SQLiteConnectionConfig
|
|
58
|
+
from databao_context_engine.plugins.dbt.context_filtering import (
|
|
59
|
+
DbtContextFilter,
|
|
60
|
+
DbtContextFilterRule,
|
|
61
|
+
DbtContextFilterStructuredRule,
|
|
62
|
+
)
|
|
58
63
|
from databao_context_engine.plugins.dbt.types import DbtConfigFile
|
|
59
64
|
from databao_context_engine.plugins.plugin_loader import DatabaoContextPluginLoader
|
|
60
65
|
from databao_context_engine.plugins.resources.types import ParquetConfigFile
|
|
@@ -129,5 +134,8 @@ __all__ = [
|
|
|
129
134
|
"SQLiteConfigFile",
|
|
130
135
|
"SQLiteConnectionConfig",
|
|
131
136
|
"DbtConfigFile",
|
|
137
|
+
"DbtContextFilter",
|
|
138
|
+
"DbtContextFilterStructuredRule",
|
|
139
|
+
"DbtContextFilterRule",
|
|
132
140
|
"ParquetConfigFile",
|
|
133
141
|
]
|
|
@@ -3,9 +3,8 @@ import logging
|
|
|
3
3
|
import databao_context_engine.perf.core as perf
|
|
4
4
|
from databao_context_engine.build_sources.build_service import BuildService
|
|
5
5
|
from databao_context_engine.build_sources.export_results import (
|
|
6
|
-
|
|
6
|
+
delete_all_results_file,
|
|
7
7
|
export_build_result,
|
|
8
|
-
reset_all_results,
|
|
9
8
|
)
|
|
10
9
|
from databao_context_engine.build_sources.types import (
|
|
11
10
|
BuildDatasourceResult,
|
|
@@ -17,6 +16,7 @@ from databao_context_engine.datasources.datasource_context import (
|
|
|
17
16
|
read_datasource_type_from_context,
|
|
18
17
|
)
|
|
19
18
|
from databao_context_engine.datasources.datasource_discovery import discover_datasources, prepare_source
|
|
19
|
+
from databao_context_engine.datasources.types import PreparedConfig
|
|
20
20
|
from databao_context_engine.pluginlib.build_plugin import DatasourceType
|
|
21
21
|
from databao_context_engine.plugins.plugin_loader import DatabaoContextPluginLoader
|
|
22
22
|
from databao_context_engine.project.layout import ProjectLayout
|
|
@@ -34,7 +34,7 @@ def build(
|
|
|
34
34
|
project_layout: ProjectLayout,
|
|
35
35
|
plugin_loader: DatabaoContextPluginLoader,
|
|
36
36
|
build_service: BuildService,
|
|
37
|
-
|
|
37
|
+
should_index: bool,
|
|
38
38
|
) -> list[BuildDatasourceResult]:
|
|
39
39
|
"""Build the context for all datasources in the project.
|
|
40
40
|
|
|
@@ -57,7 +57,7 @@ def build(
|
|
|
57
57
|
results: list[BuildDatasourceResult] = []
|
|
58
58
|
failed = 0
|
|
59
59
|
skipped = 0
|
|
60
|
-
|
|
60
|
+
delete_all_results_file(project_layout)
|
|
61
61
|
for datasource_id in datasource_ids:
|
|
62
62
|
try:
|
|
63
63
|
result = _build_one_datasource(
|
|
@@ -65,7 +65,7 @@ def build(
|
|
|
65
65
|
plugin_loader=plugin_loader,
|
|
66
66
|
build_service=build_service,
|
|
67
67
|
datasource_id=datasource_id,
|
|
68
|
-
|
|
68
|
+
should_index=should_index,
|
|
69
69
|
)
|
|
70
70
|
results.append(result)
|
|
71
71
|
if result.status == DatasourceStatus.SKIPPED:
|
|
@@ -100,9 +100,12 @@ def _build_one_datasource(
|
|
|
100
100
|
plugin_loader: DatabaoContextPluginLoader,
|
|
101
101
|
build_service: BuildService,
|
|
102
102
|
datasource_id,
|
|
103
|
-
|
|
103
|
+
should_index: bool,
|
|
104
104
|
) -> BuildDatasourceResult:
|
|
105
105
|
prepared_source = prepare_source(project_layout, datasource_id)
|
|
106
|
+
if isinstance(prepared_source, PreparedConfig) and prepared_source.config.get("enabled") is False:
|
|
107
|
+
logger.info(f"Skipping disabled datasource {prepared_source.datasource_id.datasource_path}")
|
|
108
|
+
return BuildDatasourceResult(datasource_id=datasource_id, status=DatasourceStatus.SKIPPED)
|
|
106
109
|
|
|
107
110
|
perf.set_attribute("datasource_type", prepared_source.datasource_type.full_type)
|
|
108
111
|
|
|
@@ -119,10 +122,10 @@ def _build_one_datasource(
|
|
|
119
122
|
)
|
|
120
123
|
return BuildDatasourceResult(datasource_id=datasource_id, status=DatasourceStatus.SKIPPED)
|
|
121
124
|
|
|
122
|
-
result = build_service.
|
|
125
|
+
result = build_service.build_context(
|
|
123
126
|
prepared_source=prepared_source,
|
|
124
127
|
plugin=plugin,
|
|
125
|
-
|
|
128
|
+
should_index=should_index,
|
|
126
129
|
)
|
|
127
130
|
|
|
128
131
|
output_dir = project_layout.output_dir
|
|
@@ -130,8 +133,6 @@ def _build_one_datasource(
|
|
|
130
133
|
|
|
131
134
|
perf.set_attribute("context_size_bytes", context_file_path.stat().st_size)
|
|
132
135
|
|
|
133
|
-
append_result_to_all_results(output_dir, result)
|
|
134
|
-
|
|
135
136
|
return BuildDatasourceResult(
|
|
136
137
|
datasource_id=datasource_id,
|
|
137
138
|
status=DatasourceStatus.OK,
|
|
@@ -30,8 +30,8 @@ class BuildService:
|
|
|
30
30
|
self._project_layout = project_layout
|
|
31
31
|
self._chunk_embedding_service = chunk_embedding_service
|
|
32
32
|
|
|
33
|
-
def
|
|
34
|
-
self, *, prepared_source: PreparedDatasource, plugin: BuildPlugin,
|
|
33
|
+
def build_context(
|
|
34
|
+
self, *, prepared_source: PreparedDatasource, plugin: BuildPlugin, should_index: bool
|
|
35
35
|
) -> BuiltDatasourceContext:
|
|
36
36
|
"""Process a single source to build its context.
|
|
37
37
|
|
|
@@ -44,23 +44,10 @@ class BuildService:
|
|
|
44
44
|
"""
|
|
45
45
|
result = self._execute_plugin(prepared_source=prepared_source, plugin=plugin)
|
|
46
46
|
|
|
47
|
-
if not
|
|
47
|
+
if not should_index:
|
|
48
48
|
return result
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
perf.set_attribute("chunk_count", len(chunks))
|
|
53
|
-
|
|
54
|
-
if not chunks:
|
|
55
|
-
logger.info("No chunks for %s — skipping.", prepared_source.datasource_id.relative_path_to_config_file())
|
|
56
|
-
return result
|
|
57
|
-
|
|
58
|
-
self._chunk_embedding_service.embed_chunks(
|
|
59
|
-
chunks=chunks,
|
|
60
|
-
result=result,
|
|
61
|
-
full_type=prepared_source.datasource_type.full_type,
|
|
62
|
-
datasource_id=result.datasource_id,
|
|
63
|
-
)
|
|
50
|
+
self._index_context(built_context=result, plugin=plugin)
|
|
64
51
|
|
|
65
52
|
return result
|
|
66
53
|
|
|
@@ -78,21 +65,24 @@ class BuildService:
|
|
|
78
65
|
"""
|
|
79
66
|
built = self._deserialize_built_context(context=context, context_type=plugin.context_type)
|
|
80
67
|
|
|
81
|
-
|
|
68
|
+
self._index_context(built_context=built, plugin=plugin, override=True)
|
|
69
|
+
|
|
70
|
+
def _index_context(
|
|
71
|
+
self, *, built_context: BuiltDatasourceContext, plugin: BuildPlugin, override: bool = False
|
|
72
|
+
) -> None:
|
|
73
|
+
chunks = plugin.divide_context_into_chunks(built_context.context)
|
|
82
74
|
perf.set_attribute("chunk_count", len(chunks))
|
|
83
75
|
|
|
84
76
|
if not chunks:
|
|
85
|
-
logger.info(
|
|
86
|
-
"No chunks for %s — skipping indexing.", context.datasource_id.relative_path_to_context_file().name
|
|
87
|
-
)
|
|
77
|
+
logger.info("No chunks for %s — skipping indexing.", built_context.datasource_id)
|
|
88
78
|
return
|
|
89
79
|
|
|
90
80
|
self._chunk_embedding_service.embed_chunks(
|
|
91
81
|
chunks=chunks,
|
|
92
|
-
result=
|
|
93
|
-
full_type=
|
|
94
|
-
datasource_id=
|
|
95
|
-
override=
|
|
82
|
+
result=built_context,
|
|
83
|
+
full_type=built_context.datasource_type,
|
|
84
|
+
datasource_id=built_context.datasource_id,
|
|
85
|
+
override=override,
|
|
96
86
|
)
|
|
97
87
|
|
|
98
88
|
def _deserialize_built_context(
|
|
@@ -9,8 +9,6 @@ from databao_context_engine.build_sources.build_runner import (
|
|
|
9
9
|
from databao_context_engine.build_sources.build_service import BuildService
|
|
10
10
|
from databao_context_engine.build_sources.types import BuildDatasourceResult, IndexDatasourceResult
|
|
11
11
|
from databao_context_engine.datasources.datasource_context import DatasourceContext
|
|
12
|
-
from databao_context_engine.llm.descriptions.provider import DescriptionProvider
|
|
13
|
-
from databao_context_engine.llm.embeddings.provider import EmbeddingProvider
|
|
14
12
|
from databao_context_engine.llm.factory import (
|
|
15
13
|
create_ollama_description_provider,
|
|
16
14
|
create_ollama_embedding_provider,
|
|
@@ -30,7 +28,7 @@ def build_all_datasources(
|
|
|
30
28
|
project_layout: ProjectLayout,
|
|
31
29
|
plugin_loader: DatabaoContextPluginLoader,
|
|
32
30
|
chunk_embedding_mode: ChunkEmbeddingMode,
|
|
33
|
-
|
|
31
|
+
should_index: bool,
|
|
34
32
|
) -> list[BuildDatasourceResult]:
|
|
35
33
|
"""Build the context for all datasources in the project.
|
|
36
34
|
|
|
@@ -48,31 +46,21 @@ def build_all_datasources(
|
|
|
48
46
|
db_path = project_layout.db_path
|
|
49
47
|
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
50
48
|
if db_path.exists():
|
|
49
|
+
logger.debug("Deleting existing database %s", db_path)
|
|
51
50
|
db_path.unlink()
|
|
52
51
|
|
|
53
52
|
migrate(db_path)
|
|
54
53
|
with open_duckdb_connection(db_path) as conn:
|
|
55
|
-
ollama_service = create_ollama_service()
|
|
56
|
-
embedding_provider = create_ollama_embedding_provider(
|
|
57
|
-
ollama_service, model_details=project_layout.project_config.ollama_embedding_model_details
|
|
58
|
-
)
|
|
59
|
-
description_provider = (
|
|
60
|
-
create_ollama_description_provider(ollama_service)
|
|
61
|
-
if chunk_embedding_mode.should_generate_description()
|
|
62
|
-
else None
|
|
63
|
-
)
|
|
64
54
|
build_service = _create_build_service(
|
|
65
55
|
conn,
|
|
66
56
|
project_layout=project_layout,
|
|
67
|
-
embedding_provider=embedding_provider,
|
|
68
|
-
description_provider=description_provider,
|
|
69
57
|
chunk_embedding_mode=chunk_embedding_mode,
|
|
70
58
|
)
|
|
71
59
|
return build(
|
|
72
60
|
project_layout=project_layout,
|
|
73
61
|
plugin_loader=plugin_loader,
|
|
74
62
|
build_service=build_service,
|
|
75
|
-
|
|
63
|
+
should_index=should_index,
|
|
76
64
|
)
|
|
77
65
|
|
|
78
66
|
|
|
@@ -98,21 +86,9 @@ def index_built_contexts(
|
|
|
98
86
|
migrate(db_path)
|
|
99
87
|
|
|
100
88
|
with open_duckdb_connection(db_path) as conn:
|
|
101
|
-
ollama_service = create_ollama_service()
|
|
102
|
-
embedding_provider = create_ollama_embedding_provider(
|
|
103
|
-
ollama_service, model_details=project_layout.project_config.ollama_embedding_model_details
|
|
104
|
-
)
|
|
105
|
-
description_provider = (
|
|
106
|
-
create_ollama_description_provider(ollama_service)
|
|
107
|
-
if chunk_embedding_mode.should_generate_description()
|
|
108
|
-
else None
|
|
109
|
-
)
|
|
110
|
-
|
|
111
89
|
build_service = _create_build_service(
|
|
112
90
|
conn,
|
|
113
91
|
project_layout=project_layout,
|
|
114
|
-
embedding_provider=embedding_provider,
|
|
115
|
-
description_provider=description_provider,
|
|
116
92
|
chunk_embedding_mode=chunk_embedding_mode,
|
|
117
93
|
)
|
|
118
94
|
return run_indexing(
|
|
@@ -124,10 +100,18 @@ def _create_build_service(
|
|
|
124
100
|
conn: DuckDBPyConnection,
|
|
125
101
|
*,
|
|
126
102
|
project_layout: ProjectLayout,
|
|
127
|
-
embedding_provider: EmbeddingProvider,
|
|
128
|
-
description_provider: DescriptionProvider | None,
|
|
129
103
|
chunk_embedding_mode: ChunkEmbeddingMode,
|
|
130
104
|
) -> BuildService:
|
|
105
|
+
ollama_service = create_ollama_service()
|
|
106
|
+
embedding_provider = create_ollama_embedding_provider(
|
|
107
|
+
ollama_service, model_details=project_layout.project_config.ollama_embedding_model_details
|
|
108
|
+
)
|
|
109
|
+
description_provider = (
|
|
110
|
+
create_ollama_description_provider(ollama_service)
|
|
111
|
+
if chunk_embedding_mode.should_generate_description()
|
|
112
|
+
else None
|
|
113
|
+
)
|
|
114
|
+
|
|
131
115
|
chunk_embedding_service = create_chunk_embedding_service(
|
|
132
116
|
conn,
|
|
133
117
|
embedding_provider=embedding_provider,
|
|
@@ -2,9 +2,8 @@ import logging
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
4
|
from databao_context_engine.build_sources.plugin_execution import BuiltDatasourceContext
|
|
5
|
-
from databao_context_engine.datasources.datasource_context import get_context_header_for_datasource
|
|
6
5
|
from databao_context_engine.datasources.types import DatasourceId
|
|
7
|
-
from databao_context_engine.project.layout import
|
|
6
|
+
from databao_context_engine.project.layout import DEPRECATED_ALL_RESULTS_FILE_NAME, ProjectLayout
|
|
8
7
|
from databao_context_engine.serialization.yaml import write_yaml_to_stream
|
|
9
8
|
|
|
10
9
|
logger = logging.getLogger(__name__)
|
|
@@ -25,17 +24,13 @@ def export_build_result(output_dir: Path, result: BuiltDatasourceContext) -> Pat
|
|
|
25
24
|
return export_file_path
|
|
26
25
|
|
|
27
26
|
|
|
28
|
-
def
|
|
29
|
-
|
|
30
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
|
31
|
-
with path.open("a", encoding="utf-8") as export_file:
|
|
32
|
-
export_file.write(get_context_header_for_datasource(DatasourceId.from_string_repr(result.datasource_id)))
|
|
33
|
-
write_yaml_to_stream(data=result, file_stream=export_file)
|
|
34
|
-
export_file.write("\n")
|
|
27
|
+
def delete_all_results_file(project_layout: ProjectLayout) -> None:
|
|
28
|
+
"""Deletes the all_results.yaml file we were previously writing.
|
|
35
29
|
|
|
30
|
+
We're keeping this method for now, to make sure that older projects
|
|
31
|
+
don't keep an outdated "all_results.yaml" file in their output folder.
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
path = output_dir.joinpath(ALL_RESULTS_FILE_NAME)
|
|
33
|
+
We should be able to remove this code once we don't expect projects with an "all_results.yaml" file to exist anymore.
|
|
34
|
+
"""
|
|
35
|
+
path = project_layout.output_dir.joinpath(DEPRECATED_ALL_RESULTS_FILE_NAME)
|
|
41
36
|
path.unlink(missing_ok=True)
|
|
@@ -97,7 +97,7 @@ class DatabaoContextDomainManager:
|
|
|
97
97
|
project_layout=self._project_layout,
|
|
98
98
|
plugin_loader=self._plugin_loader,
|
|
99
99
|
chunk_embedding_mode=chunk_embedding_mode,
|
|
100
|
-
|
|
100
|
+
should_index=should_index,
|
|
101
101
|
)
|
|
102
102
|
|
|
103
103
|
def index_built_contexts(
|
|
@@ -118,11 +118,9 @@ class DatabaoContextDomainManager:
|
|
|
118
118
|
The summary of the index operation.
|
|
119
119
|
"""
|
|
120
120
|
engine: DatabaoContextEngine = self.get_engine_for_domain()
|
|
121
|
-
contexts: list[DatasourceContext] =
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
wanted_paths = {d.datasource_path for d in datasource_ids}
|
|
125
|
-
contexts = [c for c in contexts if c.datasource_id.datasource_path in wanted_paths]
|
|
121
|
+
contexts: list[DatasourceContext] = (
|
|
122
|
+
engine.get_all_contexts() if datasource_ids is None else engine.get_datasource_contexts(datasource_ids)
|
|
123
|
+
)
|
|
126
124
|
|
|
127
125
|
return index_built_contexts(
|
|
128
126
|
project_layout=self._project_layout,
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any, Collection
|
|
5
5
|
|
|
6
6
|
from databao_context_engine.datasources.datasource_context import (
|
|
7
7
|
DatasourceContext,
|
|
8
8
|
get_all_contexts,
|
|
9
9
|
get_context_header_for_datasource,
|
|
10
10
|
get_datasource_context,
|
|
11
|
+
get_datasource_contexts,
|
|
11
12
|
get_introspected_datasource_list,
|
|
12
13
|
)
|
|
13
14
|
from databao_context_engine.datasources.execute_sql_query import run_sql
|
|
@@ -81,9 +82,20 @@ class DatabaoContextEngine:
|
|
|
81
82
|
|
|
82
83
|
Returns:
|
|
83
84
|
The context for this datasource.
|
|
84
|
-
"""
|
|
85
|
+
""" # noqa: DOC501
|
|
85
86
|
return get_datasource_context(project_layout=self._project_layout, datasource_id=datasource_id)
|
|
86
87
|
|
|
88
|
+
def get_datasource_contexts(self, datasource_ids: Collection[DatasourceId]) -> list[DatasourceContext]:
|
|
89
|
+
"""Return the context available for a given list of datasources.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
datasource_ids: The list of datasources IDs to get the context for.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
The context for those datasources.
|
|
96
|
+
"""
|
|
97
|
+
return get_datasource_contexts(project_layout=self._project_layout, datasource_ids=datasource_ids)
|
|
98
|
+
|
|
87
99
|
def get_all_contexts(self) -> list[DatasourceContext]:
|
|
88
100
|
"""Return all contexts generated in the domain.
|
|
89
101
|
|
|
@@ -37,7 +37,7 @@ def _build_config_content_from_properties(
|
|
|
37
37
|
) -> dict[str, Any]:
|
|
38
38
|
config_content: dict[str, Any] = {}
|
|
39
39
|
for config_file_property in properties:
|
|
40
|
-
if config_file_property.property_key in ["type", "name"] and len(properties_prefix) == 0:
|
|
40
|
+
if config_file_property.property_key in ["type", "name", "enabled"] and len(properties_prefix) == 0:
|
|
41
41
|
# We ignore type and name properties as they've already been filled
|
|
42
42
|
continue
|
|
43
43
|
if in_union and config_file_property.property_key == "type":
|
|
@@ -2,12 +2,12 @@ import logging
|
|
|
2
2
|
import os
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Iterable
|
|
5
|
+
from typing import Collection, Iterable
|
|
6
6
|
|
|
7
7
|
import yaml
|
|
8
8
|
|
|
9
9
|
from databao_context_engine.datasources.types import Datasource, DatasourceId, DatasourceType
|
|
10
|
-
from databao_context_engine.project.layout import
|
|
10
|
+
from databao_context_engine.project.layout import DEPRECATED_ALL_RESULTS_FILE_NAME, ProjectLayout
|
|
11
11
|
|
|
12
12
|
logger = logging.getLogger(__name__)
|
|
13
13
|
|
|
@@ -55,7 +55,7 @@ def _get_datasources_with_context(project_layout: ProjectLayout) -> list[Datasou
|
|
|
55
55
|
relative_context_file = context_file.relative_to(project_layout.output_dir)
|
|
56
56
|
|
|
57
57
|
if context_file.suffix not in DatasourceId.ALLOWED_YAML_SUFFIXES or (
|
|
58
|
-
len(relative_context_file.parts) == 1 and context_file_name ==
|
|
58
|
+
len(relative_context_file.parts) == 1 and context_file_name == DEPRECATED_ALL_RESULTS_FILE_NAME
|
|
59
59
|
):
|
|
60
60
|
continue
|
|
61
61
|
|
|
@@ -85,6 +85,12 @@ def get_introspected_datasource_list(project_layout: ProjectLayout) -> list[Data
|
|
|
85
85
|
return result
|
|
86
86
|
|
|
87
87
|
|
|
88
|
+
def get_datasource_contexts(
|
|
89
|
+
project_layout: ProjectLayout, datasource_ids: Collection[DatasourceId]
|
|
90
|
+
) -> list[DatasourceContext]:
|
|
91
|
+
return [get_datasource_context(project_layout, datasource_id) for datasource_id in datasource_ids]
|
|
92
|
+
|
|
93
|
+
|
|
88
94
|
def get_datasource_context(project_layout: ProjectLayout, datasource_id: DatasourceId) -> DatasourceContext:
|
|
89
95
|
context_path = datasource_id.absolute_path_to_context_file(project_layout)
|
|
90
96
|
if not context_path.is_file():
|
|
@@ -143,7 +143,7 @@ def _create_property(
|
|
|
143
143
|
|
|
144
144
|
actual_property_types = _read_actual_property_type(property_type)
|
|
145
145
|
|
|
146
|
-
required = annotation.required if annotation else is_property_required
|
|
146
|
+
required = annotation.required if annotation and annotation.required is not None else is_property_required
|
|
147
147
|
secret = annotation.secret if annotation else False
|
|
148
148
|
|
|
149
149
|
if len(actual_property_types) > 1:
|
|
@@ -175,7 +175,6 @@ def _create_property(
|
|
|
175
175
|
|
|
176
176
|
resolved_type = actual_property_type if not nested_properties else None
|
|
177
177
|
default_value = compute_default_value(
|
|
178
|
-
annotation=annotation,
|
|
179
178
|
property_default=property_default,
|
|
180
179
|
has_nested_properties=nested_properties is not None and len(nested_properties) > 0,
|
|
181
180
|
)
|
|
@@ -223,15 +222,10 @@ def _read_actual_property_type(property_type: type) -> tuple[type, ...]:
|
|
|
223
222
|
return (property_type,)
|
|
224
223
|
|
|
225
224
|
|
|
226
|
-
def compute_default_value(
|
|
227
|
-
*, annotation: ConfigPropertyAnnotation | None, property_default: Any | None = None, has_nested_properties: bool
|
|
228
|
-
) -> str | None:
|
|
225
|
+
def compute_default_value(*, property_default: Any | None = None, has_nested_properties: bool) -> str | None:
|
|
229
226
|
if has_nested_properties:
|
|
230
227
|
return None
|
|
231
228
|
|
|
232
|
-
if annotation is not None and annotation.default_value is not None:
|
|
233
|
-
return str(annotation.default_value)
|
|
234
|
-
|
|
235
229
|
if property_default is not None:
|
|
236
230
|
return str(property_default)
|
|
237
231
|
|
|
@@ -37,7 +37,7 @@ class McpServer:
|
|
|
37
37
|
mcp = FastMCP(host=host or "127.0.0.1", port=port or 8000, lifespan=mcp_server_lifespan)
|
|
38
38
|
|
|
39
39
|
@mcp.tool(
|
|
40
|
-
description="
|
|
40
|
+
description="Read all available contexts",
|
|
41
41
|
annotations=ToolAnnotations(readOnlyHint=True, idempotentHint=True, openWorldHint=False),
|
|
42
42
|
)
|
|
43
43
|
def all_results_tool():
|
|
@@ -41,8 +41,7 @@ ConfigPropertyDefinition = ConfigSinglePropertyDefinition | ConfigUnionPropertyD
|
|
|
41
41
|
|
|
42
42
|
@dataclass(kw_only=True)
|
|
43
43
|
class ConfigPropertyAnnotation:
|
|
44
|
-
required: bool =
|
|
45
|
-
default_value: str | None = None
|
|
44
|
+
required: bool | None = None
|
|
46
45
|
ignored_for_config_wizard: bool = False
|
|
47
46
|
secret: bool = False
|
|
48
47
|
|
|
@@ -4,11 +4,10 @@ from typing import Any
|
|
|
4
4
|
|
|
5
5
|
from pyathena import connect
|
|
6
6
|
from pyathena.cursor import DictCursor
|
|
7
|
+
from typing_extensions import override
|
|
7
8
|
|
|
8
9
|
from databao_context_engine.plugins.databases.athena.config_file import AthenaConfigFile
|
|
9
10
|
from databao_context_engine.plugins.databases.base_introspector import BaseIntrospector, SQLQuery
|
|
10
|
-
from databao_context_engine.plugins.databases.databases_types import DatabaseSchema
|
|
11
|
-
from databao_context_engine.plugins.databases.introspection_model_builder import IntrospectionModelBuilder
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
class AthenaIntrospector(BaseIntrospector[AthenaConfigFile]):
|
|
@@ -36,36 +35,12 @@ class AthenaIntrospector(BaseIntrospector[AthenaConfigFile]):
|
|
|
36
35
|
sql = f"SELECT schema_name, catalog_name FROM {catalog}.information_schema.schemata"
|
|
37
36
|
return SQLQuery(sql, None)
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return []
|
|
42
|
-
|
|
43
|
-
comps = self._component_queries(catalog, schemas)
|
|
44
|
-
results: dict[str, list[dict]] = {}
|
|
45
|
-
|
|
46
|
-
for name, q in comps.items():
|
|
47
|
-
results[name] = self._fetchall_dicts(connection, q, None)
|
|
48
|
-
|
|
49
|
-
return IntrospectionModelBuilder.build_schemas_from_components(
|
|
50
|
-
schemas=schemas,
|
|
51
|
-
rels=results.get("relations", []),
|
|
52
|
-
cols=results.get("columns", []),
|
|
53
|
-
pk_cols=[],
|
|
54
|
-
uq_cols=[],
|
|
55
|
-
checks=[],
|
|
56
|
-
fk_cols=[],
|
|
57
|
-
idx_cols=[],
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
def _component_queries(self, catalog: str, schemas: list[str]) -> dict[str, str]:
|
|
38
|
+
@override
|
|
39
|
+
def get_relations_sql_query(self, catalog: str, schemas: list[str]) -> SQLQuery:
|
|
61
40
|
schemas_in = ", ".join(self._quote_literal(s) for s in schemas)
|
|
62
|
-
return {
|
|
63
|
-
"relations": self._sql_relations(catalog, schemas_in),
|
|
64
|
-
"columns": self._sql_columns(catalog, schemas_in),
|
|
65
|
-
}
|
|
66
41
|
|
|
67
|
-
|
|
68
|
-
|
|
42
|
+
return SQLQuery(
|
|
43
|
+
sql=f"""
|
|
69
44
|
SELECT
|
|
70
45
|
table_schema AS schema_name,
|
|
71
46
|
table_name,
|
|
@@ -80,9 +55,14 @@ class AthenaIntrospector(BaseIntrospector[AthenaConfigFile]):
|
|
|
80
55
|
WHERE
|
|
81
56
|
table_schema IN ({schemas_in})
|
|
82
57
|
"""
|
|
58
|
+
)
|
|
83
59
|
|
|
84
|
-
|
|
85
|
-
|
|
60
|
+
@override
|
|
61
|
+
def get_columns_sql_query(self, catalog: str, schemas: list[str]) -> SQLQuery:
|
|
62
|
+
schemas_in = ", ".join(self._quote_literal(s) for s in schemas)
|
|
63
|
+
|
|
64
|
+
return SQLQuery(
|
|
65
|
+
sql=f"""
|
|
86
66
|
SELECT
|
|
87
67
|
table_schema AS schema_name,
|
|
88
68
|
table_name,
|
|
@@ -99,6 +79,7 @@ class AthenaIntrospector(BaseIntrospector[AthenaConfigFile]):
|
|
|
99
79
|
table_name,
|
|
100
80
|
ordinal_position
|
|
101
81
|
"""
|
|
82
|
+
)
|
|
102
83
|
|
|
103
84
|
def _resolve_pseudo_catalog_name(self, file_config: AthenaConfigFile) -> str:
|
|
104
85
|
return "awsdatacatalog"
|