mainsequence-metatable 0.1.11.dev22__tar.gz → 0.1.12__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.11.dev22 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-local-development/SKILL.md +6 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-migrations/SKILL.md +6 -0
- {mainsequence_metatable-0.1.11.dev22/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.12}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +6 -2
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/installation-and-connection.md +5 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/operations/local-runtime.md +17 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/SOURCES.txt +1 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_registration.py +3 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +8 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +16 -7
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/connection.py +4 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/env.py +13 -4
- mainsequence_metatable-0.1.12/src/metatables/migrations/sqlite.py +82 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/capabilities.json +1 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_sqlite_operations.py +96 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/packaging/test_client_skills.py +3 -2
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/uv.lock +1 -1
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/LICENSE +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/adr/index.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/openapi.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/deploy-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/bootstrap.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/main.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/runtime.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/operations/search_documents.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_runtime_transition.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/tests/permissions/test_table_queries.py +0 -0
|
@@ -145,7 +145,12 @@ existing database just to obtain a clean test run.
|
|
|
145
145
|
SQLite verifies portable application behavior, not PostgreSQL/MySQL/MSSQL-specific
|
|
146
146
|
SQL, Timescale features, database roles or every concurrency behavior. Report that
|
|
147
147
|
limit and use the intended engine in an isolated test database when the task
|
|
148
|
-
requires those checks.
|
|
148
|
+
requires those checks. Application models keep their hosted column types: a
|
|
149
|
+
PostgreSQL `JSONB` column runs as JSON, and `Numeric` runs as a SQLite number exact
|
|
150
|
+
to about 15 significant digits, the precision the client's float64 frames carry on
|
|
151
|
+
every engine. Unsigned 64-bit integers and arrays are rejected, naming the column.
|
|
152
|
+
Revisions need no SQLite variants: column and constraint changes run through Alembic
|
|
153
|
+
batch mode. Only raw PostgreSQL SQL must check `op.get_bind().dialect.name`. Do not use the shared environment database as the default
|
|
149
154
|
integration-test fixture.
|
|
150
155
|
|
|
151
156
|
## Finish verification and switch back
|
|
@@ -154,6 +154,12 @@ The global `--local` selects the running project's API connection; inspect runti
|
|
|
154
154
|
status because Admin can switch that API to Hosted. Upgrade/downgrade accept
|
|
155
155
|
Alembic targets. Use `--no-autogenerate` for offline revision authoring.
|
|
156
156
|
|
|
157
|
+
Write each revision once, for the hosted engine. On local SQLite, MetaTables runs
|
|
158
|
+
column and constraint changes through Alembic batch mode, generated revisions use
|
|
159
|
+
batch blocks, `JSONB` runs as JSON, and `postgresql_where` predicates also apply to
|
|
160
|
+
SQLite. Raw PostgreSQL SQL, such as `ctid`, `::` casts or `jsonb_*` functions, must
|
|
161
|
+
branch on `op.get_bind().dialect.name`.
|
|
162
|
+
|
|
157
163
|
The client imports and executes application revisions, using the connection
|
|
158
164
|
resolved for the selected environment. Environment operators supply the database
|
|
159
165
|
login's DDL privileges. MetaTables does not mint migration roles or sandbox DDL.
|
|
@@ -732,8 +732,12 @@ Both SQLite catalog mutations and table writes use explicit `BEGIN IMMEDIATE`
|
|
|
732
732
|
transactions with foreign-key enforcement and a 30-second connection busy timeout.
|
|
733
733
|
Bounded physical operations select a 5-second lock timeout. The
|
|
734
734
|
catalog uses WAL. Application DDL uses the same Alembic reservation/finalization
|
|
735
|
-
workflow as PostgreSQL. SQLite rejects named schemas,
|
|
736
|
-
|
|
735
|
+
workflow as PostgreSQL. SQLite rejects named schemas, unsigned 64-bit integer,
|
|
736
|
+
array, and specialized index contracts, naming the column or index. PostgreSQL
|
|
737
|
+
JSONB is stored as JSON, and NUMERIC as SQLite numbers exact to about 15
|
|
738
|
+
significant digits, the precision the client's float64 frames already carry.
|
|
739
|
+
Revisions written for PostgreSQL run unchanged: column and constraint changes use
|
|
740
|
+
Alembic batch mode, with foreign keys checked before commit.
|
|
737
741
|
Timestamps require UTC offsets and preserve microseconds; finer precision is
|
|
738
742
|
rejected rather than truncated. UUID coordinate filters use the same contract
|
|
739
743
|
conversion for reads and deletes.
|
|
@@ -93,6 +93,11 @@ guide/example snapshots in each skill's `references/` folder. The installed clie
|
|
|
93
93
|
version is recorded in `PINNED_FROM.txt`. Skills for API implementation or
|
|
94
94
|
MetaTables project development are outside this bundle.
|
|
95
95
|
|
|
96
|
+
Running the command again replaces the whole `metatables` namespace: folders the
|
|
97
|
+
installed client does not ship, including any added there, are removed. Keep the
|
|
98
|
+
application's own skills in another `.agents/skills/` namespace; the copy never
|
|
99
|
+
changes it.
|
|
100
|
+
|
|
96
101
|
Use `metatables-upgrade-legacy-app` when replacing older MainSequence/MetaTables
|
|
97
102
|
imports, declared SQL scopes or API-owned application migration setup. The
|
|
98
103
|
[legacy application upgrade guide](upgrade-legacy-app.md) explains the current
|
|
@@ -144,6 +144,23 @@ updates and governed SQL within its dialect. PostgreSQL-specific SQL, database r
|
|
|
144
144
|
Timescale hypertables and policies are unavailable. Select expressions and writes must
|
|
145
145
|
use the API-advertised dialect; SQL is not translated between engines.
|
|
146
146
|
|
|
147
|
+
Application models keep their hosted column types. A PostgreSQL `JSONB` column is
|
|
148
|
+
created and decoded as JSON. `Numeric` columns are SQLite numbers, exact to about 15
|
|
149
|
+
significant digits; reads return `Decimal`, and the client's frames carry them as
|
|
150
|
+
float64 on every engine. Unsigned 64-bit integers and arrays have no SQLite type:
|
|
151
|
+
registration rejects them with `unsupported_sqlite_type`, naming the table and
|
|
152
|
+
column.
|
|
153
|
+
|
|
154
|
+
Application revisions written for PostgreSQL run unchanged. SQLite cannot alter
|
|
155
|
+
columns or constraints in place, so the migration environment runs `alter_column`,
|
|
156
|
+
`add_column`, `drop_column` and constraint operations through Alembic batch mode,
|
|
157
|
+
which copies the table and swaps it in. Foreign keys are not enforced while the
|
|
158
|
+
revisions run; `PRAGMA foreign_key_check` runs before commit and rolls back every
|
|
159
|
+
revision if a key dangles. A `postgresql_where` predicate also becomes the SQLite
|
|
160
|
+
partial-index predicate. Generated revisions use batch blocks, which PostgreSQL
|
|
161
|
+
applies as plain `ALTER` statements. Raw PostgreSQL SQL, such as `ctid`, `::` casts
|
|
162
|
+
or `jsonb_*` functions, must branch on `op.get_bind().dialect.name`.
|
|
163
|
+
|
|
147
164
|
The SQLite adapter shares the request's transaction for catalog and physical work.
|
|
148
165
|
Physical savepoints preserve rollback semantics and avoid two writers competing for
|
|
149
166
|
the same file. Application migration connections are blocked; see the
|
|
@@ -392,6 +392,7 @@ src/metatables/migrations/provider.py
|
|
|
392
392
|
src/metatables/migrations/registry.py
|
|
393
393
|
src/metatables/migrations/runner.py
|
|
394
394
|
src/metatables/migrations/scaffold.py
|
|
395
|
+
src/metatables/migrations/sqlite.py
|
|
395
396
|
src/metatables/migrations/tls.py
|
|
396
397
|
src/metatables/migrations/templates/__init__.py
|
|
397
398
|
src/metatables/migrations/templates/env.py.mako
|
|
@@ -161,7 +161,9 @@ def _registration(payload, *, indexed, actor, session, sources, creator, introsp
|
|
|
161
161
|
def _failure(session, exc):
|
|
162
162
|
session.rollback()
|
|
163
163
|
if isinstance(exc, DataSourceAdmissionError):
|
|
164
|
-
|
|
164
|
+
# Contract rejections name the offending column or index, as contract validation does.
|
|
165
|
+
detail = exc.code if exc.field == "data_source" else {"code": exc.code, "field": exc.field, "message": str(exc)}
|
|
166
|
+
raise HTTPException(exc.status_code, detail) from exc
|
|
165
167
|
if isinstance(exc, (DataSourceIntegrationError, PhysicalConnectionUnavailable, PhysicalTableOutcomeUnknown, SQLAlchemyError)):
|
|
166
168
|
raise HTTPException(503, 'Catalog or DataSource is unavailable.') from exc
|
|
167
169
|
raise HTTPException(409 if isinstance(exc, (PhysicalTableError, PhysicalIntrospectionError, TimescaleError)) else 422,
|
|
@@ -12,6 +12,7 @@ import time
|
|
|
12
12
|
from collections import namedtuple
|
|
13
13
|
from contextlib import contextmanager
|
|
14
14
|
from datetime import date, datetime, timezone
|
|
15
|
+
from decimal import Decimal
|
|
15
16
|
from uuid import UUID
|
|
16
17
|
|
|
17
18
|
from psycopg2 import sql
|
|
@@ -63,6 +64,11 @@ def bind_value(value):
|
|
|
63
64
|
return json.dumps(value.adapted, separators=(",", ":"), allow_nan=False)
|
|
64
65
|
if isinstance(value, (dict, list)):
|
|
65
66
|
return json.dumps(value, separators=(",", ":"), allow_nan=False)
|
|
67
|
+
if isinstance(value, Decimal):
|
|
68
|
+
# SQLite stores NUMERIC as INTEGER or REAL; keep integral values exact.
|
|
69
|
+
if value == value.to_integral_value() and -(2**63) <= value < 2**63:
|
|
70
|
+
return int(value)
|
|
71
|
+
return float(value)
|
|
66
72
|
return value
|
|
67
73
|
|
|
68
74
|
|
|
@@ -178,6 +184,8 @@ def register_converters():
|
|
|
178
184
|
sqlite3.register_converter("BOOLEAN", lambda v: v == b"1")
|
|
179
185
|
sqlite3.register_converter("JSON", lambda v: json.loads(v.decode()))
|
|
180
186
|
sqlite3.register_converter("DATE", lambda v: date.fromisoformat(v.decode()))
|
|
187
|
+
sqlite3.register_converter("NUMERIC", lambda v: Decimal(v.decode()))
|
|
188
|
+
sqlite3.register_converter("DECIMAL", lambda v: Decimal(v.decode()))
|
|
181
189
|
|
|
182
190
|
|
|
183
191
|
@contextmanager
|
|
@@ -41,7 +41,9 @@ def introspect_sqlite_table(*, source, physical_schema, physical_table_name):
|
|
|
41
41
|
"INTEGER": "int64",
|
|
42
42
|
"JSON": "json",
|
|
43
43
|
"DATE": "date",
|
|
44
|
-
|
|
44
|
+
"NUMERIC": "numeric",
|
|
45
|
+
"DECIMAL": "numeric",
|
|
46
|
+
}.get(backend.split("(", 1)[0].strip(), "string")
|
|
45
47
|
columns.append(
|
|
46
48
|
{
|
|
47
49
|
"name": item["name"],
|
|
@@ -118,20 +120,27 @@ def validate_sqlite_contract(contract):
|
|
|
118
120
|
"""Reject unsupported DDL before reserving catalog state or opening a store."""
|
|
119
121
|
from metatables.api.backend.domain.data_source_rules import DataSourceAdmissionError
|
|
120
122
|
|
|
121
|
-
|
|
123
|
+
physical = contract.get("physical") or {}
|
|
124
|
+
normalize_schema(physical.get("schema"))
|
|
125
|
+
table = physical.get("table_name") or "the table"
|
|
126
|
+
# JSONB is stored as JSON and NUMERIC as SQLite numbers (about 15 significant
|
|
127
|
+
# digits, the precision the client's float64 frames already carry).
|
|
122
128
|
for column in contract.get("columns", []):
|
|
123
129
|
kind = str(column.get("data_type", "")).lower()
|
|
124
130
|
backend = str(column.get("backend_type") or "").lower()
|
|
125
|
-
if kind
|
|
126
|
-
t in backend for t in ("numeric", "decimal", "[]", "jsonb")
|
|
127
|
-
):
|
|
131
|
+
if kind == "uint64" or "[]" in backend:
|
|
128
132
|
raise DataSourceAdmissionError(
|
|
129
133
|
"unsupported_sqlite_type",
|
|
130
|
-
"
|
|
134
|
+
f"Column {column.get('name')!r} of {table} is {column.get('backend_type') or kind}; "
|
|
135
|
+
"SQLite has no unsigned 64-bit integer or array type.",
|
|
131
136
|
status_code=409,
|
|
137
|
+
field=f"table_contract.columns.{column.get('name')}",
|
|
132
138
|
)
|
|
133
139
|
for index in contract.get("indexes", []):
|
|
134
140
|
if index.get("method") not in (None, "", "btree") or index.get("expression"):
|
|
135
141
|
raise DataSourceAdmissionError(
|
|
136
|
-
"unsupported_sqlite_index",
|
|
142
|
+
"unsupported_sqlite_index",
|
|
143
|
+
f"Index {index.get('name')!r} of {table} is not a column index; SQLite supports column indexes only.",
|
|
144
|
+
status_code=409,
|
|
145
|
+
field=f"table_contract.indexes.{index.get('name')}",
|
|
137
146
|
)
|
|
@@ -6,6 +6,7 @@ from sqlalchemy import create_engine, event
|
|
|
6
6
|
from sqlalchemy.engine import make_url
|
|
7
7
|
from sqlalchemy.pool import NullPool
|
|
8
8
|
|
|
9
|
+
from . import sqlite as _sqlite # noqa: F401 Registers SQLite DDL and batch rules.
|
|
9
10
|
from .tls import migration_tls_arguments
|
|
10
11
|
|
|
11
12
|
|
|
@@ -42,7 +43,9 @@ def migration_engine(config):
|
|
|
42
43
|
@event.listens_for(engine, "connect")
|
|
43
44
|
def sqlite_connect(connection, _record):
|
|
44
45
|
connection.isolation_level = None
|
|
45
|
-
|
|
46
|
+
# Batch rebuilds drop and recreate referenced tables; the
|
|
47
|
+
# environment runs PRAGMA foreign_key_check before commit.
|
|
48
|
+
connection.execute("PRAGMA foreign_keys = OFF")
|
|
46
49
|
connection.execute("PRAGMA busy_timeout = 30000")
|
|
47
50
|
|
|
48
51
|
@event.listens_for(engine, "begin")
|
|
@@ -15,6 +15,7 @@ def run_mainsequence_alembic_env(
|
|
|
15
15
|
|
|
16
16
|
from metatables.migrations import apply_mainsequence_migration_role
|
|
17
17
|
from metatables.migrations.connection import migration_engine
|
|
18
|
+
from metatables.migrations.sqlite import AUTO_BATCH_OPTION, check_foreign_keys
|
|
18
19
|
|
|
19
20
|
def migration_provider() -> Any:
|
|
20
21
|
provider = context.config.attributes.get("mainsequence_migration_provider")
|
|
@@ -78,8 +79,18 @@ def run_mainsequence_alembic_env(
|
|
|
78
79
|
"include_object": include_object,
|
|
79
80
|
"compare_type": True,
|
|
80
81
|
"compare_server_default": True,
|
|
82
|
+
# Generated revisions alter tables in batch blocks: plain ALTERs on
|
|
83
|
+
# PostgreSQL, copy-and-swap on the local SQLite runtime.
|
|
84
|
+
"render_as_batch": True,
|
|
85
|
+
AUTO_BATCH_OPTION: connection is not None and connection.dialect.name == "sqlite",
|
|
81
86
|
}
|
|
82
87
|
|
|
88
|
+
def run(connection) -> None:
|
|
89
|
+
with context.begin_transaction():
|
|
90
|
+
context.run_migrations()
|
|
91
|
+
if connection.dialect.name == "sqlite":
|
|
92
|
+
check_foreign_keys(connection)
|
|
93
|
+
|
|
83
94
|
def run_migrations_offline() -> None:
|
|
84
95
|
context.configure(
|
|
85
96
|
url=context.config.get_main_option("sqlalchemy.url"),
|
|
@@ -95,16 +106,14 @@ def run_mainsequence_alembic_env(
|
|
|
95
106
|
if connection is not None:
|
|
96
107
|
apply_mainsequence_migration_role(connection, config)
|
|
97
108
|
context.configure(connection=connection, **configure_kwargs(connection))
|
|
98
|
-
|
|
99
|
-
context.run_migrations()
|
|
109
|
+
run(connection)
|
|
100
110
|
return
|
|
101
111
|
|
|
102
112
|
config.attributes.setdefault("mainsequence_migration_provider", migration_provider())
|
|
103
113
|
with migration_engine(config) as engine, engine.connect() as connection:
|
|
104
114
|
apply_mainsequence_migration_role(connection, config)
|
|
105
115
|
context.configure(connection=connection, **configure_kwargs(connection))
|
|
106
|
-
|
|
107
|
-
context.run_migrations()
|
|
116
|
+
run(connection)
|
|
108
117
|
|
|
109
118
|
if context.is_offline_mode():
|
|
110
119
|
run_migrations_offline()
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Run application revisions written for PostgreSQL on the local SQLite runtime.
|
|
2
|
+
|
|
3
|
+
SQLite cannot alter columns or constraints in place. Inside the MetaTables
|
|
4
|
+
Alembic environment, those operations run through Alembic batch mode (copy the
|
|
5
|
+
table, then swap it in), so revisions need no SQLite-specific code. PostgreSQL
|
|
6
|
+
and other dialects keep Alembic's own implementations.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from alembic.operations import BatchOperations, Operations, ops
|
|
12
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
|
13
|
+
from sqlalchemy.ext.compiler import compiles
|
|
14
|
+
|
|
15
|
+
AUTO_BATCH_OPTION = "metatables_sqlite_auto_batch"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@compiles(JSONB, "sqlite")
|
|
19
|
+
def _sqlite_jsonb(_type, _compiler, **_kw):
|
|
20
|
+
# Applications declare PostgreSQL JSONB; the local runtime stores and
|
|
21
|
+
# decodes it as JSON, so models and reflected columns compare equal.
|
|
22
|
+
return "JSON"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _table(operation):
|
|
26
|
+
if isinstance(operation, ops.CreateForeignKeyOp):
|
|
27
|
+
return operation.source_table, operation.kw.get("source_schema")
|
|
28
|
+
return operation.table_name, operation.schema
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _batched(default):
|
|
32
|
+
def run(operations, operation):
|
|
33
|
+
if (
|
|
34
|
+
isinstance(operations, BatchOperations)
|
|
35
|
+
or not operations.migration_context.opts.get(AUTO_BATCH_OPTION)
|
|
36
|
+
):
|
|
37
|
+
return default(operations, operation)
|
|
38
|
+
connection = operations.migration_context.connection
|
|
39
|
+
if connection.exec_driver_sql("PRAGMA foreign_keys").scalar():
|
|
40
|
+
# Rebuilding a parent table with enforcement on deletes or rejects
|
|
41
|
+
# its children; the environment checks every key after migrating.
|
|
42
|
+
raise RuntimeError("SQLite batch migrations require foreign_keys=OFF.")
|
|
43
|
+
name, schema = _table(operation)
|
|
44
|
+
with operations.batch_alter_table(name, schema=None if schema == "public" else schema) as batch:
|
|
45
|
+
batch.invoke(operation)
|
|
46
|
+
|
|
47
|
+
return run
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _partial_index(default):
|
|
51
|
+
def run(operations, operation):
|
|
52
|
+
# Portable predicates such as "status = 'active'" keep the index partial.
|
|
53
|
+
if operations.migration_context.opts.get(AUTO_BATCH_OPTION):
|
|
54
|
+
kw = operation.kw
|
|
55
|
+
if "postgresql_where" in kw and "sqlite_where" not in kw:
|
|
56
|
+
kw["sqlite_where"] = kw["postgresql_where"]
|
|
57
|
+
return default(operations, operation)
|
|
58
|
+
|
|
59
|
+
return run
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
for _operation in (
|
|
63
|
+
ops.AlterColumnOp,
|
|
64
|
+
ops.AddColumnOp,
|
|
65
|
+
ops.DropColumnOp,
|
|
66
|
+
ops.AddConstraintOp,
|
|
67
|
+
ops.DropConstraintOp,
|
|
68
|
+
):
|
|
69
|
+
Operations._to_impl.dispatch_for(_operation, qualifier="sqlite")(
|
|
70
|
+
_batched(Operations._to_impl.dispatch(_operation))
|
|
71
|
+
)
|
|
72
|
+
Operations._to_impl.dispatch_for(ops.CreateIndexOp, qualifier="sqlite")(
|
|
73
|
+
_partial_index(Operations._to_impl.dispatch(ops.CreateIndexOp))
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def check_foreign_keys(connection) -> None:
|
|
78
|
+
"""Fail the migration transaction when a revision left a dangling key."""
|
|
79
|
+
violations = connection.exec_driver_sql("PRAGMA foreign_key_check").fetchall()
|
|
80
|
+
if violations:
|
|
81
|
+
tables = sorted({str(row[0]) for row in violations})
|
|
82
|
+
raise RuntimeError(f"Migration left foreign-key violations in: {', '.join(tables)}.")
|
|
@@ -2854,7 +2854,7 @@
|
|
|
2854
2854
|
"hidden": false,
|
|
2855
2855
|
"note": "Offline client skill copying delegated to the SDK scaffold helper; bundles matching guide/example resources, supports dry-run and global JSON output, and records the installed version.",
|
|
2856
2856
|
"tests": [
|
|
2857
|
-
"tests/packaging/test_client_skills.py::
|
|
2857
|
+
"tests/packaging/test_client_skills.py::test_copy_and_refresh_replace_only_the_metatables_namespace_with_portable_references",
|
|
2858
2858
|
"tests/packaging/test_client_skills.py::test_dry_run_reports_version_and_destinations_without_creating_project",
|
|
2859
2859
|
"tests/packaging/test_installed_distribution.py::test_client_skills_copy_from_installed_bundle_outside_checkout"
|
|
2860
2860
|
]
|
|
@@ -103,12 +103,107 @@ def test_serialized_writers_and_failed_replacement_preserve_existing_rows(sqlite
|
|
|
103
103
|
def test_sqlite_rejects_unrepresentable_contracts_before_effects():
|
|
104
104
|
for contract in (
|
|
105
105
|
{"physical": {"schema": "analytics"}},
|
|
106
|
-
{"columns": [{"name": "
|
|
106
|
+
{"columns": [{"name": "unsigned", "data_type": "uint64"}]},
|
|
107
107
|
{"columns": [{"name": "array", "backend_type": "INTEGER[]"}]},
|
|
108
108
|
{"indexes": [{"name": "special", "method": "gin"}]},
|
|
109
109
|
):
|
|
110
110
|
with pytest.raises(DataSourceAdmissionError):
|
|
111
111
|
validate_sqlite_contract(contract)
|
|
112
|
+
with pytest.raises(DataSourceAdmissionError) as rejected:
|
|
113
|
+
validate_sqlite_contract({"physical": {"table_name": "positions"},
|
|
114
|
+
"columns": [{"name": "lots", "backend_type": "INTEGER[]"}]})
|
|
115
|
+
assert rejected.value.field == "table_contract.columns.lots"
|
|
116
|
+
assert "'lots'" in str(rejected.value) and "positions" in str(rejected.value)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def test_sqlite_runs_postgresql_jsonb_as_json_and_numeric_as_numbers(sqlite_source):
|
|
120
|
+
source, engine = sqlite_source
|
|
121
|
+
from decimal import Decimal
|
|
122
|
+
|
|
123
|
+
from alembic.autogenerate import compare_metadata
|
|
124
|
+
from alembic.migration import MigrationContext
|
|
125
|
+
from sqlalchemy import Column, Integer, MetaData, Numeric, Table
|
|
126
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
|
127
|
+
|
|
128
|
+
import metatables.migrations.sqlite # noqa: F401 Registers the SQLite JSONB rule.
|
|
129
|
+
from metatables.api.backend.backends.adapters.sqlite_introspection import (
|
|
130
|
+
introspect_sqlite_table,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
columns = [{"name": "payload", "data_type": "jsonb", "backend_type": "JSONB"},
|
|
134
|
+
{"name": "amount", "data_type": "numeric", "backend_type": "NUMERIC(38, 18)"}]
|
|
135
|
+
validate_sqlite_contract({"columns": columns})
|
|
136
|
+
metadata = MetaData()
|
|
137
|
+
Table("typed_numbers", metadata, Column("id", Integer, primary_key=True),
|
|
138
|
+
Column("payload", JSONB()), Column("amount", Numeric(38, 18)))
|
|
139
|
+
with engine.begin() as connection:
|
|
140
|
+
metadata.create_all(connection)
|
|
141
|
+
context = MigrationContext.configure(connection, opts={
|
|
142
|
+
"compare_type": True,
|
|
143
|
+
"include_name": lambda name, kind, _parents: kind != "table" or name == "typed_numbers",
|
|
144
|
+
})
|
|
145
|
+
assert compare_metadata(context, metadata) == []
|
|
146
|
+
snapshot = introspect_sqlite_table(source=source, physical_schema="public",
|
|
147
|
+
physical_table_name="typed_numbers")
|
|
148
|
+
assert {c["name"]: (c["data_type"], c["backend_type"]) for c in snapshot["columns"]} == {
|
|
149
|
+
"id": ("int64", "INTEGER"), "payload": ("json", "JSON"), "amount": ("numeric", "NUMERIC(38, 18)")}
|
|
150
|
+
inserted = execute_fixture_sql(
|
|
151
|
+
source=source,
|
|
152
|
+
operation="insert",
|
|
153
|
+
sql_text="INSERT INTO typed_numbers (id, payload, amount) VALUES (1, :payload, :amount), (2, NULL, :whole) RETURNING *",
|
|
154
|
+
parameters={"payload": {"nodes": [0.5, 1]}, "amount": Decimal("1234.000125"), "whole": Decimal("100")},
|
|
155
|
+
)["rows"]
|
|
156
|
+
assert inserted[0]["payload"] == {"nodes": [0.5, 1]}
|
|
157
|
+
assert Decimal(str(inserted[0]["amount"])) == Decimal("1234.000125")
|
|
158
|
+
selected = execute_fixture_sql(source=source, sql_text="SELECT id FROM typed_numbers WHERE amount > :limit ORDER BY amount",
|
|
159
|
+
parameters={"limit": Decimal("99.5")})["rows"]
|
|
160
|
+
assert [row["id"] for row in selected] == [2, 1]
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def test_postgresql_style_alter_revisions_run_through_sqlite_batch_mode(tmp_path):
|
|
164
|
+
from alembic.migration import MigrationContext
|
|
165
|
+
from alembic.operations import Operations
|
|
166
|
+
from sqlalchemy import Column, Integer, String, event, text
|
|
167
|
+
|
|
168
|
+
from metatables.migrations.sqlite import AUTO_BATCH_OPTION, check_foreign_keys
|
|
169
|
+
|
|
170
|
+
engine = create_engine(f"sqlite:///{tmp_path / 'batch.sqlite'}")
|
|
171
|
+
event.listen(engine, "connect", lambda raw, _record: raw.execute("PRAGMA foreign_keys = OFF"))
|
|
172
|
+
with engine.begin() as connection:
|
|
173
|
+
connection.exec_driver_sql("CREATE TABLE parent (id INTEGER PRIMARY KEY, code TEXT)")
|
|
174
|
+
connection.exec_driver_sql("CREATE TABLE child (id INTEGER PRIMARY KEY, parent_id INTEGER, "
|
|
175
|
+
"CONSTRAINT fk_child_parent FOREIGN KEY (parent_id) REFERENCES parent (id) ON DELETE CASCADE)")
|
|
176
|
+
connection.exec_driver_sql("INSERT INTO parent VALUES (1, 'a'), (2, 'b')")
|
|
177
|
+
connection.exec_driver_sql("INSERT INTO child VALUES (10, 1), (11, 2)")
|
|
178
|
+
op = Operations(MigrationContext.configure(connection, opts={AUTO_BATCH_OPTION: True}))
|
|
179
|
+
# The same calls a PostgreSQL revision makes; none of them is native SQLite DDL.
|
|
180
|
+
op.add_column("parent", Column("status", String(), nullable=True))
|
|
181
|
+
op.alter_column("parent", "code", existing_type=String(), nullable=False)
|
|
182
|
+
op.create_unique_constraint("uq_parent_code", "parent", ["code"])
|
|
183
|
+
op.drop_constraint("fk_child_parent", "child", type_="foreignkey")
|
|
184
|
+
op.create_foreign_key("fk_child_parent_restrict", "child", "parent", ["parent_id"], ["id"])
|
|
185
|
+
op.alter_column("child", "parent_id", existing_type=Integer(), nullable=False)
|
|
186
|
+
op.create_index("ix_parent_active", "parent", ["status"], unique=True,
|
|
187
|
+
postgresql_where=text("status = 'active'"))
|
|
188
|
+
check_foreign_keys(connection)
|
|
189
|
+
inspector = inspect(connection)
|
|
190
|
+
assert [fk["name"] for fk in inspector.get_foreign_keys("child")] == ["fk_child_parent_restrict"]
|
|
191
|
+
assert [c["nullable"] for c in inspector.get_columns("child") if c["name"] == "parent_id"] == [False]
|
|
192
|
+
assert [u["name"] for u in inspector.get_unique_constraints("parent")] == ["uq_parent_code"]
|
|
193
|
+
index = next(i for i in inspector.get_indexes("parent") if i["name"] == "ix_parent_active")
|
|
194
|
+
assert str(index["dialect_options"]["sqlite_where"]) == "status = 'active'"
|
|
195
|
+
# Rebuilding the parent kept every child row instead of cascading.
|
|
196
|
+
assert connection.exec_driver_sql("SELECT id, parent_id FROM child ORDER BY id").all() == [(10, 1), (11, 2)]
|
|
197
|
+
connection.exec_driver_sql("INSERT INTO child VALUES (12, 99)")
|
|
198
|
+
with pytest.raises(RuntimeError, match="child"):
|
|
199
|
+
check_foreign_keys(connection)
|
|
200
|
+
connection.exec_driver_sql("DELETE FROM child WHERE id = 12")
|
|
201
|
+
with engine.connect() as connection:
|
|
202
|
+
connection.exec_driver_sql("PRAGMA foreign_keys = ON")
|
|
203
|
+
with pytest.raises(RuntimeError, match="foreign_keys=OFF"):
|
|
204
|
+
Operations(MigrationContext.configure(connection, opts={AUTO_BATCH_OPTION: True})).add_column(
|
|
205
|
+
"parent", Column("note", String()))
|
|
206
|
+
engine.dispose()
|
|
112
207
|
|
|
113
208
|
|
|
114
209
|
def test_sub_microsecond_timestamps_fail_before_serialization():
|
|
@@ -46,7 +46,7 @@ def test_dry_run_reports_version_and_destinations_without_creating_project(tmp_p
|
|
|
46
46
|
assert not project.exists()
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
def
|
|
49
|
+
def test_copy_and_refresh_replace_only_the_metatables_namespace_with_portable_references(tmp_path, monkeypatch):
|
|
50
50
|
monkeypatch.chdir(tmp_path)
|
|
51
51
|
unrelated = tmp_path / ".agents/skills/mainsequence/custom/SKILL.md"
|
|
52
52
|
unrelated.parent.mkdir(parents=True)
|
|
@@ -64,7 +64,8 @@ def test_copy_and_refresh_preserve_other_namespaces_and_deliver_portable_referen
|
|
|
64
64
|
assert second.exit_code == 0, second.output
|
|
65
65
|
assert not stale.exists()
|
|
66
66
|
assert unrelated.read_text() == "consumer instructions"
|
|
67
|
-
|
|
67
|
+
# The SDK owns the whole namespace: folders the client does not ship are removed.
|
|
68
|
+
assert not custom.parent.exists()
|
|
68
69
|
pin = (bundle / "PINNED_FROM.txt").read_text()
|
|
69
70
|
assert f"pinned_version={version('mainsequence-metatable')}" in pin
|
|
70
71
|
assert "library_name=mainsequence-metatable" in pin
|
|
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.11.dev22 → mainsequence_metatable-0.1.12}/api/metatables/main.py
RENAMED
|
File without changes
|
{mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/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
|
|
File without changes
|
{mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/api/data-sources.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
|
{mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/local-storage.md
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence_metatable-0.1.11.dev22 → mainsequence_metatable-0.1.12}/docs/client/quickstart.md
RENAMED
|
File without changes
|
|
File without changes
|