databao 0.3.4.dev1__tar.gz → 0.3.6__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 (206) hide show
  1. databao-0.3.6/Makefile +66 -0
  2. {databao-0.3.4.dev1 → databao-0.3.6}/PKG-INFO +22 -3
  3. {databao-0.3.4.dev1 → databao-0.3.6}/README.md +19 -0
  4. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/README.md +19 -45
  5. databao-0.3.6/examples/demo-snowflake-project/cleanup.sql +28 -0
  6. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/pyproject.toml +3 -2
  7. databao-0.3.6/examples/demo-snowflake-project/setup.sql +145 -0
  8. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/src/databao_snowflake_demo/app.py +0 -3
  9. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/uv.lock +1049 -1038
  10. {databao-0.3.4.dev1 → databao-0.3.6}/pyproject.toml +6 -2
  11. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/tools/databao_ask/agent_factory.py +2 -1
  12. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/app.py +5 -4
  13. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/sidebar.py +2 -2
  14. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/models/settings.py +4 -2
  15. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/pages/agent_settings.py +5 -6
  16. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/pages/general_settings.py +2 -1
  17. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/executor_utils.py +4 -2
  18. {databao-0.3.4.dev1 → databao-0.3.6}/uv.lock +3637 -3610
  19. databao-0.3.4.dev1/Makefile +0 -38
  20. databao-0.3.4.dev1/examples/demo-snowflake-project/cleanup.sql +0 -57
  21. databao-0.3.4.dev1/examples/demo-snowflake-project/setup.sql +0 -242
  22. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/agents/reviewer.md +0 -0
  23. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/settings.json +0 -0
  24. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/autosteer/SKILL.md +0 -0
  25. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/check-coverage/SKILL.md +0 -0
  26. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/check-coverage/evals/evals.json +0 -0
  27. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/check-pr-comments/SKILL.md +0 -0
  28. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/check-pr-comments/evals/evals.json +0 -0
  29. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/create-branch/SKILL.md +0 -0
  30. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/create-branch/evals/evals.json +0 -0
  31. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/create-pr/SKILL.md +0 -0
  32. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/create-pr/evals/evals.json +0 -0
  33. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/eval-skills/SKILL.md +0 -0
  34. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/local-code-review/SKILL.md +0 -0
  35. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/local-code-review/evals/evals.json +0 -0
  36. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/make-yt-issue/SKILL.md +0 -0
  37. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/make-yt-issue/evals/evals.json +0 -0
  38. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/review-architecture/SKILL.md +0 -0
  39. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/review-architecture/evals/evals.json +0 -0
  40. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/setup-environment/SKILL.md +0 -0
  41. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/setup-environment/evals/evals.json +0 -0
  42. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/update-pr/SKILL.md +0 -0
  43. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/update-pr/evals/evals.json +0 -0
  44. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/write-tests/SKILL.md +0 -0
  45. {databao-0.3.4.dev1 → databao-0.3.6}/.claude/skills/write-tests/evals/evals.json +0 -0
  46. {databao-0.3.4.dev1 → databao-0.3.6}/.github/actions/setup-project/action.yml +0 -0
  47. {databao-0.3.4.dev1 → databao-0.3.6}/.github/copilot-instructions.md +0 -0
  48. {databao-0.3.4.dev1 → databao-0.3.6}/.github/workflows/e2e-tests.yml +0 -0
  49. {databao-0.3.4.dev1 → databao-0.3.6}/.github/workflows/publish-dev.yml +0 -0
  50. {databao-0.3.4.dev1 → databao-0.3.6}/.github/workflows/publish.yml +0 -0
  51. {databao-0.3.4.dev1 → databao-0.3.6}/.github/workflows/python-package.yml +0 -0
  52. {databao-0.3.4.dev1 → databao-0.3.6}/.gitignore +0 -0
  53. {databao-0.3.4.dev1 → databao-0.3.6}/.pre-commit-config.yaml +0 -0
  54. {databao-0.3.4.dev1 → databao-0.3.6}/.python-version +0 -0
  55. {databao-0.3.4.dev1 → databao-0.3.6}/CLAUDE.md +0 -0
  56. {databao-0.3.4.dev1 → databao-0.3.6}/CONTRIBUTING.md +0 -0
  57. {databao-0.3.4.dev1 → databao-0.3.6}/DEVELOPMENT.md +0 -0
  58. {databao-0.3.4.dev1 → databao-0.3.6}/LICENSE +0 -0
  59. {databao-0.3.4.dev1 → databao-0.3.6}/docs/architecture.md +0 -0
  60. {databao-0.3.4.dev1 → databao-0.3.6}/docs/python-coding-guidelines.md +0 -0
  61. {databao-0.3.4.dev1 → databao-0.3.6}/docs/testing-strategy.md +0 -0
  62. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/.gitignore +0 -0
  63. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/pytest.ini +0 -0
  64. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/__init__.py +0 -0
  65. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/databases/__init__.py +0 -0
  66. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/databases/bigquery_utils.py +0 -0
  67. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/databases/duckdb_utils.py +0 -0
  68. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/databases/mysql_utils.py +0 -0
  69. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/databases/postgres_utils.py +0 -0
  70. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/databases/snowflake_utils.py +0 -0
  71. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/databases/sqlite_utils.py +0 -0
  72. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/project_utils.py +0 -0
  73. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/utils/__init__.py +0 -0
  74. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/utils/path_utils.py +0 -0
  75. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/utils/pexpect_utils.py +0 -0
  76. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/src/utils/yaml_compare.py +0 -0
  77. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/conftest.py +0 -0
  78. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/domains/test_bigquery.py +0 -0
  79. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/domains/test_duckdb.py +0 -0
  80. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/domains/test_mysql.py +0 -0
  81. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/domains/test_postgres.py +0 -0
  82. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/domains/test_snowflake.py +0 -0
  83. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/domains/test_sqlite.py +0 -0
  84. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/resources/bigquery_introspections.yaml +0 -0
  85. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/resources/duckdb_introspections.yaml +0 -0
  86. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/resources/mysql_introspections.yaml +0 -0
  87. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/resources/postgres_introspections.yaml +0 -0
  88. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/resources/postgres_partitioned_tables_introspections.yaml +0 -0
  89. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/resources/snowflake_introspections.yaml +0 -0
  90. {databao-0.3.4.dev1 → databao-0.3.6}/e2e-tests/tests/resources/sqlite_introspections.yaml +0 -0
  91. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/databao/domains/root/dce.ini +0 -0
  92. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/databao/domains/root/examples/src/databases/example_postgres.yaml +0 -0
  93. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/databao/domains/root/examples/src/files/documentation.md +0 -0
  94. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/databao/domains/root/examples/src/files/notes.txt +0 -0
  95. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/databao/domains/root/src/snowflake.yaml +0 -0
  96. {databao-0.3.4.dev1 → databao-0.3.6}/examples/demo-snowflake-project/src/databao_snowflake_demo/__init__.py +0 -0
  97. {databao-0.3.4.dev1 → databao-0.3.6}/scripts/generate_licenses.py +0 -0
  98. {databao-0.3.4.dev1 → databao-0.3.6}/scripts/smoke-test-skills.sh +0 -0
  99. {databao-0.3.4.dev1 → databao-0.3.6}/scripts/validate_agent_guidance.py +0 -0
  100. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/__init__.py +0 -0
  101. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/__main__.py +0 -0
  102. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/__init__.py +0 -0
  103. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/app.py +0 -0
  104. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/ask.py +0 -0
  105. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/build.py +0 -0
  106. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/datasource/__init__.py +0 -0
  107. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/datasource/add.py +0 -0
  108. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/datasource/check.py +0 -0
  109. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/index.py +0 -0
  110. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/init.py +0 -0
  111. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/mcp.py +0 -0
  112. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/commands/status.py +0 -0
  113. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/__init__.py +0 -0
  114. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ask/__init__.py +0 -0
  115. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ask/agent_factory.py +0 -0
  116. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ask/display.py +0 -0
  117. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ask/service.py +0 -0
  118. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/build.py +0 -0
  119. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/datasource/__init__.py +0 -0
  120. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/datasource/add.py +0 -0
  121. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/datasource/check.py +0 -0
  122. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/datasource/validation.py +0 -0
  123. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/index.py +0 -0
  124. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/init/__init__.py +0 -0
  125. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/init/errors.py +0 -0
  126. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/init/service.py +0 -0
  127. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/__init__.py +0 -0
  128. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/server.py +0 -0
  129. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/tools/__init__.py +0 -0
  130. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/tools/databao_ask/__init__.py +0 -0
  131. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/tools/databao_ask/tool.py +0 -0
  132. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/tools/database_context/__init__.py +0 -0
  133. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/mcp/tools/database_context/tools.py +0 -0
  134. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/status.py +0 -0
  135. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/__init__.py +0 -0
  136. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/assets/bao.png +0 -0
  137. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/cli.py +0 -0
  138. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/__init__.py +0 -0
  139. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/chat.py +0 -0
  140. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/datasource_form.py +0 -0
  141. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/datasource_manager.py +0 -0
  142. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/icons.py +0 -0
  143. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/results.py +0 -0
  144. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/components/status.py +0 -0
  145. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/models/__init__.py +0 -0
  146. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/models/chat_session.py +0 -0
  147. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/pages/__init__.py +0 -0
  148. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/pages/chat.py +0 -0
  149. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/pages/context_settings.py +0 -0
  150. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/pages/welcome.py +0 -0
  151. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/project_utils.py +0 -0
  152. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/__init__.py +0 -0
  153. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/build_service.py +0 -0
  154. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/chat_persistence.py +0 -0
  155. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/chat_title.py +0 -0
  156. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/dce_operations.py +0 -0
  157. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/llm_models.py +0 -0
  158. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/query_executor.py +0 -0
  159. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/settings_persistence.py +0 -0
  160. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/services/storage.py +0 -0
  161. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/streaming.py +0 -0
  162. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/features/ui/suggestions.py +0 -0
  163. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/py.typed +0 -0
  164. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/__init__.py +0 -0
  165. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/cli_utils.py +0 -0
  166. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/context_engine_cli.py +0 -0
  167. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/errors.py +0 -0
  168. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/log/__init__.py +0 -0
  169. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/log/cli_progress.py +0 -0
  170. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/log/console.py +0 -0
  171. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/log/llm_errors.py +0 -0
  172. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/log/logging.py +0 -0
  173. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/project/__init__.py +0 -0
  174. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/shared/project/layout.py +0 -0
  175. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/workflows/__init__.py +0 -0
  176. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/workflows/ask.py +0 -0
  177. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/workflows/datasource/__init__.py +0 -0
  178. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/workflows/datasource/add.py +0 -0
  179. {databao-0.3.4.dev1 → databao-0.3.6}/src/databao_cli/workflows/datasource/check.py +0 -0
  180. {databao-0.3.4.dev1 → databao-0.3.6}/tests/__init__.py +0 -0
  181. {databao-0.3.4.dev1 → databao-0.3.6}/tests/check_datasource/__init__.py +0 -0
  182. {databao-0.3.4.dev1 → databao-0.3.6}/tests/check_datasource/test_check_datasource.py +0 -0
  183. {databao-0.3.4.dev1 → databao-0.3.6}/tests/check_datasource/test_project/databao/.gitignore +0 -0
  184. {databao-0.3.4.dev1 → databao-0.3.6}/tests/check_datasource/test_project/databao/domains/root/dce.ini +0 -0
  185. {databao-0.3.4.dev1 → databao-0.3.6}/tests/check_datasource/test_project/databao/domains/root/src/myduck.yaml +0 -0
  186. {databao-0.3.4.dev1 → databao-0.3.6}/tests/conftest.py +0 -0
  187. {databao-0.3.4.dev1 → databao-0.3.6}/tests/plugins/__init__.py +0 -0
  188. {databao-0.3.4.dev1 → databao-0.3.6}/tests/plugins/get_loaded_plugins.py +0 -0
  189. {databao-0.3.4.dev1 → databao-0.3.6}/tests/plugins/test_plugins.py +0 -0
  190. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_add_datasource.py +0 -0
  191. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_app.py +0 -0
  192. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_ask.py +0 -0
  193. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_build.py +0 -0
  194. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_build_fingerprint.py +0 -0
  195. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_cli_progress.py +0 -0
  196. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_datasource_form_validation.py +0 -0
  197. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_datasource_validation.py +0 -0
  198. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_index.py +0 -0
  199. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_init.py +0 -0
  200. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_mcp.py +0 -0
  201. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_query_executor.py +0 -0
  202. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_query_executor_race_conditions.py +0 -0
  203. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_source_count.py +0 -0
  204. {databao-0.3.4.dev1 → databao-0.3.6}/tests/test_status.py +0 -0
  205. {databao-0.3.4.dev1 → databao-0.3.6}/tests/utils/__init__.py +0 -0
  206. {databao-0.3.4.dev1 → databao-0.3.6}/tests/utils/project.py +0 -0
databao-0.3.6/Makefile ADDED
@@ -0,0 +1,66 @@
1
+ LATEST_STABLE := $(or $(shell git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$$' | head -1),v0.0.0)
2
+ CURRENT_MAJOR := $(shell echo $(LATEST_STABLE) | sed 's/^v//' | cut -d. -f1)
3
+ CURRENT_MINOR := $(shell echo $(LATEST_STABLE) | sed 's/^v//' | cut -d. -f2)
4
+ CURRENT_BUILD := $(shell echo $(LATEST_STABLE) | sed 's/^v//' | cut -d. -f3)
5
+
6
+ setup:
7
+ @echo "Checking prerequisites..."
8
+ @python3 --version
9
+ @uv --version
10
+ @echo "Installing dependencies..."
11
+ uv sync --dev
12
+ @echo "Installing pre-commit hooks..."
13
+ uv run pre-commit install
14
+ @echo "Verifying environment..."
15
+ uv run databao --help > /dev/null
16
+ uv run ruff check src/databao_cli > /dev/null
17
+ uv run mypy src/databao_cli > /dev/null
18
+ uv run pytest tests/ --co -q > /dev/null
19
+ @echo "Environment ready."
20
+
21
+ check:
22
+ uv run pre-commit run --all-files
23
+
24
+ test:
25
+ bash -c 'set -a; [ -f .env ] && source .env; set +a; uv run pytest tests/ -v'
26
+
27
+ test-cov:
28
+ bash -c 'set -a; [ -f .env ] && source .env; set +a; uv run pytest tests/ -v --cov --cov-report=term-missing --cov-report=html'
29
+
30
+ test-cov-check:
31
+ bash -c 'set -a; [ -f .env ] && source .env; set +a; uv run pytest tests/ -v --cov --cov-report=term-missing --cov-fail-under=80'
32
+
33
+ e2e-test:
34
+ uv run --group e2e-tests pytest e2e-tests
35
+
36
+ nickname:
37
+ @git config user.email | cut -d@ -f1
38
+
39
+ lint-skills:
40
+ uv run python scripts/validate_agent_guidance.py
41
+
42
+ smoke-skills:
43
+ scripts/smoke-test-skills.sh
44
+
45
+ release:
46
+ @if [ -z "$(VERSION)" ]; then \
47
+ echo "Usage: make release VERSION=0.3.0"; \
48
+ exit 1; \
49
+ fi
50
+ @echo "Creating release v$(VERSION)..."
51
+ git tag -a "v$(VERSION)" -m "v$(VERSION)"
52
+ git push origin "v$(VERSION)"
53
+ @echo "Tag v$(VERSION) pushed. CI will publish to PyPI."
54
+
55
+ patch-release: VERSION = $(CURRENT_MAJOR).$(CURRENT_MINOR).$(shell echo $$(($(CURRENT_BUILD) + 1)))
56
+ patch-release: release
57
+
58
+ minor-release: VERSION = $(CURRENT_MAJOR).$(shell echo $$(($(CURRENT_MINOR) + 1))).0
59
+ minor-release: release
60
+
61
+ major-release: VERSION = $(shell echo $$(($(CURRENT_MAJOR) + 1))).0.0
62
+ major-release: release
63
+
64
+ dev-release:
65
+ gh workflow run publish-dev.yml
66
+ @echo "Dev release workflow triggered."
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databao
3
- Version: 0.3.4.dev1
3
+ Version: 0.3.6
4
4
  License-File: LICENSE
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: adbc-driver-manager>=1.10.0
7
7
  Requires-Dist: adbc-driver-snowflake>=1.10.0
8
8
  Requires-Dist: click<9.0.0,>=8.2.1
9
- Requires-Dist: databao-agent==0.2.1.dev12
10
- Requires-Dist: databao-context-engine[snowflake]==0.7.1.dev2
9
+ Requires-Dist: databao-agent~=0.2.2
10
+ Requires-Dist: databao-context-engine[snowflake]~=0.7.2
11
11
  Requires-Dist: fastmcp>=2.0.0
12
12
  Requires-Dist: nh3>=0.2.15
13
13
  Requires-Dist: prettytable>=3.10.0
@@ -117,6 +117,25 @@ pip install databao
117
117
  For more details about commands, supported data sources, and configuration options,
118
118
  visit the [docs](https://docs.databao.app).
119
119
 
120
+ ## Releasing
121
+
122
+ ```bash
123
+ # Tag and push a specific version (CI publishes to PyPI)
124
+ make release VERSION=0.3.0
125
+
126
+ # Bump the patch version automatically (e.g. 0.3.0 -> 0.3.1)
127
+ make patch-release
128
+
129
+ # Bump the minor version automatically (e.g. 0.3.1 -> 0.4.0)
130
+ make minor-release
131
+
132
+ # Bump the major version automatically (e.g. 0.4.0 -> 1.0.0)
133
+ make major-release
134
+
135
+ # Trigger a dev release via GitHub Actions
136
+ make dev-release
137
+ ```
138
+
120
139
  ## Contributing
121
140
 
122
141
  We love contributions! Here’s how you can help:
@@ -88,6 +88,25 @@ pip install databao
88
88
  For more details about commands, supported data sources, and configuration options,
89
89
  visit the [docs](https://docs.databao.app).
90
90
 
91
+ ## Releasing
92
+
93
+ ```bash
94
+ # Tag and push a specific version (CI publishes to PyPI)
95
+ make release VERSION=0.3.0
96
+
97
+ # Bump the patch version automatically (e.g. 0.3.0 -> 0.3.1)
98
+ make patch-release
99
+
100
+ # Bump the minor version automatically (e.g. 0.3.1 -> 0.4.0)
101
+ make minor-release
102
+
103
+ # Bump the major version automatically (e.g. 0.4.0 -> 1.0.0)
104
+ make major-release
105
+
106
+ # Trigger a dev release via GitHub Actions
107
+ make dev-release
108
+ ```
109
+
91
110
  ## Contributing
92
111
 
93
112
  We love contributions! Here’s how you can help:
@@ -1,23 +1,22 @@
1
1
  # Databao Demo — Streamlit in Snowflake
2
2
 
3
- This project deploys the [Databao](https://github.com/JetBrains/databao-cli) Streamlit UI as a native **Streamlit-in-Snowflake (SiS)** application. It connects to a Snowflake database as its datasource, loads secrets at runtime via a Snowflake UDF, and runs the chat-based data exploration interface directly inside your Snowflake account.
3
+ This project deploys the [Databao](https://github.com/JetBrains/databao-cli) Streamlit UI as a native **Streamlit-in-Snowflake (SiS)** application. It connects to a Snowflake database as its datasource using OAuth (the Streamlit app's own session), loads secrets at runtime via a Snowflake UDF, and runs the chat-based data exploration interface directly inside your Snowflake account.
4
4
 
5
5
  ## Prerequisites
6
6
 
7
- - A Snowflake account with `ACCOUNTADMIN` privileges (for the initial setup)
7
+ - A Snowflake account with privileges to create databases, warehouses, integrations, and Streamlit apps
8
8
  - An OpenAI API key and/or an Anthropic API key
9
- - A Snowflake database with data you want the Databao agent to explore (see [Datasource credentials](#datasource-credentials-sf_ds_) below)
9
+ - A Snowflake warehouse and database with data you want the Databao agent to explore
10
10
 
11
11
  ## How It Works
12
12
 
13
13
  1. **`setup.sql`** provisions everything needed inside Snowflake:
14
- - A dedicated database, warehouse, and compute pool (all named with a configurable suffix)
14
+ - A dedicated database and warehouse (named with a configurable suffix)
15
15
  - Network rules and external access integrations for outbound HTTPS
16
- - A service user with a permissive network policy
17
16
  - A Git repository object pointing at `databao-cli` on GitHub
18
- - Snowflake secrets for the OpenAI/Anthropic API keys and datasource credentials
17
+ - Snowflake secrets for the OpenAI/Anthropic API keys and datasource coordinates (warehouse, database)
19
18
  - A Python UDF (`get_secret`) that reads those secrets at runtime
20
- - The Streamlit app itself, running on a container runtime (`CPU_X64_M`)
19
+ - The Streamlit app itself, running on `SYSTEM_COMPUTE_POOL_CPU` (or an optional dedicated compute pool)
21
20
 
22
21
  2. **`cleanup.sql`** removes all objects created by `setup.sql` for a given suffix.
23
22
 
@@ -27,7 +26,7 @@ This project deploys the [Databao](https://github.com/JetBrains/databao-cli) Str
27
26
  - Locates and configures the ADBC Snowflake driver shared library so DuckDB's Snowflake extension can find it
28
27
  - Launches the standard Databao UI in **read-only domain** mode
29
28
 
30
- 4. **`databao/domains/root/`** contains the Databao domain definition a Snowflake datasource configured via environment variables and sample context files that ship with the demo.
29
+ 4. **`databao/domains/root/`** contains the Databao domain definition -- a Snowflake datasource configured via environment variables and sample context files that ship with the demo.
31
30
 
32
31
  ## Setup
33
32
 
@@ -38,49 +37,24 @@ Open `setup.sql` and fill in the placeholder values at the top:
38
37
  | Variable | Description |
39
38
  |---|---|
40
39
  | `suffix` | Name suffix appended to all Snowflake objects. Set to e.g. `V2` to create a fully independent copy (objects will be named `STREAMLIT_DATABAO_DB_V2`, etc.). Changing the suffix lets you run multiple independent instances side by side. |
41
- | `openai_key` | OpenAI API key |
42
- | `anthropic_key` | Anthropic API key |
43
- | `sf_ds_account` | Snowflake datasource account identifier (see [below](#datasource-credentials-sf_ds_)) |
44
- | `sf_ds_warehouse` | Warehouse for the datasource (see [below](#datasource-credentials-sf_ds_)) |
45
- | `sf_ds_database` | Database to explore (see [below](#datasource-credentials-sf_ds_)) |
46
- | `sf_ds_user` | Service user for the datasource (see [below](#datasource-credentials-sf_ds_)) |
47
- | `sf_ds_password` | Password for that service user |
40
+ | `openai_api_key` | OpenAI API key |
41
+ | `anthropic_api_key` | Anthropic API key |
42
+ | `snowflake_ds_warehouse` | Warehouse the Databao agent will use to run queries against the datasource |
43
+ | `snowflake_ds_database` | Database containing the data the agent will explore |
48
44
 
49
- #### Datasource credentials (`sf_ds_*`)
50
-
51
- These credentials are used by the Databao agent to connect to a Snowflake database via the Snowflake API. The agent reads data from this database to answer your questions.
52
-
53
- - **`sf_ds_account`** — your Snowflake account identifier (e.g. `abc12345.us-east-1`). You can find it in Snowsight under your account menu.
54
-
55
- - **`sf_ds_warehouse`** — the warehouse the agent will use to run queries. If you don't have one, create it in **Snowsight → Admin → Warehouses → + Warehouse** (an `XSMALL` warehouse is sufficient).
56
-
57
- - **`sf_ds_database`** — the database containing the data the agent will explore.
58
-
59
- - **`sf_ds_user`** and **`sf_ds_password`** — a service user that the agent authenticates as. To create one:
60
- 1. Go to **Snowsight → Admin → Users & Roles → + User**
61
- 2. Enter a name (e.g. `STREAMLIT_SERVICE_USER`)
62
- 3. Set a password
63
- 4. Click **Create User**
64
- 5. Grant the user access to the target database and warehouse:
65
-
66
- ```sql
67
- GRANT USAGE ON WAREHOUSE <your_warehouse> TO USER <your_service_user>;
68
- GRANT USAGE ON DATABASE <your_database> TO USER <your_service_user>;
69
- GRANT USAGE ON ALL SCHEMAS IN DATABASE <your_database> TO USER <your_service_user>;
70
- GRANT SELECT ON ALL TABLES IN DATABASE <your_database> TO USER <your_service_user>;
71
- ```
45
+ The datasource connection uses the Streamlit app's own OAuth session -- no separate service user or password is needed. The user running the Streamlit app must have access to the target warehouse and database.
72
46
 
73
47
  ### 2. Run the Setup Script
74
48
 
75
- Execute the entire `setup.sql` in a Snowflake worksheet (or via SnowSQL) while connected as `ACCOUNTADMIN`. The script is idempotent it uses `CREATE OR REPLACE` throughout, so re-running it is safe.
49
+ Execute the entire `setup.sql` in a Snowflake worksheet (or via SnowSQL). The script is idempotent -- it uses `CREATE OR REPLACE` throughout, so re-running it is safe.
76
50
 
77
51
  ### 3. Open the App
78
52
 
79
- Once the script finishes, navigate to **Streamlit** in Snowsight and open the app (named `STREAMLIT_DATABAO_APP_<suffix>`, e.g. `STREAMLIT_DATABAO_APP_DEMO`). The compute pool may take a minute or two to resume on first launch.
53
+ Once the script finishes, navigate to **Streamlit** in Snowsight and open the app (named `STREAMLIT_DATABAO_APP_<suffix>`, e.g. `STREAMLIT_DATABAO_APP_DEMO`). The system compute pool may take a minute or two to resume on first launch.
80
54
 
81
55
  ## Cleanup
82
56
 
83
- To remove all Snowflake objects created by `setup.sql`, open `cleanup.sql`, set the same `suffix` you used during setup, and run the script as `ACCOUNTADMIN`. This drops the database (cascading to all database-scoped objects), compute pool, integrations, service user, network policy, and warehouse.
57
+ To remove all Snowflake objects created by `setup.sql`, open `cleanup.sql`, set the same `suffix` you used during setup, and run the script. This drops the database (cascading to all database-scoped objects), integrations, and warehouse.
84
58
 
85
59
  ## Local Development
86
60
 
@@ -91,11 +65,11 @@ uv sync
91
65
  # Set the required environment variables
92
66
  export OPENAI_API_KEY="..."
93
67
  export ANTHROPIC_API_KEY="..."
94
- export SNOWFLAKE_DS_ACCOUNT="..."
68
+ export SNOWFLAKE_ACCOUNT="..." # e.g. abc12345
69
+ export SNOWFLAKE_HOST="..." # e.g. abc12345.snowflakecomputing.com
70
+ export SNOWFLAKE_DS_TOKEN="..." # OAuth token for datasource access
95
71
  export SNOWFLAKE_DS_WAREHOUSE="..."
96
72
  export SNOWFLAKE_DS_DATABASE="..."
97
- export SNOWFLAKE_DS_USER="..."
98
- export SNOWFLAKE_DS_PASSWORD="..."
99
73
 
100
74
  # Run the Streamlit app
101
75
  uv run streamlit run src/databao_snowflake_demo/app.py -- \
@@ -118,5 +92,5 @@ To test a dev/pre-release version, update the version specifier in `pyproject.to
118
92
  ## Notes
119
93
 
120
94
  - The app runs in **read-only domain** mode — datasource configuration and domain builds are disabled in the UI. All domain setup is done ahead of time via the files in `databao/domains/root/`.
121
- - The compute pool uses `CPU_X64_M` instances with auto-suspend after 5 minutes and auto-resume enabled.
95
+ - The app uses `SYSTEM_COMPUTE_POOL_CPU` by default. To use a dedicated compute pool, uncomment the relevant section in `setup.sql`.
122
96
  - Network egress is allowed on ports 80 and 443 to enable OpenAI/Anthropic API calls and Snowflake datasource connections.
@@ -0,0 +1,28 @@
1
+ -- ============================================================
2
+ -- CLEANUP: Drop all objects created by setup.sql for a given suffix.
3
+ -- Set the same suffix you used in setup.sql, then run this script.
4
+ -- ============================================================
5
+
6
+ SET suffix = 'DEMO';
7
+
8
+ -- Derived object names (must match setup.sql)
9
+ SET database_name = 'STREAMLIT_DATABAO_DB_' || $suffix;
10
+ SET app_warehouse = 'STREAMLIT_DATABAO_WAREHOUSE_' || $suffix;
11
+ SET git_integration = 'STREAMLIT_DATABAO_GIT_INTEGRATION_' || $suffix;
12
+ SET app_eai = 'STREAMLIT_DATABAO_EAI_' || $suffix;
13
+ SET secrets_access = 'STREAMLIT_DATABAO_SECRETS_ACCESS_' || $suffix;
14
+
15
+ -- Database (cascades: Streamlit app, UDF, secrets, git repo, network rule)
16
+ DROP DATABASE IF EXISTS IDENTIFIER($database_name);
17
+
18
+ -- External access integrations
19
+ DROP INTEGRATION IF EXISTS IDENTIFIER($secrets_access);
20
+ DROP INTEGRATION IF EXISTS IDENTIFIER($app_eai);
21
+
22
+ -- API integration (git)
23
+ DROP INTEGRATION IF EXISTS IDENTIFIER($git_integration);
24
+
25
+ -- Warehouse
26
+ DROP WAREHOUSE IF EXISTS IDENTIFIER($app_warehouse);
27
+
28
+ SELECT 'Streamlit app STREAMLIT_DATABAO_APP_' || $suffix || ' cleaned up successfully.' AS STATUS;
@@ -5,8 +5,9 @@ description = "Databao demo project for Snowflake"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11,<3.12"
7
7
  dependencies = [
8
- "databao-agent==0.2.1.dev12",
9
- "databao-context-engine[snowflake]==0.7.1.dev2",
8
+ "databao~=0.3.5",
9
+ "databao-agent~=0.2.1",
10
+ "databao-context-engine[snowflake]~=0.7.2",
10
11
  "streamlit[snowflake]>=1.53.0",
11
12
  "adbc-driver-snowflake>=1.10.0",
12
13
  "adbc-driver-manager>=1.10.0",
@@ -0,0 +1,145 @@
1
+ -- ============================================================
2
+ -- CONFIGURATION: Set these values before running the script
3
+ -- ============================================================
4
+
5
+ -- Name suffix: change this to create a fully independent set of all
6
+ -- Snowflake objects (database, warehouse, compute pool, integrations, etc.).
7
+ -- Leave empty for the default installation.
8
+ -- Example: SET suffix = 'V2';
9
+ SET suffix = 'DEMO';
10
+
11
+ -- Secrets
12
+ SET openai_api_key = '<YOUR_OPENAI_API_KEY>';
13
+ SET anthropic_api_key = '<YOUR_ANTHROPIC_API_KEY>';
14
+ SET snowflake_ds_warehouse = '<SNOWFLAKE_DATASOURCE_WAREHOUSE>';
15
+ SET snowflake_ds_database = '<SNOWFLAKE_DATASOURCE_DATABASE>';
16
+
17
+ -- Git repository
18
+ SET git_repo_origin = 'https://github.com/JetBrains/databao-cli.git';
19
+ SET git_repo_name = '"databao-cli"';
20
+ SET git_branch = '"main"';
21
+
22
+ -- Streamlit app
23
+ SET streamlit_main_file = 'examples/demo-snowflake-project/src/databao_snowflake_demo/app.py';
24
+
25
+ -- Derived object names (controlled by $suffix — do not modify)
26
+ SET database_name = 'STREAMLIT_DATABAO_DB_' || $suffix;
27
+ SET egress_rule = 'STREAMLIT_DATABAO_EGRESS_RULE_' || $suffix;
28
+ SET git_integration = 'STREAMLIT_DATABAO_GIT_INTEGRATION_' || $suffix;
29
+ SET app_name = 'STREAMLIT_DATABAO_APP_' || $suffix;
30
+ SET app_warehouse = 'STREAMLIT_DATABAO_WAREHOUSE_' || $suffix;
31
+ SET app_eai = 'STREAMLIT_DATABAO_EAI_' || $suffix;
32
+ SET secrets_access = 'STREAMLIT_DATABAO_SECRETS_ACCESS_' || $suffix;
33
+
34
+ SET app_compute_pool = 'SYSTEM_COMPUTE_POOL_CPU';
35
+
36
+ -- OPTIONAL: Uncomment to create a dedicated compute pool for the app
37
+ -- SET app_compute_pool = 'STREAMLIT_DATABAO_COMPUTE_POOL_' || $suffix;
38
+ --
39
+ -- DROP COMPUTE POOL IF EXISTS IDENTIFIER($app_compute_pool);
40
+ -- CREATE COMPUTE POOL IDENTIFIER($app_compute_pool)
41
+ -- MIN_NODES = 1
42
+ -- MAX_NODES = 1
43
+ -- INSTANCE_FAMILY = CPU_X64_M
44
+ -- AUTO_RESUME = TRUE
45
+ -- AUTO_SUSPEND_SECS = 300;
46
+
47
+ CREATE OR REPLACE DATABASE IDENTIFIER($database_name);
48
+
49
+ USE DATABASE IDENTIFIER($database_name);
50
+ USE SCHEMA PUBLIC;
51
+
52
+ CREATE OR REPLACE WAREHOUSE IDENTIFIER($app_warehouse)
53
+ WAREHOUSE_SIZE = 'XSMALL'
54
+ AUTO_SUSPEND = 60
55
+ AUTO_RESUME = TRUE;
56
+
57
+ USE WAREHOUSE IDENTIFIER($app_warehouse);
58
+
59
+ CREATE OR REPLACE SECRET openai_api_key
60
+ TYPE = GENERIC_STRING
61
+ SECRET_STRING = $openai_api_key;
62
+
63
+ CREATE OR REPLACE SECRET anthropic_api_key
64
+ TYPE = GENERIC_STRING
65
+ SECRET_STRING = $anthropic_api_key;
66
+
67
+ CREATE OR REPLACE SECRET snowflake_ds_warehouse
68
+ TYPE = GENERIC_STRING
69
+ SECRET_STRING = $snowflake_ds_warehouse;
70
+
71
+ CREATE OR REPLACE SECRET snowflake_ds_database
72
+ TYPE = GENERIC_STRING
73
+ SECRET_STRING = $snowflake_ds_database;
74
+
75
+ CREATE OR REPLACE NETWORK RULE IDENTIFIER($egress_rule)
76
+ MODE = EGRESS
77
+ TYPE = HOST_PORT
78
+ VALUE_LIST = ('0.0.0.0:443', '0.0.0.0:80');
79
+
80
+ CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION IDENTIFIER($app_eai)
81
+ ALLOWED_NETWORK_RULES = ($egress_rule)
82
+ ENABLED = TRUE;
83
+
84
+ CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION IDENTIFIER($secrets_access)
85
+ ALLOWED_NETWORK_RULES = ($egress_rule)
86
+ ALLOWED_AUTHENTICATION_SECRETS = (
87
+ openai_api_key,
88
+ anthropic_api_key,
89
+ snowflake_ds_warehouse,
90
+ snowflake_ds_database
91
+ ) ENABLED = TRUE;
92
+
93
+ CREATE OR REPLACE API INTEGRATION IDENTIFIER($git_integration)
94
+ API_PROVIDER = git_https_api
95
+ API_ALLOWED_PREFIXES = ($git_repo_origin)
96
+ ALLOWED_AUTHENTICATION_SECRETS = ()
97
+ ENABLED = TRUE;
98
+
99
+ CREATE OR REPLACE GIT REPOSITORY IDENTIFIER($git_repo_name)
100
+ ORIGIN = $git_repo_origin
101
+ API_INTEGRATION = $git_integration;
102
+
103
+ ALTER GIT REPOSITORY IDENTIFIER($git_repo_name) FETCH;
104
+
105
+ DECLARE
106
+ _sql VARCHAR;
107
+ _streamlit_stage_path VARCHAR;
108
+ BEGIN
109
+ _streamlit_stage_path := '@' || $database_name || '."PUBLIC".' || $git_repo_name || '/branches/' || $git_branch || '/';
110
+
111
+ _sql := 'CREATE OR REPLACE STREAMLIT "' || $app_name || '"'
112
+ || ' FROM ''' || :_streamlit_stage_path || ''''
113
+ || ' MAIN_FILE = ''' || $streamlit_main_file || ''''
114
+ || ' QUERY_WAREHOUSE = ''' || $app_warehouse || ''''
115
+ || ' COMPUTE_POOL = ''' || $app_compute_pool || ''''
116
+ || ' RUNTIME_NAME = ''SYSTEM$ST_CONTAINER_RUNTIME_PY3_11'''
117
+ || ' EXTERNAL_ACCESS_INTEGRATIONS = (' || $app_eai || ')'
118
+ || ' COMMENT = ''Databao Snowflake Connection Test UI''';
119
+ EXECUTE IMMEDIATE :_sql;
120
+ END;
121
+
122
+ DECLARE
123
+ _sql VARCHAR;
124
+ BEGIN
125
+ _sql := 'CREATE OR REPLACE FUNCTION get_secret(secret_name STRING)'
126
+ || ' RETURNS STRING'
127
+ || ' LANGUAGE PYTHON'
128
+ || ' RUNTIME_VERSION = 3.11'
129
+ || ' HANDLER = ''get_secret'''
130
+ || ' EXTERNAL_ACCESS_INTEGRATIONS = (' || $secrets_access || ')'
131
+ || ' SECRETS = ('
132
+ || ' ''openai_api_key'' = openai_api_key,'
133
+ || ' ''anthropic_api_key'' = anthropic_api_key,'
134
+ || ' ''snowflake_ds_warehouse'' = snowflake_ds_warehouse,'
135
+ || ' ''snowflake_ds_database'' = snowflake_ds_database'
136
+ || ') AS '
137
+ || '$$' || CHR(10)
138
+ || 'import _snowflake' || CHR(10)
139
+ || CHR(10)
140
+ || 'def get_secret(secret_name):' || CHR(10)
141
+ || ' return _snowflake.get_generic_secret_string(secret_name)' || CHR(10)
142
+ || '$$';
143
+
144
+ EXECUTE IMMEDIATE :_sql;
145
+ END;
@@ -13,11 +13,8 @@ logger = logging.getLogger(__name__)
13
13
  SNOWFLAKE_SECRETS: dict[str, str] = {
14
14
  "openai_api_key": "OPENAI_API_KEY",
15
15
  "anthropic_api_key": "ANTHROPIC_API_KEY",
16
- "snowflake_ds_account": "SNOWFLAKE_DS_ACCOUNT",
17
16
  "snowflake_ds_warehouse": "SNOWFLAKE_DS_WAREHOUSE",
18
17
  "snowflake_ds_database": "SNOWFLAKE_DS_DATABASE",
19
- "snowflake_ds_user": "SNOWFLAKE_DS_USER",
20
- "snowflake_ds_password": "SNOWFLAKE_DS_PASSWORD",
21
18
  }
22
19
 
23
20
  ADBC_LIB = "libadbc_driver_snowflake.so"