mainsequence-metatable 0.1.8.dev14__tar.gz → 0.1.8.dev16__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.
- {mainsequence_metatable-0.1.8.dev14/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.8.dev16}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +59 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/index.md +1 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/data-sources.md +23 -4
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/openapi.json +0 -52
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/reference.md +0 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/catalog-migrations.md +1 -2
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/hosted-runtime.md +5 -4
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/local-runtime.md +12 -4
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/bootstrap.py +27 -36
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/main.py +0 -3
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/data_sources.py +10 -4
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/runtime_context.py +0 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/runtime.py +1 -13
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/access.py +4 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/postgresql_access.py +46 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime_contract.py +0 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_data_source_identity.py +86 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_hosted_environment_target.py +1 -1
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_selection.py +57 -48
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_data_source_registry.py +1 -2
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_runtime_transition.py +13 -17
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/LICENSE +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/SOURCES.txt +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/source_registrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/uv.lock +0 -0
|
@@ -28,6 +28,8 @@ does not cache this API's runtime context or select its runtime mode or DataSour
|
|
|
28
28
|
Updated 2026-09-28: application Environment policy and relationships are removed.
|
|
29
29
|
Amended 2026-09-29: one enforced runtime binding and explicit bootstrap select one
|
|
30
30
|
database for system and user tables.
|
|
31
|
+
Amended 2026-10-02: each runtime mode lists and selects only its own DataSources,
|
|
32
|
+
and inspection checks the login's prerequisites before setup.
|
|
31
33
|
|
|
32
34
|
Companion decision: [Main Sequence SDK ADR 0035: Independent Git source and platform execution context](https://github.com/mainsequence-sdk/mainsequence-sdk/blob/metatables_removal/docs/adr/0035-independent-git-source-and-platform-context.md).
|
|
33
35
|
The SDK prerequisite is implemented on `metatables_removal`; the current local
|
|
@@ -81,6 +83,55 @@ API requirement. The guides and examples describe the implemented shared path.
|
|
|
81
83
|
|
|
82
84
|
## Decision
|
|
83
85
|
|
|
86
|
+
### Each runtime mode selects only its own DataSources (amended 2026-10-02)
|
|
87
|
+
|
|
88
|
+
Implemented 2026-10-02 in the API and Admin; the PostgreSQL runtime-transition test
|
|
89
|
+
was updated but not run.
|
|
90
|
+
|
|
91
|
+
A DataSource belongs to the runtime mode that registered it. Data Sources and
|
|
92
|
+
Settings show only the current mode's registrations:
|
|
93
|
+
|
|
94
|
+
| Mode | Registrations | Credential references |
|
|
95
|
+
| --- | --- | --- |
|
|
96
|
+
| Local | The workspace SQLite catalog | Local CredentialStore |
|
|
97
|
+
| Hosted | The Hosted registry until activation, then the hosted catalog | SDK Secrets |
|
|
98
|
+
|
|
99
|
+
Neither mode lists, selects or copies the other mode's registrations. This applies
|
|
100
|
+
ADR 0009's rule against automatic credential transfers to selection. A Hosted
|
|
101
|
+
DataSource is registered and selected after switching to Hosted. Local mode offers
|
|
102
|
+
**Switch to Hosted** without choosing a source; Hosted starts with its saved
|
|
103
|
+
selection or uninitialized, as the supervised-selection amendment below requires.
|
|
104
|
+
|
|
105
|
+
Gap observed 2026-10-02: in Local mode, the Settings Hosted picker listed the local
|
|
106
|
+
catalog (`GET /data-sources/`). Selecting a TimescaleDB registered there made
|
|
107
|
+
`POST /runtime-bootstrap/hosted/select/` copy the row, with its local password
|
|
108
|
+
reference, into `.local/runtime-source-candidates.json`. SDK Secrets could not
|
|
109
|
+
resolve that reference ("SDK Secret access failed"). Local mode also offered no
|
|
110
|
+
way to register a Hosted source: **Add DataSource** writes the local catalog, and
|
|
111
|
+
the Admin disables **Switch to Hosted** until a Hosted source is selected. The
|
|
112
|
+
operations guide documents this cross-mode flow.
|
|
113
|
+
|
|
114
|
+
Fix:
|
|
115
|
+
|
|
116
|
+
1. API: remove Local-mode Hosted preselection: `POST /runtime-bootstrap/hosted/select/`,
|
|
117
|
+
the Local `hosted_bootstrap` and its runtime-context field. Remove the
|
|
118
|
+
local-catalog lookup and `remember()` from `registered_hosted_source`. Hosted
|
|
119
|
+
`POST /runtime-bootstrap/select/` resolves only the Hosted registry or the
|
|
120
|
+
active hosted catalog.
|
|
121
|
+
2. Admin: in Local mode, Settings enables **Switch to Hosted** with no source
|
|
122
|
+
picker. The Hosted picker and its **Add DataSource** render only in Hosted
|
|
123
|
+
mode, where Data Sources is the Hosted registry.
|
|
124
|
+
3. Docs: `docs/operations/local-runtime.md` describes the order Switch to Hosted,
|
|
125
|
+
register in Data Sources, select in Settings, then run MetaTables migrations
|
|
126
|
+
or use the existing catalog.
|
|
127
|
+
4. Tests: the Local-mode selection route no longer exists; Hosted selection
|
|
128
|
+
rejects a local-catalog UID; a fresh Hosted runtime registers a source with an
|
|
129
|
+
SDK Secret reference and selects it; Settings in Local mode switches without a
|
|
130
|
+
selection.
|
|
131
|
+
|
|
132
|
+
Hosted registry entries already copied from a local catalog carry unusable
|
|
133
|
+
references; developers remove them. No data migration is provided.
|
|
134
|
+
|
|
84
135
|
### One local runtime across branches (amended 2026-09-30)
|
|
85
136
|
|
|
86
137
|
MetaTables owns one persistent local SQLite runtime for a checkout. Git branches,
|
|
@@ -122,6 +173,14 @@ configuration inserted as the runtime DataSource in that database. Failed work
|
|
|
122
173
|
never activates a partially initialized runtime. A database already initialized
|
|
123
174
|
and compatible can be selected without running migrations.
|
|
124
175
|
|
|
176
|
+
Amended 2026-10-02: before any runtime is registered, inspection also checks,
|
|
177
|
+
read-only, that the login can secure the database under
|
|
178
|
+
[ADR 0007](0007-database-enforced-table-access.md): it owns the database, has
|
|
179
|
+
`CREATEROLE`, and owns every non-system object. Unmet prerequisites make the
|
|
180
|
+
target incompatible, with each reason shown in Settings, so setup never leaves a
|
|
181
|
+
database half-initialized. A registered runtime is not rechecked, because it may
|
|
182
|
+
hold imported external objects.
|
|
183
|
+
|
|
125
184
|
Settings, runtime context, mode selection and bootstrap actions do not depend on
|
|
126
185
|
catalog sessions or catalog memberships. They retain the existing request admission.
|
|
127
186
|
The caller who configures a pending target controls its initialization; an existing
|
|
@@ -23,7 +23,7 @@ decisions belong in the SDK repository and are linked as dependencies.
|
|
|
23
23
|
|
|
24
24
|
| ADR | Status | Scope |
|
|
25
25
|
| --- | --- | --- |
|
|
26
|
-
| [0001: One API execution path with SQLite for local development](api/0001-unified-api-storage-and-local-sqlite.md) | Accepted and implemented | Shared execution, API-owned local storage, SDK context dependency, and DuckDB removal. |
|
|
26
|
+
| [0001: One API execution path with SQLite for local development](api/0001-unified-api-storage-and-local-sqlite.md) | Accepted and implemented | Shared execution, API-owned local storage, SDK context dependency, and DuckDB removal; each runtime mode lists and selects only its own DataSources. |
|
|
27
27
|
| [0002: Application administration and table ownership](api/0002-application-administration-and-table-ownership.md) | Accepted and implemented | Platform admin facts, table Reader/Writer ownership, User/Team grants, live namespace inheritance, and application-owned access management. |
|
|
28
28
|
| [0004: Execute approved application migrations inside the API](api/0004-approved-application-migrations.md) | Superseded by ADR 0013 | Historical API-installed provider execution model. |
|
|
29
29
|
| [0005: Shared run logs with local file capture](api/0005-run-logs-and-local-file-capture.md) | Accepted and implemented; live hosted verification pending | Shared run correlation and log API, runtime-bound local JSONL files, and hosted retrieval through the SDK. |
|
{mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/data-sources.md
RENAMED
|
@@ -30,10 +30,10 @@ These operations do not reconcile runtime table grants. If database permissions
|
|
|
30
30
|
need repair in Security, caller queries remain blocked while external DataSource
|
|
31
31
|
management remains available.
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
Each runtime mode lists only its own registrations: Local the workspace catalog,
|
|
34
|
+
Hosted its registry. In Hosted mode, Settings lists eligible PostgreSQL, TimescaleDB,
|
|
35
|
+
MySQL and MSSQL DataSources and selects one by UID through `/runtime-bootstrap/select/`.
|
|
36
|
+
Local mode cannot select a Hosted DataSource; switch to Hosted first. Registration preserves the UID when its catalog is
|
|
37
37
|
initialized. The API's private pre-initialization storage is an implementation detail.
|
|
38
38
|
|
|
39
39
|
The active runtime DataSource hosts the system catalog and default application
|
|
@@ -181,6 +181,25 @@ other caller sessions. SQL Server requires login/user/role administration,
|
|
|
181
181
|
`VIEW DEFINITION` and grant management. Managed database services must provide
|
|
182
182
|
these capabilities; missing permissions leave caller SQL disabled.
|
|
183
183
|
|
|
184
|
+
Settings checks the PostgreSQL requirements as soon as you select a database
|
|
185
|
+
without a MetaTables runtime, before any migration runs. The login must own the
|
|
186
|
+
database, have `CREATEROLE`, and own, directly or through role membership, every
|
|
187
|
+
schema, table, view, sequence and routine outside the system catalogs, because
|
|
188
|
+
setup revokes `PUBLIC` access on each of them. Otherwise Settings shows
|
|
189
|
+
**Needs attention** with each reason, for example
|
|
190
|
+
`metatables_dev does not own database "development"` or
|
|
191
|
+
`291 object(s) are owned by postgres (extension timescaledb)`, and
|
|
192
|
+
**Run MetaTables migrations** stays unavailable. Nothing is written to that database.
|
|
193
|
+
|
|
194
|
+
A database operator prepares a qualifying database for the login, for example
|
|
195
|
+
`CREATE DATABASE metatables OWNER metatables_dev TEMPLATE template0;`. On
|
|
196
|
+
PostgreSQL 14 and earlier the `public` schema belongs to the bootstrap superuser,
|
|
197
|
+
so also run `ALTER SCHEMA public OWNER TO metatables_dev;` in that database.
|
|
198
|
+
Extensions such as TimescaleDB and pgvector install their objects as the
|
|
199
|
+
bootstrap superuser, so a database with those extensions cannot currently be
|
|
200
|
+
secured by a non-superuser login. Do not select a database other applications
|
|
201
|
+
share: setup would change their objects' `PUBLIC` access.
|
|
202
|
+
|
|
184
203
|
Hosted sources require a password Secret to derive per-User database credentials.
|
|
185
204
|
MySQL global mandatory roles are unsupported. Registration admits ordinary tables
|
|
186
205
|
only; it does not transfer external ownership. Privileged routines and triggers
|
{mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/openapi.json
RENAMED
|
@@ -3127,16 +3127,6 @@
|
|
|
3127
3127
|
],
|
|
3128
3128
|
"title": "Git Source"
|
|
3129
3129
|
},
|
|
3130
|
-
"hosted_bootstrap": {
|
|
3131
|
-
"anyOf": [
|
|
3132
|
-
{
|
|
3133
|
-
"$ref": "#/components/schemas/RuntimeBootstrapDescriptor"
|
|
3134
|
-
},
|
|
3135
|
-
{
|
|
3136
|
-
"type": "null"
|
|
3137
|
-
}
|
|
3138
|
-
]
|
|
3139
|
-
},
|
|
3140
3130
|
"hosted_environment": {
|
|
3141
3131
|
"anyOf": [
|
|
3142
3132
|
{
|
|
@@ -6510,48 +6500,6 @@
|
|
|
6510
6500
|
]
|
|
6511
6501
|
}
|
|
6512
6502
|
},
|
|
6513
|
-
"/runtime-bootstrap/hosted/select/": {
|
|
6514
|
-
"post": {
|
|
6515
|
-
"description": "Select a registered hosted DataSource without changing the active local runtime.",
|
|
6516
|
-
"operationId": "select_hosted_before_switch_runtime_bootstrap_hosted_select__post",
|
|
6517
|
-
"requestBody": {
|
|
6518
|
-
"content": {
|
|
6519
|
-
"application/json": {
|
|
6520
|
-
"schema": {
|
|
6521
|
-
"$ref": "#/components/schemas/RuntimeSourceSelection"
|
|
6522
|
-
}
|
|
6523
|
-
}
|
|
6524
|
-
},
|
|
6525
|
-
"required": true
|
|
6526
|
-
},
|
|
6527
|
-
"responses": {
|
|
6528
|
-
"200": {
|
|
6529
|
-
"content": {
|
|
6530
|
-
"application/json": {
|
|
6531
|
-
"schema": {
|
|
6532
|
-
"$ref": "#/components/schemas/RuntimeBootstrapDescriptor"
|
|
6533
|
-
}
|
|
6534
|
-
}
|
|
6535
|
-
},
|
|
6536
|
-
"description": "Successful Response"
|
|
6537
|
-
},
|
|
6538
|
-
"422": {
|
|
6539
|
-
"content": {
|
|
6540
|
-
"application/json": {
|
|
6541
|
-
"schema": {
|
|
6542
|
-
"$ref": "#/components/schemas/HTTPValidationError"
|
|
6543
|
-
}
|
|
6544
|
-
}
|
|
6545
|
-
},
|
|
6546
|
-
"description": "Validation Error"
|
|
6547
|
-
}
|
|
6548
|
-
},
|
|
6549
|
-
"summary": "Select Hosted Before Switch",
|
|
6550
|
-
"tags": [
|
|
6551
|
-
"Runtime bootstrap"
|
|
6552
|
-
]
|
|
6553
|
-
}
|
|
6554
|
-
},
|
|
6555
6503
|
"/runtime-bootstrap/migrate/": {
|
|
6556
6504
|
"post": {
|
|
6557
6505
|
"operationId": "migrate_runtime_bootstrap_migrate__post",
|
{mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/reference.md
RENAMED
|
@@ -51,7 +51,6 @@ These methods and paths are mounted by the current application. See the [OpenAPI
|
|
|
51
51
|
| POST | `/runtime-bootstrap/activate/` | Activate | 200 |
|
|
52
52
|
| POST | `/runtime-bootstrap/configure/` | Configure | 200 |
|
|
53
53
|
| POST | `/runtime-bootstrap/destroy-local/` | Destroy Local | 200 |
|
|
54
|
-
| POST | `/runtime-bootstrap/hosted/select/` | Select Hosted Before Switch | 200 |
|
|
55
54
|
| POST | `/runtime-bootstrap/migrate/` | Migrate | 200 |
|
|
56
55
|
| POST | `/runtime-bootstrap/select/` | Select Hosted Runtime Source | 200 |
|
|
57
56
|
| GET | `/runtime-context/` | Runtime Context | 200 |
|
|
@@ -10,7 +10,7 @@ system tables, including `data_source`, alongside user tables. There is no separ
|
|
|
10
10
|
catalog connection to configure. Local and hosted use the same initialization flow.
|
|
11
11
|
|
|
12
12
|
1. For Hosted mode, register a PostgreSQL, TimescaleDB, MySQL or MSSQL connection under **MetaTables → Data Sources**. This registration is available before the hosted catalog is initialized.
|
|
13
|
-
2. Open **Settings**, choose Hosted runtime mode, and select that registered DataSource from the list. Local mode prefills the single local SQLite runtime file, shared across Git branches, and uses **Check DataSource**. Choosing a hosted DataSource and switching modes are separate actions.
|
|
13
|
+
2. Open **Settings**, choose Hosted runtime mode, and select that registered DataSource from the list. Local mode prefills the single local SQLite runtime file, shared across Git branches, and uses **Check DataSource**. Choosing a hosted DataSource and switching modes are separate actions. For a database without a MetaTables runtime, selection also checks that the login can secure it; **Needs attention** lists what is missing ([database privileges](../api/data-sources.md#database-privileges-and-sql-behavior)) and no migration can run until another database is selected.
|
|
14
14
|
3. For an empty or outdated database, click **Run MetaTables migrations**. This
|
|
15
15
|
explicitly runs the packaged Alembic history. After success, the API saves the
|
|
16
16
|
proposal as the runtime DataSource inside the newly initialized registry.
|
|
@@ -31,7 +31,6 @@ The API owns these endpoints in both modes:
|
|
|
31
31
|
| --- | --- |
|
|
32
32
|
| `GET /runtime-context/` | Read runtime and bootstrap status, including before any catalog exists. |
|
|
33
33
|
| `GET/POST /data-sources/` | List or register DataSources, including before hosted bootstrap. |
|
|
34
|
-
| `POST /runtime-bootstrap/hosted/select/` | Select a registered hosted DataSource while Local remains active. |
|
|
35
34
|
| `POST /runtime-bootstrap/select/` | Select a registered DataSource in Hosted mode. |
|
|
36
35
|
| `POST /runtime-bootstrap/configure/` | Hold and inspect a proposed `{display_name, class_type, configuration}`. |
|
|
37
36
|
| `POST /runtime-bootstrap/migrate/` | Explicitly migrate, register the runtime source, and activate. |
|
|
@@ -42,8 +42,8 @@ The injected SDKCredentialStore saves the password as a managed platform Secret
|
|
|
42
42
|
and stores its UID. Hosted never provisions a local key or applies MetaTables AES
|
|
43
43
|
encryption to that Secret. Then select it
|
|
44
44
|
from the registered DataSources list in **Settings → Runtime → DataSource**. In the
|
|
45
|
-
developer launcher,
|
|
46
|
-
|
|
45
|
+
developer launcher, switch to Hosted first: Local mode lists only its workspace
|
|
46
|
+
DataSources and cannot register or select Hosted ones.
|
|
47
47
|
If MetaTables is absent or outdated, explicitly click **Run MetaTables migrations**.
|
|
48
48
|
If its schema is already compatible, choose **Use this DataSource**. The selected
|
|
49
49
|
database stores both the system catalog and user tables; the source registration is
|
|
@@ -55,9 +55,10 @@ returns HTTP 200 with a null active DataSource; application routes remain unavai
|
|
|
55
55
|
This lets the Vite site show Settings even on the first launch. Once active, the descriptor
|
|
56
56
|
supplies the source UID, dialect, parameter style and schema to both clients.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Each runtime mode registers through `/data-sources/` into its own registry. Hosted
|
|
59
59
|
pre-initialization persistence retains the legacy `.local/runtime-source-candidates.json`
|
|
60
|
-
filename for compatibility; it is not a second resource
|
|
60
|
+
filename for compatibility; it is not a second resource, and Local mode never reads
|
|
61
|
+
or writes it. Selection saves
|
|
61
62
|
public connection settings and Secret references to `.local/runtime-data-sources.json`.
|
|
62
63
|
Persist that directory across restarts. Startup verifies
|
|
63
64
|
the existing schema and reopens the selected source; it never upgrades. An incompatible
|
|
@@ -67,10 +67,18 @@ Apply application providers through the client with
|
|
|
67
67
|
|
|
68
68
|
## Switch modes in one Admin site
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
Each mode lists and selects only its own DataSources. Local shows the workspace
|
|
71
|
+
catalog and keeps its passwords in the local CredentialStore; Hosted shows the
|
|
72
|
+
Hosted registry and keeps passwords as managed Main Sequence Secrets. A DataSource
|
|
73
|
+
registered in Local never appears in Hosted, and neither mode copies the other's
|
|
74
|
+
registrations or credentials.
|
|
75
|
+
|
|
76
|
+
To use a hosted database, choose Hosted under **Settings → Runtime mode** and click
|
|
77
|
+
**Switch to Hosted**; no DataSource selection is needed first. The worker restarts in
|
|
78
|
+
Hosted with its saved selection, or uninitialized with Settings available. Register
|
|
79
|
+
the database under **MetaTables → Data Sources**, select it in **Settings → Runtime →
|
|
80
|
+
DataSource**, then click **Run MetaTables migrations** or **Use this DataSource**.
|
|
81
|
+
Switching stops the old worker before starting the selected mode; it never copies data.
|
|
74
82
|
Failed worker startup restores the previous worker. Mode selection is recorded in
|
|
75
83
|
`.local/runtime-selection.json`; successful DataSource selection is recorded separately
|
|
76
84
|
in `.local/runtime-data-sources.json` using public settings and Secret references only.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mainsequence-metatable"
|
|
7
|
-
version = "0.1.8.
|
|
7
|
+
version = "0.1.8.dev16"
|
|
8
8
|
description = "Main Sequence MetaTables Python client and standalone API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -58,6 +58,14 @@ class BootstrapError(RuntimeError):
|
|
|
58
58
|
pass
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
def insufficient_privilege(exc):
|
|
62
|
+
"""The database's own message for a missing privilege, never SQL text or parameters."""
|
|
63
|
+
orig = getattr(exc, "orig", None)
|
|
64
|
+
code = getattr(orig, "pgcode", None) or getattr(orig, "sqlstate", None)
|
|
65
|
+
message = getattr(getattr(orig, "diag", None), "message_primary", None)
|
|
66
|
+
return message if code == "42501" and message else None
|
|
67
|
+
|
|
68
|
+
|
|
61
69
|
class DestroyLocalInput(BaseModel):
|
|
62
70
|
model_config = ConfigDict(extra="forbid")
|
|
63
71
|
path: str
|
|
@@ -254,6 +262,8 @@ class RuntimeBootstrap:
|
|
|
254
262
|
return
|
|
255
263
|
if set(self.current) != set(self.expected):
|
|
256
264
|
self.status = "migration_required"
|
|
265
|
+
if not self.current:
|
|
266
|
+
self.require_prerequisites(connection)
|
|
257
267
|
return
|
|
258
268
|
from metatables.api.backend.operations.catalog_schema import validate_system_schema
|
|
259
269
|
validate_system_schema(connection, self.backend.catalog)
|
|
@@ -261,6 +271,8 @@ class RuntimeBootstrap:
|
|
|
261
271
|
row = session.scalar(select(DataSource).where(DataSource.is_runtime.__eq__(True)))
|
|
262
272
|
if row is None:
|
|
263
273
|
self.status = "registration_required"
|
|
274
|
+
with engine.connect() as connection:
|
|
275
|
+
self.require_prerequisites(connection)
|
|
264
276
|
elif not self.matches(row):
|
|
265
277
|
self.status = "incompatible"
|
|
266
278
|
self.error = "The stored runtime DataSource does not match this connection."
|
|
@@ -286,6 +298,15 @@ class RuntimeBootstrap:
|
|
|
286
298
|
self.status = "unavailable"
|
|
287
299
|
self.error = "Cannot verify the selected database or its Alembic history. Check configuration, Secret access and the API's migration version."
|
|
288
300
|
|
|
301
|
+
def require_prerequisites(self, connection):
|
|
302
|
+
# Before any setup DDL: a database the login cannot secure must never be
|
|
303
|
+
# half-initialized. A registered runtime may hold external objects.
|
|
304
|
+
problems = self.backend.access.prerequisite_problems(connection)
|
|
305
|
+
if problems:
|
|
306
|
+
self.status = "incompatible"
|
|
307
|
+
self.error = ("MetaTables cannot secure this database: " + "; ".join(problems) + ". Select a database "
|
|
308
|
+
"owned by the DataSource login, as described in DataSource database privileges.")
|
|
309
|
+
|
|
289
310
|
def matches(self, row):
|
|
290
311
|
return (row.class_type == self.candidate["class_type"]
|
|
291
312
|
and row.configuration == self.candidate["configuration"]
|
|
@@ -347,6 +368,10 @@ class RuntimeBootstrap:
|
|
|
347
368
|
if isinstance(exc, SQLExecutionError):
|
|
348
369
|
self.error = f"Database access setup failed ({exc.code}). Check the DataSource password Secret and database permissions, then retry setup."
|
|
349
370
|
raise BootstrapError(self.error) from None
|
|
371
|
+
if privilege_error := insufficient_privilege(exc):
|
|
372
|
+
self.error = (f"Database setup failed: {privilege_error}. The DataSource login must own the runtime "
|
|
373
|
+
"database and every object in it; see the DataSource database privileges.")
|
|
374
|
+
raise BootstrapError(self.error) from None
|
|
350
375
|
self.error = "MetaTables migration or registration failed. The runtime was not activated; inspect the database before retrying."
|
|
351
376
|
raise BootstrapError(self.error) from None
|
|
352
377
|
|
|
@@ -544,46 +569,12 @@ def persist_registered_selection(candidate):
|
|
|
544
569
|
candidate.persist_selection()
|
|
545
570
|
|
|
546
571
|
|
|
547
|
-
@router.post("/hosted/select/", response_model=RuntimeBootstrapDescriptor)
|
|
548
|
-
def select_hosted_before_switch(body: RuntimeSourceSelection, request: Request,
|
|
549
|
-
caller: AdmittedCaller = Depends(require_admin)):
|
|
550
|
-
"""Select a registered hosted DataSource without changing the active local runtime."""
|
|
551
|
-
state = request.app.state.runtime
|
|
552
|
-
current = state.hosted_bootstrap
|
|
553
|
-
if not state.config.local_mode or current is None:
|
|
554
|
-
raise HTTPException(403, "Hosted DataSource preparation is available only in Local mode.")
|
|
555
|
-
if not current.lock.acquire(blocking=False):
|
|
556
|
-
raise HTTPException(409, "Hosted DataSource configuration is already in progress.")
|
|
557
|
-
try:
|
|
558
|
-
if request.app.state.runtime.hosted_bootstrap is not current:
|
|
559
|
-
raise HTTPException(409, "Hosted DataSource configuration changed. Refresh Settings.")
|
|
560
|
-
source = registered_hosted_source(request, body.source_uid)
|
|
561
|
-
candidate = RuntimeBootstrap(replace(state.config, local_mode=False),
|
|
562
|
-
replace(state.identity, workspace=None))
|
|
563
|
-
try:
|
|
564
|
-
candidate.selected_source_uid = str(body.source_uid)
|
|
565
|
-
candidate.configure(source, caller.user_uid)
|
|
566
|
-
if candidate.status == "unavailable":
|
|
567
|
-
raise BootstrapError(candidate.error or "Cannot verify the hosted DataSource connection.")
|
|
568
|
-
persist_registered_selection(candidate)
|
|
569
|
-
request.app.state.runtime = replace(request.app.state.runtime, hosted_bootstrap=candidate)
|
|
570
|
-
current.close()
|
|
571
|
-
return candidate.descriptor(caller.user_uid, is_admin=caller.is_admin)
|
|
572
|
-
except BootstrapError as exc:
|
|
573
|
-
candidate.close()
|
|
574
|
-
raise HTTPException(409, str(exc)) from None
|
|
575
|
-
except Exception:
|
|
576
|
-
candidate.close()
|
|
577
|
-
raise HTTPException(503, "Unable to save the hosted DataSource configuration.") from None
|
|
578
|
-
finally:
|
|
579
|
-
current.lock.release()
|
|
580
|
-
|
|
581
|
-
|
|
582
572
|
@router.post("/select/", response_model=RuntimeBootstrapDescriptor)
|
|
583
573
|
def select_hosted_runtime_source(body: RuntimeSourceSelection, request: Request,
|
|
584
574
|
caller: AdmittedCaller = Depends(require_admin)):
|
|
575
|
+
# Each mode selects only its own registrations; Local never prepares Hosted.
|
|
585
576
|
if request.app.state.runtime.config.local_mode:
|
|
586
|
-
raise HTTPException(409, "
|
|
577
|
+
raise HTTPException(409, "Switch to Hosted before selecting its DataSource.")
|
|
587
578
|
source = registered_hosted_source(request, body.source_uid)
|
|
588
579
|
with mutation(request, caller) as current:
|
|
589
580
|
state = request.app.state.runtime
|
|
@@ -115,9 +115,6 @@ def create_app(config: RuntimeConfig | None = None) -> FastAPI:
|
|
|
115
115
|
finally:
|
|
116
116
|
if bootstrap:
|
|
117
117
|
bootstrap.close()
|
|
118
|
-
hosted_bootstrap = _app.state.runtime.hosted_bootstrap
|
|
119
|
-
if hosted_bootstrap:
|
|
120
|
-
hosted_bootstrap.close()
|
|
121
118
|
|
|
122
119
|
service = FastAPI(title="MetaTables API", version="0.1.0", lifespan=lifespan)
|
|
123
120
|
from metatables.api.backend.backends.contracts import SQLExecutionError
|
|
@@ -54,8 +54,14 @@ def registrations():
|
|
|
54
54
|
return source_registrations
|
|
55
55
|
|
|
56
56
|
|
|
57
|
+
def hosted_registry(request):
|
|
58
|
+
# The saved registry holds Hosted registrations only; Local lists its catalog.
|
|
59
|
+
runtime = request.app.state.runtime
|
|
60
|
+
return runtime.bootstrap is not None and not runtime.config.local_mode
|
|
61
|
+
|
|
62
|
+
|
|
57
63
|
def saved_rows(request):
|
|
58
|
-
if request
|
|
64
|
+
if not hosted_registry(request):
|
|
59
65
|
return {}
|
|
60
66
|
store = registrations()
|
|
61
67
|
return store.read_registry(store.registry_path(request))
|
|
@@ -67,7 +73,7 @@ def saved_source(uid, request, session):
|
|
|
67
73
|
|
|
68
74
|
|
|
69
75
|
def remember_source(row, request):
|
|
70
|
-
if request
|
|
76
|
+
if hosted_registry(request):
|
|
71
77
|
registrations().remember(row, request)
|
|
72
78
|
|
|
73
79
|
class SourceRoute(APIRoute):
|
|
@@ -179,7 +185,7 @@ def payload(row, actor, binding, request=None):
|
|
|
179
185
|
|
|
180
186
|
|
|
181
187
|
def selected_source(uid, request):
|
|
182
|
-
if request is None or request
|
|
188
|
+
if request is None or not hosted_registry(request):
|
|
183
189
|
return False
|
|
184
190
|
return registrations().selected_uid(request) == str(uid)
|
|
185
191
|
|
|
@@ -372,7 +378,7 @@ def delete_source(uid: UUID, request: Request, actor: TrustedActorFacts = Depend
|
|
|
372
378
|
raise HTTPException(409, "Default or referenced DataSources cannot be removed.")
|
|
373
379
|
session.delete(row)
|
|
374
380
|
session.commit()
|
|
375
|
-
if request
|
|
381
|
+
if hosted_registry(request):
|
|
376
382
|
registrations().forget(uid, request)
|
|
377
383
|
return Response(status_code=204)
|
|
378
384
|
|
|
@@ -87,7 +87,6 @@ def runtime_context(
|
|
|
87
87
|
"git_source": source_descriptor(workspace.source) if workspace else None,
|
|
88
88
|
"data_source_selection": selection,
|
|
89
89
|
"bootstrap": state.bootstrap.descriptor(caller.user_uid, is_admin=caller.is_admin) if state.bootstrap else None,
|
|
90
|
-
"hosted_bootstrap": state.hosted_bootstrap.descriptor(caller.user_uid, is_admin=caller.is_admin) if state.hosted_bootstrap else None,
|
|
91
90
|
"data_source_error": None,
|
|
92
91
|
"data_source": None, "dialect": None, "paramstyle": None,
|
|
93
92
|
"default_schema": None,
|
|
@@ -211,7 +211,6 @@ class RuntimeState:
|
|
|
211
211
|
credential_store: CredentialStore = field(default_factory=UnavailableCredentialStore, repr=False, compare=False)
|
|
212
212
|
binding: RuntimeStorageBinding = field(default_factory=RuntimeStorageBinding)
|
|
213
213
|
bootstrap: object | None = None
|
|
214
|
-
hosted_bootstrap: object | None = None
|
|
215
214
|
actor_facts_cache: PlatformCache[tuple[bool, UUID], tuple[frozenset[UUID], bool]] = field(
|
|
216
215
|
default_factory=PlatformCache, repr=False, compare=False)
|
|
217
216
|
environment_cache: PlatformCache[UUID, HostedEnvironment] = field(
|
|
@@ -247,18 +246,7 @@ def initialize_runtime(config: RuntimeConfig) -> RuntimeState:
|
|
|
247
246
|
except Exception:
|
|
248
247
|
bootstrap.status = "unavailable"
|
|
249
248
|
bootstrap.error = "Saved runtime configuration is invalid. Configure the DataSource again in Settings."
|
|
250
|
-
|
|
251
|
-
if config.local_mode:
|
|
252
|
-
hosted_bootstrap = RuntimeBootstrap(replace(config, local_mode=False), replace(identity, workspace=None))
|
|
253
|
-
hosted_candidate = hosted_bootstrap.initial_candidate()
|
|
254
|
-
if hosted_candidate:
|
|
255
|
-
try:
|
|
256
|
-
hosted_bootstrap.configure(hosted_candidate, None)
|
|
257
|
-
except Exception:
|
|
258
|
-
hosted_bootstrap.status = "unavailable"
|
|
259
|
-
hosted_bootstrap.error = "Saved hosted DataSource is invalid. Configure it again in Settings."
|
|
260
|
-
state = RuntimeState(config=config, identity=identity, bootstrap=bootstrap, hosted_bootstrap=hosted_bootstrap,
|
|
261
|
-
credential_store=credentials)
|
|
249
|
+
state = RuntimeState(config=config, identity=identity, bootstrap=bootstrap, credential_store=credentials)
|
|
262
250
|
if identity is not None and identity.actor_facts is not None:
|
|
263
251
|
state.actor_facts_cache.seed((True, identity.user_uid), identity.actor_facts,
|
|
264
252
|
expires_at=identity.facts_expires_at)
|
|
@@ -60,6 +60,10 @@ class DatabaseAccess:
|
|
|
60
60
|
).hexdigest()
|
|
61
61
|
)
|
|
62
62
|
|
|
63
|
+
def prerequisite_problems(self, connection):
|
|
64
|
+
"""Read-only reasons this login cannot secure the database; checked before setup."""
|
|
65
|
+
return []
|
|
66
|
+
|
|
63
67
|
def initialize(self, session):
|
|
64
68
|
raise NotImplementedError
|
|
65
69
|
|
|
@@ -13,7 +13,53 @@ def quote(value):
|
|
|
13
13
|
return '"' + str(value).replace('"', '""') + '"'
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
# Objects outside the system catalogs that the login neither owns nor inherits.
|
|
17
|
+
# Setup revokes PUBLIC access and changes default privileges on every one of
|
|
18
|
+
# them, which PostgreSQL permits only to their owner.
|
|
19
|
+
FOREIGN_OBJECTS = """
|
|
20
|
+
WITH objects AS (
|
|
21
|
+
SELECT 'schema' AS kind, n.nspname AS name, n.nspowner AS owner,
|
|
22
|
+
'pg_namespace'::regclass AS classid, n.oid AS objid
|
|
23
|
+
FROM pg_namespace n
|
|
24
|
+
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
|
|
25
|
+
UNION ALL
|
|
26
|
+
SELECT 'table', n.nspname || '.' || c.relname, c.relowner, 'pg_class'::regclass, c.oid
|
|
27
|
+
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
28
|
+
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
|
|
29
|
+
AND c.relkind IN ('r', 'p', 'v', 'm', 'S', 'f')
|
|
30
|
+
UNION ALL
|
|
31
|
+
SELECT 'routine', n.nspname || '.' || p.proname, p.proowner, 'pg_proc'::regclass, p.oid
|
|
32
|
+
FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace
|
|
33
|
+
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
|
|
34
|
+
)
|
|
35
|
+
SELECT pg_get_userbyid(o.owner) AS owner, e.extname AS extension, count(*) AS objects,
|
|
36
|
+
min(o.kind || ' ' || o.name) AS example
|
|
37
|
+
FROM objects o
|
|
38
|
+
LEFT JOIN pg_depend d ON d.classid = o.classid AND d.objid = o.objid AND d.deptype = 'e'
|
|
39
|
+
LEFT JOIN pg_extension e ON e.oid = d.refobjid
|
|
40
|
+
WHERE NOT pg_has_role(current_user, o.owner, 'MEMBER')
|
|
41
|
+
GROUP BY 1, 2
|
|
42
|
+
ORDER BY 3 DESC, 1
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
|
|
16
46
|
class PostgreSQLAccess(DatabaseAccess):
|
|
47
|
+
def prerequisite_problems(self, connection):
|
|
48
|
+
login, database, owns_database, creates_roles = connection.execute(text(
|
|
49
|
+
"SELECT current_user, current_database(), pg_has_role(current_user, d.datdba, 'MEMBER'), "
|
|
50
|
+
"r.rolcreaterole OR r.rolsuper FROM pg_database d JOIN pg_roles r ON r.rolname = current_user "
|
|
51
|
+
"WHERE d.datname = current_database()"
|
|
52
|
+
)).one()
|
|
53
|
+
problems = []
|
|
54
|
+
if not owns_database:
|
|
55
|
+
problems.append(f'{login} does not own database "{database}"')
|
|
56
|
+
if not creates_roles:
|
|
57
|
+
problems.append(f"{login} lacks CREATEROLE")
|
|
58
|
+
for owner, extension, count, example in connection.execute(text(FOREIGN_OBJECTS)).all()[:3]:
|
|
59
|
+
source = f" (extension {extension})" if extension else ""
|
|
60
|
+
problems.append(f"{count} object(s) are owned by {owner}{source}, e.g. {example}")
|
|
61
|
+
return problems
|
|
62
|
+
|
|
17
63
|
def initialize(self, session):
|
|
18
64
|
self.identity_secret()
|
|
19
65
|
connection = session.connection()
|
|
@@ -61,7 +61,6 @@ class RuntimeContext(BaseModel):
|
|
|
61
61
|
data_source_selection: Literal["local_workspace", "catalog_default", "runtime_override", "runtime_binding"] = "catalog_default"
|
|
62
62
|
data_source_error: str | None = None
|
|
63
63
|
bootstrap: RuntimeBootstrapDescriptor | None = None
|
|
64
|
-
hosted_bootstrap: RuntimeBootstrapDescriptor | None = None
|
|
65
64
|
dialect: Literal["sqlite", "postgresql", "mysql", "mssql"] | None
|
|
66
65
|
paramstyle: Literal["named", "pyformat", "qmark"] | None
|
|
67
66
|
data_source: dict | None
|