mainsequence-metatable 0.1.8.dev16__tar.gz → 0.1.8.dev17__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.dev16/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.8.dev17}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +6 -6
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0007-database-enforced-table-access.md +15 -4
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/data-sources.md +13 -20
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/postgresql_access.py +80 -97
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_data_source_identity.py +19 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/LICENSE +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/adr/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/openapi.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/mainsequence_metatable.egg-info/SOURCES.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/auth/caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/bootstrap.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/source_registrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/operations/search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_runtime_transition.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/uv.lock +0 -0
|
@@ -174,12 +174,12 @@ never activates a partially initialized runtime. A database already initialized
|
|
|
174
174
|
and compatible can be selected without running migrations.
|
|
175
175
|
|
|
176
176
|
Amended 2026-10-02: before any runtime is registered, inspection also checks,
|
|
177
|
-
read-only,
|
|
178
|
-
[ADR 0007](0007-database-enforced-table-access.md):
|
|
179
|
-
`
|
|
180
|
-
target incompatible, with each reason shown in Settings,
|
|
181
|
-
database half-initialized. A registered runtime is not
|
|
182
|
-
|
|
177
|
+
read-only, the login's prerequisites under
|
|
178
|
+
[ADR 0007](0007-database-enforced-table-access.md): `CREATEROLE`, and permission to
|
|
179
|
+
create the `metatables` schema and tables in the default schema. Unmet
|
|
180
|
+
prerequisites make the target incompatible, with each reason shown in Settings,
|
|
181
|
+
so setup never leaves a database half-initialized. A registered runtime is not
|
|
182
|
+
rechecked.
|
|
183
183
|
|
|
184
184
|
Settings, runtime context, mode selection and bootstrap actions do not depend on
|
|
185
185
|
catalog sessions or catalog memberships. They retain the existing request admission.
|
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
> conflicting application-migration execution and credential restrictions;
|
|
7
7
|
> governed API operations and MetaTables system migrations remain separate.
|
|
8
8
|
|
|
9
|
+
> Amendment (2026-10-02): MetaTables secures only what it owns: its `metatables`
|
|
10
|
+
> schema, the tables it manages and the roles it creates. Database-wide defaults
|
|
11
|
+
> and `PUBLIC` access to other owners' objects, including extensions and other
|
|
12
|
+
> applications sharing the database, are the database administrator's
|
|
13
|
+
> responsibility. The login needs `CREATEROLE` and permission to create the
|
|
14
|
+
> `metatables` schema and tables in the DataSource's default schema; it need not
|
|
15
|
+
> own the database.
|
|
16
|
+
|
|
9
17
|
|
|
10
18
|
Date: 2026-09-29
|
|
11
19
|
|
|
@@ -160,12 +168,14 @@ client.
|
|
|
160
168
|
- **Ownership.** Tables are owned by `mt_owner`, a role that cannot log in, because
|
|
161
169
|
an owner holds every privilege. The API's own role manages grants and schema
|
|
162
170
|
changes and never runs caller SQL.
|
|
163
|
-
- **Defaults.** PostgreSQL's default `PUBLIC`
|
|
164
|
-
|
|
171
|
+
- **Defaults.** On objects MetaTables owns, PostgreSQL's default `PUBLIC`
|
|
172
|
+
privileges are revoked, including for future tables and routines. Database-wide
|
|
173
|
+
defaults (connecting, creating objects and temporary tables) and other owners'
|
|
174
|
+
objects belong to the database administrator.
|
|
165
175
|
- **Privileged routines.** Restricted caller roles must not be able to execute
|
|
166
176
|
application routines with elevated owner privileges, including
|
|
167
177
|
`SECURITY DEFINER` routines. Initialization establishes this restriction for
|
|
168
|
-
|
|
178
|
+
the routines MetaTables owns, existing and future, covering direct grants, inherited
|
|
169
179
|
roles and `PUBLIC`. Revoking a direct User grant alone is insufficient if
|
|
170
180
|
another grant still permits execution. Schema changes and extension installation
|
|
171
181
|
preserve the restriction before exposing new or changed routines to callers.
|
|
@@ -261,7 +271,8 @@ and [MySQL implicit commits](https://dev.mysql.com/doc/refman/8.4/en/implicit-co
|
|
|
261
271
|
|
|
262
272
|
- The explorer can run any PostgreSQL query, and the API has no SQL parser left
|
|
263
273
|
to get wrong.
|
|
264
|
-
- The DataSource login needs `CREATEROLE
|
|
274
|
+
- The DataSource login needs `CREATEROLE` and the right to create the `metatables`
|
|
275
|
+
schema; it does not need to own the database.
|
|
265
276
|
- Physical table names become visible to explorer users.
|
|
266
277
|
- Cascading foreign keys are unavailable where the explorer is enabled.
|
|
267
278
|
- Team membership reaches the database at the pace of the existing one-hour
|
{mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/data-sources.md
RENAMED
|
@@ -173,32 +173,25 @@ uses the selected database as its SQL schema. SQL Server 2022 uses `dbo` for the
|
|
|
173
173
|
system schema; application providers may use approved schemas in that database.
|
|
174
174
|
|
|
175
175
|
The API database login manages native caller identities as well as schema. PostgreSQL
|
|
176
|
-
requires `CREATEROLE`,
|
|
177
|
-
|
|
176
|
+
requires `CREATEROLE`, permission to create the `metatables` schema in the runtime
|
|
177
|
+
database and tables in its default schema, and management rights on `mt_owner` if
|
|
178
|
+
it already exists. It does not need to own the database. It stores the catalog in the private `metatables`
|
|
178
179
|
schema. MySQL requires account/role administration, privilege disclosure and grant
|
|
179
180
|
rights on the selected database, `TRIGGER` visibility, and permission to cancel
|
|
180
181
|
other caller sessions. SQL Server requires login/user/role administration,
|
|
181
182
|
`VIEW DEFINITION` and grant management. Managed database services must provide
|
|
182
183
|
these capabilities; missing permissions leave caller SQL disabled.
|
|
183
184
|
|
|
184
|
-
Settings checks
|
|
185
|
-
without a MetaTables runtime, before any migration runs.
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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.
|
|
185
|
+
Settings checks these PostgreSQL requirements as soon as you select a database
|
|
186
|
+
without a MetaTables runtime, before any migration runs. A missing one shows
|
|
187
|
+
**Needs attention** with the reason, for example `metatables_dev lacks CREATEROLE`;
|
|
188
|
+
**Run MetaTables migrations** stays unavailable and nothing is written.
|
|
189
|
+
|
|
190
|
+
The database may be shared with other applications. Setup revokes `PUBLIC` access
|
|
191
|
+
only on objects MetaTables owns: its `metatables` schema, the tables it manages and
|
|
192
|
+
the roles it creates. Database-wide defaults and other owners' objects, including
|
|
193
|
+
extensions such as TimescaleDB and pgvector, are the database administrator's
|
|
194
|
+
responsibility.
|
|
202
195
|
|
|
203
196
|
Hosted sources require a password Secret to derive per-User database credentials.
|
|
204
197
|
MySQL global mandatory roles are unsupported. Registration admits ordinary tables
|
|
@@ -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.dev17"
|
|
8
8
|
description = "Main Sequence MetaTables Python client and standalone API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -13,51 +13,34 @@ def quote(value):
|
|
|
13
13
|
return '"' + str(value).replace('"', '""') + '"'
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
"""
|
|
16
|
+
# MetaTables secures only objects this login owns, directly or through
|
|
17
|
+
# membership (mt_owner). PUBLIC access to anything else in the database is its
|
|
18
|
+
# administrator's responsibility (ADR 0007, amended 2026-10-02).
|
|
19
|
+
OWNED = "pg_has_role(current_user, {owner}, 'MEMBER')"
|
|
20
|
+
USER_SCHEMA = "{schema} !~ '^pg_' AND {schema} <> 'information_schema'"
|
|
44
21
|
|
|
45
22
|
|
|
46
23
|
class PostgreSQLAccess(DatabaseAccess):
|
|
47
24
|
def prerequisite_problems(self, connection):
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
"r.rolcreaterole OR r.rolsuper
|
|
51
|
-
"
|
|
52
|
-
|
|
25
|
+
schema = getattr(self.source.connection, "default_schema", None) or "public"
|
|
26
|
+
login, database, creates_roles, creates_schemas, catalog_owner, tables = connection.execute(text(
|
|
27
|
+
"SELECT current_user, current_database(), r.rolcreaterole OR r.rolsuper, "
|
|
28
|
+
"has_database_privilege(current_database(), 'CREATE'), "
|
|
29
|
+
"(SELECT pg_get_userbyid(nspowner) FROM pg_namespace WHERE nspname = 'metatables' "
|
|
30
|
+
"AND NOT pg_has_role(current_user, nspowner, 'MEMBER')), "
|
|
31
|
+
"(SELECT has_schema_privilege(oid, 'USAGE') AND has_schema_privilege(oid, 'CREATE') "
|
|
32
|
+
"FROM pg_namespace WHERE nspname = :schema) "
|
|
33
|
+
"FROM pg_roles r WHERE r.rolname = current_user"
|
|
34
|
+
), {"schema": schema}).one()
|
|
53
35
|
problems = []
|
|
54
|
-
if not owns_database:
|
|
55
|
-
problems.append(f'{login} does not own database "{database}"')
|
|
56
36
|
if not creates_roles:
|
|
57
37
|
problems.append(f"{login} lacks CREATEROLE")
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
38
|
+
if catalog_owner:
|
|
39
|
+
problems.append(f'schema "metatables" belongs to {catalog_owner}')
|
|
40
|
+
elif not creates_schemas:
|
|
41
|
+
problems.append(f'{login} cannot create schemas in database "{database}"')
|
|
42
|
+
if not tables:
|
|
43
|
+
problems.append(f'{login} cannot create tables in schema "{schema}"')
|
|
61
44
|
return problems
|
|
62
45
|
|
|
63
46
|
def initialize(self, session):
|
|
@@ -66,11 +49,11 @@ class PostgreSQLAccess(DatabaseAccess):
|
|
|
66
49
|
self._role(connection, "mt_owner")
|
|
67
50
|
api = connection.exec_driver_sql("SELECT current_user").scalar()
|
|
68
51
|
connection.exec_driver_sql(f"GRANT mt_owner TO {quote(api)}")
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
52
|
+
if connection.exec_driver_sql(
|
|
53
|
+
"SELECT has_schema_privilege(oid, 'CREATE WITH GRANT OPTION') FROM pg_namespace WHERE nspname='public'"
|
|
54
|
+
).scalar():
|
|
55
|
+
connection.exec_driver_sql("GRANT USAGE, CREATE ON SCHEMA public TO mt_owner")
|
|
72
56
|
connection.exec_driver_sql("REVOKE ALL ON SCHEMA metatables FROM PUBLIC")
|
|
73
|
-
connection.exec_driver_sql("REVOKE CREATE ON SCHEMA public FROM PUBLIC")
|
|
74
57
|
state = session.get(SQLSecurityState, 1)
|
|
75
58
|
if state is None:
|
|
76
59
|
state = SQLSecurityState(id=1, ready=True, pending=True, manifest={})
|
|
@@ -105,39 +88,46 @@ class PostgreSQLAccess(DatabaseAccess):
|
|
|
105
88
|
else:
|
|
106
89
|
connection.exec_driver_sql(f"ALTER ROLE {quote(name)} NOLOGIN")
|
|
107
90
|
|
|
91
|
+
def owned_schemas(self, connection):
|
|
92
|
+
return connection.exec_driver_sql(
|
|
93
|
+
"SELECT nspname FROM pg_namespace WHERE " + USER_SCHEMA.format(schema="nspname")
|
|
94
|
+
+ " AND " + OWNED.format(owner="nspowner")
|
|
95
|
+
).scalars().all()
|
|
96
|
+
|
|
108
97
|
def secure_routines(self, connection, managed_roles):
|
|
109
|
-
"""Inspect only at initialization/schema changes/reconciliation.
|
|
98
|
+
"""Inspect only at initialization/schema changes/reconciliation.
|
|
99
|
+
|
|
100
|
+
Covers the objects this login owns; other owners' objects are left to
|
|
101
|
+
the database administrator.
|
|
102
|
+
"""
|
|
110
103
|
invoker = self.role("invoker", "routines")
|
|
111
104
|
self._role(connection, invoker)
|
|
112
|
-
|
|
113
|
-
connection.exec_driver_sql(
|
|
114
|
-
"SELECT nspname FROM pg_namespace WHERE nspname !~ '^pg_' AND nspname <> 'information_schema'"
|
|
115
|
-
)
|
|
116
|
-
.scalars()
|
|
117
|
-
.all()
|
|
118
|
-
)
|
|
119
|
-
for schema in schemas:
|
|
120
|
-
connection.exec_driver_sql(
|
|
121
|
-
f"REVOKE ALL ON ALL TABLES IN SCHEMA {quote(schema)} FROM PUBLIC"
|
|
122
|
-
)
|
|
105
|
+
for schema in self.owned_schemas(connection):
|
|
123
106
|
if schema != "metatables":
|
|
124
107
|
connection.exec_driver_sql(
|
|
125
108
|
f"GRANT USAGE ON SCHEMA {quote(schema)} TO {quote(invoker)}"
|
|
126
109
|
)
|
|
110
|
+
public_tables = connection.exec_driver_sql(
|
|
111
|
+
"SELECT DISTINCT n.nspname, c.relname FROM pg_class c JOIN pg_namespace n ON n.oid=c.relnamespace "
|
|
112
|
+
"CROSS JOIN LATERAL aclexplode(c.relacl) acl WHERE acl.grantee=0 AND c.relkind IN ('r','p','v','m','f') AND "
|
|
113
|
+
+ USER_SCHEMA.format(schema="n.nspname") + " AND " + OWNED.format(owner="c.relowner")
|
|
114
|
+
).all()
|
|
115
|
+
for schema, table in public_tables:
|
|
116
|
+
connection.exec_driver_sql(f"REVOKE ALL ON TABLE {quote(schema)}.{quote(table)} FROM PUBLIC")
|
|
127
117
|
public_columns = connection.exec_driver_sql(
|
|
128
|
-
"SELECT n.nspname, c.relname, a.attname FROM pg_attribute a JOIN pg_class c ON c.oid=a.attrelid
|
|
118
|
+
"SELECT n.nspname, c.relname, a.attname FROM pg_attribute a JOIN pg_class c ON c.oid=a.attrelid "
|
|
119
|
+
"JOIN pg_namespace n ON n.oid=c.relnamespace CROSS JOIN LATERAL aclexplode(a.attacl) acl "
|
|
120
|
+
"WHERE acl.grantee=0 AND n.nspname !~ '^pg_' AND " + OWNED.format(owner="c.relowner")
|
|
129
121
|
).all()
|
|
130
122
|
for schema, table, column in public_columns:
|
|
131
123
|
connection.exec_driver_sql(
|
|
132
124
|
f"REVOKE ALL ({quote(column)}) ON TABLE {quote(schema)}.{quote(table)} FROM PUBLIC"
|
|
133
125
|
)
|
|
134
|
-
owners = (
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
.all()
|
|
140
|
-
)
|
|
126
|
+
owners = connection.exec_driver_sql(
|
|
127
|
+
"SELECT DISTINCT r.rolname FROM pg_proc p JOIN pg_roles r ON r.oid=p.proowner "
|
|
128
|
+
"JOIN pg_namespace n ON n.oid=p.pronamespace WHERE " + USER_SCHEMA.format(schema="n.nspname")
|
|
129
|
+
+ " AND " + OWNED.format(owner="p.proowner")
|
|
130
|
+
).scalars().all()
|
|
141
131
|
owners = set(owners) | {
|
|
142
132
|
"mt_owner",
|
|
143
133
|
connection.exec_driver_sql("SELECT current_user").scalar(),
|
|
@@ -154,24 +144,17 @@ class PostgreSQLAccess(DatabaseAccess):
|
|
|
154
144
|
grantees = "PUBLIC, " + ", ".join(
|
|
155
145
|
quote(role) for role in sorted((set(managed_roles) | {invoker}) & existing)
|
|
156
146
|
)
|
|
157
|
-
|
|
158
|
-
for noun in ("FUNCTIONS", "PROCEDURES"):
|
|
159
|
-
connection.exec_driver_sql(
|
|
160
|
-
f"REVOKE ALL ON ALL {noun} IN SCHEMA {quote(schema)} FROM {grantees}"
|
|
161
|
-
)
|
|
162
|
-
if schema != "metatables":
|
|
163
|
-
connection.exec_driver_sql(
|
|
164
|
-
f"GRANT EXECUTE ON ALL {noun} IN SCHEMA {quote(schema)} TO {quote(invoker)}"
|
|
165
|
-
)
|
|
166
|
-
# Revoke elevated routines within the same transaction before publishing
|
|
167
|
-
# permissions. Batch schema grants avoid an objects-by-principals loop.
|
|
147
|
+
# Restricted callers never execute routines with elevated owner privileges.
|
|
168
148
|
routines = connection.exec_driver_sql(
|
|
169
|
-
"SELECT n.nspname, p.proname, pg_get_function_identity_arguments(p.oid), p.
|
|
149
|
+
"SELECT n.nspname, p.proname, pg_get_function_identity_arguments(p.oid), p.prosecdef "
|
|
150
|
+
"FROM pg_proc p JOIN pg_namespace n ON n.oid=p.pronamespace WHERE "
|
|
151
|
+
+ USER_SCHEMA.format(schema="n.nspname") + " AND " + OWNED.format(owner="p.proowner")
|
|
170
152
|
).all()
|
|
171
|
-
for schema, name, arguments,
|
|
172
|
-
noun = "PROCEDURE" if kind == "p" else "FUNCTION"
|
|
153
|
+
for schema, name, arguments, elevated in routines:
|
|
173
154
|
target = f"{quote(schema)}.{quote(name)}({arguments})"
|
|
174
|
-
connection.exec_driver_sql(f"REVOKE ALL ON
|
|
155
|
+
connection.exec_driver_sql(f"REVOKE ALL ON ROUTINE {target} FROM {grantees}")
|
|
156
|
+
if schema != "metatables" and not elevated:
|
|
157
|
+
connection.exec_driver_sql(f"GRANT EXECUTE ON ROUTINE {target} TO {quote(invoker)}")
|
|
175
158
|
|
|
176
159
|
def validate_table(self, connection, table):
|
|
177
160
|
schema = table.physical_schema or "public"
|
|
@@ -181,7 +164,7 @@ class PostgreSQLAccess(DatabaseAccess):
|
|
|
181
164
|
raise SQLExecutionError(code="catalog_table_registration_denied")
|
|
182
165
|
relation = f"{quote(schema)}.{quote(table.physical_table_name)}"
|
|
183
166
|
row = connection.execute(
|
|
184
|
-
text("SELECT oid, relkind FROM pg_class WHERE oid=to_regclass(:relation)"),
|
|
167
|
+
text("SELECT oid, relkind, " + OWNED.format(owner="relowner") + " AS owned FROM pg_class WHERE oid=to_regclass(:relation)"),
|
|
185
168
|
{"relation": relation},
|
|
186
169
|
).first()
|
|
187
170
|
if row is not None and row.relkind == "v":
|
|
@@ -205,7 +188,8 @@ class PostgreSQLAccess(DatabaseAccess):
|
|
|
205
188
|
),
|
|
206
189
|
{"oid": row.oid},
|
|
207
190
|
).first()
|
|
208
|
-
|
|
191
|
+
if row.owned:
|
|
192
|
+
connection.exec_driver_sql(f"REVOKE ALL ON TABLE {relation} FROM PUBLIC")
|
|
209
193
|
if table.management_mode == "platform_managed":
|
|
210
194
|
connection.exec_driver_sql(f"ALTER TABLE {relation} OWNER TO mt_owner")
|
|
211
195
|
return trigger is None
|
|
@@ -229,13 +213,7 @@ class PostgreSQLAccess(DatabaseAccess):
|
|
|
229
213
|
for name, definition in roles.items():
|
|
230
214
|
self._role(connection, name, self.password(name) if definition["login"] else None)
|
|
231
215
|
names = set(roles) | set(previous.get("roles", {})) | {invoker}
|
|
232
|
-
schemas = (
|
|
233
|
-
connection.exec_driver_sql(
|
|
234
|
-
"SELECT nspname FROM pg_namespace WHERE nspname !~ '^pg_' AND nspname <> 'information_schema'"
|
|
235
|
-
)
|
|
236
|
-
.scalars()
|
|
237
|
-
.all()
|
|
238
|
-
)
|
|
216
|
+
schemas = self.owned_schemas(connection)
|
|
239
217
|
for name in sorted(names):
|
|
240
218
|
owned = connection.execute(
|
|
241
219
|
text(
|
|
@@ -261,20 +239,25 @@ class PostgreSQLAccess(DatabaseAccess):
|
|
|
261
239
|
connection.exec_driver_sql(
|
|
262
240
|
f"REVOKE ALL ON DATABASE {quote(database)} FROM {quote(name)}"
|
|
263
241
|
)
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
)
|
|
242
|
+
# Revoke this role's grants on owned objects; other owners' grants are theirs.
|
|
243
|
+
granted = connection.execute(
|
|
244
|
+
text(
|
|
245
|
+
"SELECT 'SCHEMA', quote_ident(n.nspname) FROM pg_namespace n CROSS JOIN LATERAL aclexplode(n.nspacl) acl "
|
|
246
|
+
"JOIN pg_roles r ON r.oid=acl.grantee WHERE r.rolname=:name AND " + OWNED.format(owner="n.nspowner")
|
|
247
|
+
+ " UNION SELECT CASE WHEN c.relkind='S' THEN 'SEQUENCE' ELSE 'TABLE' END, "
|
|
248
|
+
"quote_ident(n.nspname) || '.' || quote_ident(c.relname) FROM pg_class c "
|
|
249
|
+
"JOIN pg_namespace n ON n.oid=c.relnamespace CROSS JOIN LATERAL aclexplode(c.relacl) acl "
|
|
250
|
+
"JOIN pg_roles r ON r.oid=acl.grantee WHERE r.rolname=:name AND " + OWNED.format(owner="c.relowner")
|
|
251
|
+
),
|
|
252
|
+
{"name": name},
|
|
253
|
+
).all()
|
|
254
|
+
for kind, target in granted:
|
|
255
|
+
connection.exec_driver_sql(f"REVOKE ALL ON {kind} {target} FROM {quote(name)}")
|
|
274
256
|
# Table-level REVOKE does not remove separately granted column ACLs.
|
|
275
257
|
columns = connection.execute(
|
|
276
258
|
text(
|
|
277
|
-
"SELECT n.nspname, c.relname, a.attname FROM pg_attribute a JOIN pg_class c ON c.oid=a.attrelid JOIN pg_namespace n ON n.oid=c.relnamespace CROSS JOIN LATERAL aclexplode(a.attacl) acl JOIN pg_roles r ON r.oid=acl.grantee WHERE r.rolname=:name AND n.nspname !~ '^pg_'"
|
|
259
|
+
"SELECT n.nspname, c.relname, a.attname FROM pg_attribute a JOIN pg_class c ON c.oid=a.attrelid JOIN pg_namespace n ON n.oid=c.relnamespace CROSS JOIN LATERAL aclexplode(a.attacl) acl JOIN pg_roles r ON r.oid=acl.grantee WHERE r.rolname=:name AND n.nspname !~ '^pg_' AND "
|
|
260
|
+
+ OWNED.format(owner="c.relowner")
|
|
278
261
|
),
|
|
279
262
|
{"name": name},
|
|
280
263
|
).all()
|
|
@@ -169,3 +169,22 @@ def test_securable_fresh_database_still_requires_migrations(tmp_path):
|
|
|
169
169
|
assert bootstrap.status == "migration_required" and bootstrap.error is None
|
|
170
170
|
finally:
|
|
171
171
|
bootstrap.close()
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def test_postgresql_prerequisites_name_only_what_metatables_needs():
|
|
175
|
+
from metatables.api.backend.backends.postgresql_access import PostgreSQLAccess
|
|
176
|
+
|
|
177
|
+
def check(row, schema="public"):
|
|
178
|
+
access = PostgreSQLAccess.__new__(PostgreSQLAccess)
|
|
179
|
+
access.source = SimpleNamespace(connection=SimpleNamespace(default_schema=schema))
|
|
180
|
+
connection = SimpleNamespace(execute=lambda *args: SimpleNamespace(one=lambda: row))
|
|
181
|
+
return access.prerequisite_problems(connection)
|
|
182
|
+
|
|
183
|
+
# A shared database qualifies: the login need not own it or anyone else's objects.
|
|
184
|
+
assert check(("metatables_dev", "development", True, True, None, True)) == []
|
|
185
|
+
assert check(("app", "shared", False, False, None, False), schema="tables") == [
|
|
186
|
+
"app lacks CREATEROLE",
|
|
187
|
+
'app cannot create schemas in database "shared"',
|
|
188
|
+
'app cannot create tables in schema "tables"',
|
|
189
|
+
]
|
|
190
|
+
assert check(("app", "shared", True, False, "someone", True)) == ['schema "metatables" belongs to someone']
|
|
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.dev16 → mainsequence_metatable-0.1.8.dev17}/api/metatables/main.py
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/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
|
{mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/openapi.json
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/api/overview.md
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/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.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/client/quickstart.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/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.dev16 → mainsequence_metatable-0.1.8.dev17}/docs/examples/README.md
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev17}/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
|