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.
Files changed (167) hide show
  1. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/PKG-INFO +1 -1
  2. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/pyproject.toml +1 -1
  3. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/__init__.py +8 -0
  4. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/build_runner.py +11 -10
  5. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/build_service.py +15 -25
  6. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/build_wiring.py +13 -29
  7. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/export_results.py +8 -13
  8. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/databao_context_domain_manager.py +4 -6
  9. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/databao_context_engine.py +14 -2
  10. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/config_wizard.py +1 -1
  11. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/datasource_context.py +9 -3
  12. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/introspection/property_extract.py +2 -8
  13. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/mcp/mcp_server.py +1 -1
  14. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/build_plugin.py +1 -0
  15. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/config.py +1 -2
  16. {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
  17. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/base_introspector.py +115 -1
  18. {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
  19. {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
  20. {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
  21. {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
  22. {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
  23. {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
  24. {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
  25. databao_context_engine-0.6.1.dev1/src/databao_context_engine/plugins/databases/mysql/mysql_introspector.py +520 -0
  26. {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
  27. {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
  28. {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
  29. {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
  30. databao_context_engine-0.6.1.dev1/src/databao_context_engine/plugins/dbt/context_filtering.py +150 -0
  31. {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
  32. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/types.py +9 -1
  33. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/types_artifacts.py +4 -0
  34. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/files/pdf_plugin.py +1 -1
  35. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/layout.py +1 -1
  36. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/migrate.py +5 -2
  37. databao_context_engine-0.6.0/src/databao_context_engine/plugins/databases/mysql/mysql_introspector.py +0 -326
  38. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/LICENSE.md +0 -0
  39. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/README.md +0 -0
  40. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/__init__.py +0 -0
  41. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/plugin_execution.py +0 -0
  42. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/build_sources/types.py +0 -0
  43. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/__init__.py +0 -0
  44. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/commands.py +0 -0
  45. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/datasources.py +0 -0
  46. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/cli/info.py +0 -0
  47. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/config/__init__.py +0 -0
  48. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/config/log_config.yaml +0 -0
  49. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/config/logging.py +0 -0
  50. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/__init__.py +0 -0
  51. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/check_config.py +0 -0
  52. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/datasource_discovery.py +0 -0
  53. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/execute_sql_query.py +0 -0
  54. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/sql_read_only.py +0 -0
  55. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/datasources/types.py +0 -0
  56. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/event_journal/__init__.py +0 -0
  57. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/event_journal/writer.py +0 -0
  58. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/generate_configs_schemas.py +0 -0
  59. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/init_domain.py +0 -0
  60. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/introspection/__init__.py +0 -0
  61. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/__init__.py +0 -0
  62. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/api.py +0 -0
  63. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/config.py +0 -0
  64. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/descriptions/__init__.py +0 -0
  65. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/descriptions/ollama.py +0 -0
  66. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/descriptions/provider.py +0 -0
  67. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/embeddings/__init__.py +0 -0
  68. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/embeddings/ollama.py +0 -0
  69. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/embeddings/provider.py +0 -0
  70. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/errors.py +0 -0
  71. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/factory.py +0 -0
  72. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/install.py +0 -0
  73. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/prompts/__init__.py +0 -0
  74. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/prompts/ollama.py +0 -0
  75. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/prompts/provider.py +0 -0
  76. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/runtime.py +0 -0
  77. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/llm/service.py +0 -0
  78. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/main.py +0 -0
  79. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/mcp/__init__.py +0 -0
  80. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/mcp/mcp_runner.py +0 -0
  81. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/perf/core.py +0 -0
  82. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/__init__.py +0 -0
  83. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/plugin_utils.py +0 -0
  84. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/sql/__init__.py +0 -0
  85. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/pluginlib/sql/sql_types.py +0 -0
  86. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/__init__.py +0 -0
  87. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/__init__.py +0 -0
  88. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/athena/__init__.py +0 -0
  89. {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
  90. {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
  91. {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
  92. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/bigquery/__init__.py +0 -0
  93. {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
  94. {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
  95. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/clickhouse/__init__.py +0 -0
  96. {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
  97. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/database_chunker.py +0 -0
  98. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/databases_types.py +0 -0
  99. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/duckdb/__init__.py +0 -0
  100. {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
  101. {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
  102. {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
  103. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/introspection_scope.py +0 -0
  104. {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
  105. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mssql/__init__.py +0 -0
  106. {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
  107. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/mysql/__init__.py +0 -0
  108. {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
  109. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/postgresql/__init__.py +0 -0
  110. {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
  111. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/snowflake/__init__.py +0 -0
  112. {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
  113. {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
  114. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/databases/sqlite/__init__.py +0 -0
  115. {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
  116. {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
  117. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/__init__.py +0 -0
  118. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/dbt_chunker.py +0 -0
  119. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/dbt/dbt_plugin.py +0 -0
  120. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/duckdb_tools.py +0 -0
  121. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/files/__init__.py +0 -0
  122. {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
  123. {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
  124. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/plugin_loader.py +0 -0
  125. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/__init__.py +0 -0
  126. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/parquet_chunker.py +0 -0
  127. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/parquet_introspector.py +0 -0
  128. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/parquet_plugin.py +0 -0
  129. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/plugins/resources/types.py +0 -0
  130. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/__init__.py +0 -0
  131. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/info.py +0 -0
  132. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/init_project.py +0 -0
  133. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/project/project_config.py +0 -0
  134. {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
  135. {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
  136. {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
  137. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/py.typed +0 -0
  138. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/search_context/__init__.py +0 -0
  139. {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
  140. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/search_context/search_service.py +0 -0
  141. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/search_context/search_wiring.py +0 -0
  142. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/serialization/__init__.py +0 -0
  143. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/serialization/yaml.py +0 -0
  144. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/__init__.py +0 -0
  145. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/chunk_embedding_service.py +0 -0
  146. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/embedding_shard_resolver.py +0 -0
  147. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/factories.py +0 -0
  148. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/models.py +0 -0
  149. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/persistence_service.py +0 -0
  150. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/services/table_name_policy.py +0 -0
  151. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/__init__.py +0 -0
  152. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/connection.py +0 -0
  153. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/exceptions/__init__.py +0 -0
  154. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/exceptions/exceptions.py +0 -0
  155. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/migrations/V01__init.sql +0 -0
  156. {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
  157. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/models.py +0 -0
  158. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/__init__.py +0 -0
  159. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/chunk_repository.py +0 -0
  160. {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
  161. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/embedding_repository.py +0 -0
  162. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/repositories/factories.py +0 -0
  163. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/storage/transaction.py +0 -0
  164. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/system/__init__.py +0 -0
  165. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/system/properties.py +0 -0
  166. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/templating/__init__.py +0 -0
  167. {databao_context_engine-0.6.0 → databao_context_engine-0.6.1.dev1}/src/databao_context_engine/templating/renderer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databao-context-engine
3
- Version: 0.6.0
3
+ Version: 0.6.1.dev1
4
4
  Summary: Semantic context for your LLMs — generated automatically
5
5
  License-Expression: Apache-2.0 AND LicenseRef-Additional-Terms
6
6
  License-File: LICENSE.md
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "databao-context-engine"
3
- version = "0.6.0"
3
+ version = "0.6.1.dev1"
4
4
  description = "Semantic context for your LLMs — generated automatically"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -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
- append_result_to_all_results,
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
- generate_embeddings: bool = True,
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
- reset_all_results(project_layout.output_dir)
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
- generate_embeddings=generate_embeddings,
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
- generate_embeddings: bool,
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.process_prepared_source(
125
+ result = build_service.build_context(
123
126
  prepared_source=prepared_source,
124
127
  plugin=plugin,
125
- generate_embeddings=generate_embeddings,
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 process_prepared_source(
34
- self, *, prepared_source: PreparedDatasource, plugin: BuildPlugin, generate_embeddings: bool = True
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 generate_embeddings:
47
+ if not should_index:
48
48
  return result
49
49
 
50
- chunks = plugin.divide_context_into_chunks(result.context)
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
- chunks = plugin.divide_context_into_chunks(built.context)
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=built,
93
- full_type=built.datasource_type,
94
- datasource_id=built.datasource_id,
95
- override=True,
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
- generate_embeddings: bool = True,
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
- generate_embeddings=generate_embeddings,
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 ALL_RESULTS_FILE_NAME
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 append_result_to_all_results(output_dir: Path, result: BuiltDatasourceContext):
29
- path = output_dir.joinpath(ALL_RESULTS_FILE_NAME)
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
- # Here temporarily because it needs to be reset between runs.
38
- # A subsequent PR will remove the existence of the all_results file
39
- def reset_all_results(output_dir: Path):
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
- generate_embeddings=should_index,
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] = engine.get_all_contexts()
122
-
123
- if datasource_ids is not None:
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 ALL_RESULTS_FILE_NAME, ProjectLayout
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 == ALL_RESULTS_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="Retrieve the contents of the all_results file",
40
+ description="Read all available contexts",
41
41
  annotations=ToolAnnotations(readOnlyHint=True, idempotentHint=True, openWorldHint=False),
42
42
  )
43
43
  def all_results_tool():
@@ -181,6 +181,7 @@ class DatasourceType:
181
181
  class AbstractConfigFile(ABC):
182
182
  type: str
183
183
  name: str
184
+ enabled: bool = True
184
185
 
185
186
 
186
187
  # Config files can either be defined:
@@ -41,8 +41,7 @@ ConfigPropertyDefinition = ConfigSinglePropertyDefinition | ConfigUnionPropertyD
41
41
 
42
42
  @dataclass(kw_only=True)
43
43
  class ConfigPropertyAnnotation:
44
- required: bool = False
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
- def collect_catalog_model(self, connection, catalog: str, schemas: list[str]) -> list[DatabaseSchema] | None:
40
- if not schemas:
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
- def _sql_relations(self, catalog: str, schemas_in: str) -> str:
68
- return f"""
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
- def _sql_columns(self, catalog: str, schemas_in: str) -> str:
85
- return f"""
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"