mainsequence-metatable 0.1.8.dev15__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.dev15/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.8.dev16}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +10 -1
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/data-sources.md +19 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/operations/catalog-migrations.md +1 -1
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/bootstrap.py +25 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/access.py +4 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/postgresql_access.py +46 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_data_source_identity.py +86 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/LICENSE +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → 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.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/adr/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/openapi.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → 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.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → 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.dev15 → 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.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/SOURCES.txt +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/source_registrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev15 → 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.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev15 → 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.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → 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.dev15 → 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.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_runtime_transition.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/uv.lock +0 -0
|
@@ -28,7 +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
|
|
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.
|
|
32
33
|
|
|
33
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).
|
|
34
35
|
The SDK prerequisite is implemented on `metatables_removal`; the current local
|
|
@@ -172,6 +173,14 @@ configuration inserted as the runtime DataSource in that database. Failed work
|
|
|
172
173
|
never activates a partially initialized runtime. A database already initialized
|
|
173
174
|
and compatible can be selected without running migrations.
|
|
174
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
|
+
|
|
175
184
|
Settings, runtime context, mode selection and bootstrap actions do not depend on
|
|
176
185
|
catalog sessions or catalog memberships. They retain the existing request admission.
|
|
177
186
|
The caller who configures a pending target controls its initialization; an existing
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/data-sources.md
RENAMED
|
@@ -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
|
|
@@ -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.
|
|
@@ -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
|
|
|
@@ -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()
|
|
@@ -83,3 +83,89 @@ def test_legacy_runtime_alias_is_reconciled_without_losing_other_sources(tmp_pat
|
|
|
83
83
|
restarted = RuntimeBootstrap(bootstrap.config, None)
|
|
84
84
|
assert restarted.initial_candidate() == bootstrap.candidate
|
|
85
85
|
assert restarted.selected_source_uid == str(canonical)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def test_setup_reports_the_database_privilege_error_without_sql_or_parameters(tmp_path, monkeypatch):
|
|
89
|
+
import pytest
|
|
90
|
+
from sqlalchemy.exc import ProgrammingError
|
|
91
|
+
|
|
92
|
+
from metatables.api.app.bootstrap import BootstrapError
|
|
93
|
+
|
|
94
|
+
bootstrap = RuntimeBootstrap(RuntimeConfig(local_mode=False,
|
|
95
|
+
configuration_path=tmp_path / "configuration.yaml"), None)
|
|
96
|
+
bootstrap.selected_source_uid = str(uuid4())
|
|
97
|
+
bootstrap.candidate = dict(display_name="Hosted", class_type="timescale_db", configuration={
|
|
98
|
+
"host": "db.example.invalid", "database_name": "tables", "database_user": "tables"})
|
|
99
|
+
engine = create_catalog_engine(f"sqlite:///{tmp_path / 'catalog.sqlite'}", allow_sqlite=True)
|
|
100
|
+
bootstrap.engine = engine
|
|
101
|
+
bootstrap.factory = sessionmaker(engine, expire_on_commit=False)
|
|
102
|
+
|
|
103
|
+
@dataclass
|
|
104
|
+
class Source:
|
|
105
|
+
uid: UUID | None = None
|
|
106
|
+
|
|
107
|
+
bootstrap.backend = SimpleNamespace(source=Source())
|
|
108
|
+
monkeypatch.setattr(bootstrap, "migration_lock", nullcontext)
|
|
109
|
+
monkeypatch.setattr(bootstrap, "inspect", lambda: setattr(bootstrap, "status", "registration_required"))
|
|
110
|
+
# A TimescaleDB runtime whose extension objects belong to the superuser.
|
|
111
|
+
denied = SimpleNamespace(pgcode="42501", diag=SimpleNamespace(message_primary="permission denied for table job_errors"))
|
|
112
|
+
|
|
113
|
+
def initialize(session):
|
|
114
|
+
raise ProgrammingError('REVOKE ALL ON ALL TABLES IN SCHEMA "_timescaledb_internal" FROM PUBLIC',
|
|
115
|
+
{"password": "do-not-show"}, denied)
|
|
116
|
+
|
|
117
|
+
monkeypatch.setattr("metatables.api.backend.backends.registry.backend_for", lambda source:
|
|
118
|
+
SimpleNamespace(access=SimpleNamespace(initialize=initialize)))
|
|
119
|
+
try:
|
|
120
|
+
with pytest.raises(BootstrapError) as raised:
|
|
121
|
+
bootstrap.migrate(uuid4())
|
|
122
|
+
finally:
|
|
123
|
+
bootstrap.close()
|
|
124
|
+
message = str(raised.value)
|
|
125
|
+
assert "permission denied for table job_errors" in message
|
|
126
|
+
assert "must own the runtime database" in message
|
|
127
|
+
assert "REVOKE" not in message and "do-not-show" not in message
|
|
128
|
+
assert bootstrap.error == message
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _fresh_hosted_bootstrap(tmp_path, problems):
|
|
132
|
+
bootstrap = RuntimeBootstrap(RuntimeConfig(local_mode=False,
|
|
133
|
+
configuration_path=tmp_path / "configuration.yaml"), None)
|
|
134
|
+
bootstrap.candidate = dict(display_name="Development", class_type="timescale_db", configuration={
|
|
135
|
+
"host": "db.example.invalid", "database_name": "development", "database_user": "metatables_dev"})
|
|
136
|
+
engine = create_catalog_engine(f"sqlite:///{tmp_path / 'catalog.sqlite'}", allow_sqlite=True)
|
|
137
|
+
bootstrap.engine = engine
|
|
138
|
+
bootstrap.factory = sessionmaker(engine, expire_on_commit=False)
|
|
139
|
+
bootstrap.backend = SimpleNamespace(access=SimpleNamespace(prerequisite_problems=lambda connection: problems))
|
|
140
|
+
return bootstrap
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def test_unsecurable_database_is_blocked_before_any_setup_ddl(tmp_path, monkeypatch):
|
|
144
|
+
import pytest
|
|
145
|
+
|
|
146
|
+
from metatables.api.app.bootstrap import BootstrapError
|
|
147
|
+
|
|
148
|
+
bootstrap = _fresh_hosted_bootstrap(tmp_path, [
|
|
149
|
+
'metatables_dev does not own database "development"',
|
|
150
|
+
"312 object(s) are owned by postgres (extension timescaledb), e.g. schema _timescaledb_internal",
|
|
151
|
+
])
|
|
152
|
+
monkeypatch.setattr("metatables.api.app.bootstrap.upgrade_catalog",
|
|
153
|
+
lambda engine: pytest.fail("Setup DDL ran on a database the login cannot secure"))
|
|
154
|
+
try:
|
|
155
|
+
bootstrap.inspect()
|
|
156
|
+
assert bootstrap.status == "incompatible"
|
|
157
|
+
assert 'metatables_dev does not own database "development"' in bootstrap.error
|
|
158
|
+
assert "extension timescaledb" in bootstrap.error
|
|
159
|
+
with pytest.raises(BootstrapError, match="cannot secure this database"):
|
|
160
|
+
bootstrap.migrate(uuid4())
|
|
161
|
+
finally:
|
|
162
|
+
bootstrap.close()
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def test_securable_fresh_database_still_requires_migrations(tmp_path):
|
|
166
|
+
bootstrap = _fresh_hosted_bootstrap(tmp_path, [])
|
|
167
|
+
try:
|
|
168
|
+
bootstrap.inspect()
|
|
169
|
+
assert bootstrap.status == "migration_required" and bootstrap.error is None
|
|
170
|
+
finally:
|
|
171
|
+
bootstrap.close()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/api/metatables/main.py
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/compose.database-tests.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/openapi.json
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/overview.md
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/api/reference.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/quickstart.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/client/tutorial.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/README.md
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/query.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/reader.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tables.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/examples/updater.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/reference/cli.md
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/reference/python.md
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev15 → mainsequence_metatable-0.1.8.dev16}/docs/security/index.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|