mainsequence-metatable 0.1.0__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.0/.agents/skills/client/metatables-meta-tables/SKILL.md +106 -0
- mainsequence_metatable-0.1.0/.agents/skills/client/metatables-migrations/SKILL.md +132 -0
- mainsequence_metatable-0.1.0/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +103 -0
- mainsequence_metatable-0.1.0/.mainsequence/workflows/metatables-api.yaml +10 -0
- mainsequence_metatable-0.1.0/LICENSE +21 -0
- mainsequence_metatable-0.1.0/MANIFEST.in +9 -0
- mainsequence_metatable-0.1.0/PKG-INFO +137 -0
- mainsequence_metatable-0.1.0/README.md +83 -0
- mainsequence_metatable-0.1.0/alembic.ini +3 -0
- mainsequence_metatable-0.1.0/api/__init__.py +3 -0
- mainsequence_metatable-0.1.0/api/app/__init__.py +0 -0
- mainsequence_metatable-0.1.0/api/app/auth/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/app/auth/boundary.py +104 -0
- mainsequence_metatable-0.1.0/api/app/auth/caller_assertions.py +39 -0
- mainsequence_metatable-0.1.0/api/app/auth/local_actor.py +55 -0
- mainsequence_metatable-0.1.0/api/app/bootstrap.py +607 -0
- mainsequence_metatable-0.1.0/api/app/configuration.py +37 -0
- mainsequence_metatable-0.1.0/api/app/credential_admin.py +107 -0
- mainsequence_metatable-0.1.0/api/app/development.py +175 -0
- mainsequence_metatable-0.1.0/api/app/development_client.py +59 -0
- mainsequence_metatable-0.1.0/api/app/main.py +201 -0
- mainsequence_metatable-0.1.0/api/app/platform_cache.py +61 -0
- mainsequence_metatable-0.1.0/api/app/routes/__init__.py +0 -0
- mainsequence_metatable-0.1.0/api/app/routes/application_migrations.py +170 -0
- mainsequence_metatable-0.1.0/api/app/routes/column_search.py +64 -0
- mainsequence_metatable-0.1.0/api/app/routes/contract_validation.py +84 -0
- mainsequence_metatable-0.1.0/api/app/routes/data_sources.py +428 -0
- mainsequence_metatable-0.1.0/api/app/routes/managed_finalize.py +244 -0
- mainsequence_metatable-0.1.0/api/app/routes/migration_connection.py +41 -0
- mainsequence_metatable-0.1.0/api/app/routes/namespaces.py +119 -0
- mainsequence_metatable-0.1.0/api/app/routes/run_logs.py +78 -0
- mainsequence_metatable-0.1.0/api/app/routes/runtime_context.py +122 -0
- mainsequence_metatable-0.1.0/api/app/routes/schema_graph.py +37 -0
- mainsequence_metatable-0.1.0/api/app/routes/security.py +267 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_cascade.py +155 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_crud.py +45 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_delete.py +161 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_filter.py +38 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_import.py +66 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_introspection.py +85 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_patch.py +155 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_registration.py +216 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_response.py +29 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_search_document.py +54 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_sql.py +167 -0
- mainsequence_metatable-0.1.0/api/app/routes/table_update_pipeline.py +31 -0
- mainsequence_metatable-0.1.0/api/app/routes/time_index_delete.py +136 -0
- mainsequence_metatable-0.1.0/api/app/routes/time_index_reads.py +183 -0
- mainsequence_metatable-0.1.0/api/app/routes/time_index_stats.py +51 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_batch.py +173 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_chunk_insert.py +147 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_constants.py +19 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_crud.py +280 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_details.py +141 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_graph.py +120 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_index_statistics.py +107 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_registration.py +92 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_runs.py +303 -0
- mainsequence_metatable-0.1.0/api/app/routes/update_statistics.py +77 -0
- mainsequence_metatable-0.1.0/api/app/runtime.py +317 -0
- mainsequence_metatable-0.1.0/api/app/runtime_control.py +154 -0
- mainsequence_metatable-0.1.0/api/app/source_passwords.py +43 -0
- mainsequence_metatable-0.1.0/api/app/source_registrations.py +216 -0
- mainsequence_metatable-0.1.0/api/backend/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/backends/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/backends/access.py +363 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/__init__.py +6 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/postgresql.py +2788 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/runtime.py +256 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/temporal.py +333 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/timescaledb.py +657 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/validation.py +10 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_cascade_delete.py +39 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_connection.py +103 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_introspection.py +128 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_table_delete.py +42 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_tables.py +245 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index.py +141 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_delete.py +140 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_queries.py +281 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_stats.py +89 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_write.py +185 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/source_validation.py +80 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/sqlite_connection.py +324 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/sqlite_introspection.py +135 -0
- mainsequence_metatable-0.1.0/api/backend/backends/adapters/table_cursor.py +14 -0
- mainsequence_metatable-0.1.0/api/backend/backends/catalog.py +288 -0
- mainsequence_metatable-0.1.0/api/backend/backends/catalog_ddl.py +126 -0
- mainsequence_metatable-0.1.0/api/backend/backends/catalog_types.py +32 -0
- mainsequence_metatable-0.1.0/api/backend/backends/contracts.py +322 -0
- mainsequence_metatable-0.1.0/api/backend/backends/hosted.py +495 -0
- mainsequence_metatable-0.1.0/api/backend/backends/hosted_access.py +378 -0
- mainsequence_metatable-0.1.0/api/backend/backends/native.py +105 -0
- mainsequence_metatable-0.1.0/api/backend/backends/operations.py +247 -0
- mainsequence_metatable-0.1.0/api/backend/backends/postgresql_access.py +302 -0
- mainsequence_metatable-0.1.0/api/backend/backends/registry.py +114 -0
- mainsequence_metatable-0.1.0/api/backend/backends/relation_tables.py +676 -0
- mainsequence_metatable-0.1.0/api/backend/backends/relational.py +804 -0
- mainsequence_metatable-0.1.0/api/backend/backends/restricted_sql.py +181 -0
- mainsequence_metatable-0.1.0/api/backend/backends/sqlite_access.py +129 -0
- mainsequence_metatable-0.1.0/api/backend/contracts/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/contracts/relation_import.py +82 -0
- mainsequence_metatable-0.1.0/api/backend/contracts/storage_layouts.py +287 -0
- mainsequence_metatable-0.1.0/api/backend/contracts/table_contracts.py +361 -0
- mainsequence_metatable-0.1.0/api/backend/contracts/values.py +77 -0
- mainsequence_metatable-0.1.0/api/backend/domain/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/domain/catalog_rules.py +161 -0
- mainsequence_metatable-0.1.0/api/backend/domain/data_source_rules.py +32 -0
- mainsequence_metatable-0.1.0/api/backend/domain/index_statistics.py +121 -0
- mainsequence_metatable-0.1.0/api/backend/domain/label_rules.py +32 -0
- mainsequence_metatable-0.1.0/api/backend/domain/permission_rules.py +18 -0
- mainsequence_metatable-0.1.0/api/backend/domain/update_constants.py +32 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/catalog_data_sources.py +166 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/credential_keys.py +172 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/credential_store.py +115 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/data_source_provider.py +46 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/local_credentials.py +192 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/local_workspace.py +178 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/platform_principals.py +32 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/run_logs.py +271 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/runtime_binding.py +65 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/runtime_data_sources.py +81 -0
- mainsequence_metatable-0.1.0/api/backend/integrations/source_validation.py +6 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/env.py +55 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/script.py.mako +25 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/0001_initial.py +522 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/0002_security_model.py +73 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/0003_run_log_capture.py +17 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/0004_historical_run_graphs.py +33 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/0005_database_access.py +40 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/0006_local_credentials.py +36 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/0007_external_relation_names.py +34 -0
- mainsequence_metatable-0.1.0/api/backend/migrations/versions/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/operations/__init__.py +0 -0
- mainsequence_metatable-0.1.0/api/backend/operations/bootstrap_migrations.py +275 -0
- mainsequence_metatable-0.1.0/api/backend/operations/catalog_schema.py +56 -0
- mainsequence_metatable-0.1.0/api/backend/operations/create_table.py +170 -0
- mainsequence_metatable-0.1.0/api/backend/operations/finalize_managed.py +108 -0
- mainsequence_metatable-0.1.0/api/backend/operations/import_relations.py +407 -0
- mainsequence_metatable-0.1.0/api/backend/operations/introspect_table.py +88 -0
- mainsequence_metatable-0.1.0/api/backend/operations/read_time_index.py +75 -0
- mainsequence_metatable-0.1.0/api/backend/operations/register_catalog.py +211 -0
- mainsequence_metatable-0.1.0/api/backend/operations/search_documents.py +65 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/cascade.py +40 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/catalog.py +176 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/database.py +59 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/grants.py +146 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/labels.py +171 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/locking.py +8 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/models.py +593 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/physical_operations.py +150 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/projections.py +146 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/run_graphs.py +287 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/schema_graph.py +136 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/sqlite_types.py +25 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/table_body_filter.py +297 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/table_queries.py +92 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/table_response.py +209 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/update_graph.py +106 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/update_pipeline.py +139 -0
- mainsequence_metatable-0.1.0/api/backend/persistence/updates.py +314 -0
- mainsequence_metatable-0.1.0/api/backend/presentation/data_source_summary.py +99 -0
- mainsequence_metatable-0.1.0/api/metatables/__init__.py +1 -0
- mainsequence_metatable-0.1.0/api/metatables/configuration.yaml +3 -0
- mainsequence_metatable-0.1.0/api/metatables/main.py +8 -0
- mainsequence_metatable-0.1.0/compose.database-tests.yml +75 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +634 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0002-application-administration-and-table-ownership.md +366 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0004-approved-application-migrations.md +57 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0005-run-logs-and-local-file-capture.md +237 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0006-historical-run-graphs.md +288 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0007-database-enforced-table-access.md +275 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0007-database-roles-and-privileges.svg +120 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0007-query-enforcement-path.svg +76 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0008-mysql-mssql-table-workflows.md +418 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0009-shared-credential-store.md +189 -0
- mainsequence_metatable-0.1.0/docs/adr/api/0010-import-external-tables-and-views.md +567 -0
- mainsequence_metatable-0.1.0/docs/adr/client/0003-api-endpoint-resolution.md +236 -0
- mainsequence_metatable-0.1.0/docs/adr/index.md +33 -0
- mainsequence_metatable-0.1.0/docs/api/authentication-and-errors.md +71 -0
- mainsequence_metatable-0.1.0/docs/api/data-sources.md +197 -0
- mainsequence_metatable-0.1.0/docs/api/openapi.json +9302 -0
- mainsequence_metatable-0.1.0/docs/api/overview.md +64 -0
- mainsequence_metatable-0.1.0/docs/api/reference.md +115 -0
- mainsequence_metatable-0.1.0/docs/api/tables-and-migrations.md +142 -0
- mainsequence_metatable-0.1.0/docs/api/time-index-and-updates.md +98 -0
- mainsequence_metatable-0.1.0/docs/assets/branding/metatables.svg +20 -0
- mainsequence_metatable-0.1.0/docs/client/build-an-updater.md +54 -0
- mainsequence_metatable-0.1.0/docs/client/define-and-migrate-tables.md +80 -0
- mainsequence_metatable-0.1.0/docs/client/installation-and-connection.md +127 -0
- mainsequence_metatable-0.1.0/docs/client/local-storage.md +15 -0
- mainsequence_metatable-0.1.0/docs/client/query-and-mutate.md +78 -0
- mainsequence_metatable-0.1.0/docs/client/quickstart.md +33 -0
- mainsequence_metatable-0.1.0/docs/client/read-existing-time-index-tables.md +32 -0
- mainsequence_metatable-0.1.0/docs/client/register-existing-tables.md +93 -0
- mainsequence_metatable-0.1.0/docs/client/tutorial.md +185 -0
- mainsequence_metatable-0.1.0/docs/concepts/architecture.md +90 -0
- mainsequence_metatable-0.1.0/docs/concepts/data-sources.md +162 -0
- mainsequence_metatable-0.1.0/docs/concepts/identity-and-scope.md +53 -0
- mainsequence_metatable-0.1.0/docs/concepts/permissions-namespaces-labels.md +37 -0
- mainsequence_metatable-0.1.0/docs/concepts/runs-and-execution-graphs.md +115 -0
- mainsequence_metatable-0.1.0/docs/concepts/table-contracts-and-lifecycle.md +58 -0
- mainsequence_metatable-0.1.0/docs/concepts/time-index-tables-and-updates.md +60 -0
- mainsequence_metatable-0.1.0/docs/contributing/architecture-and-boundaries.md +49 -0
- mainsequence_metatable-0.1.0/docs/contributing/database-backends.md +77 -0
- mainsequence_metatable-0.1.0/docs/contributing/documentation.md +75 -0
- mainsequence_metatable-0.1.0/docs/contributing/releasing.md +148 -0
- mainsequence_metatable-0.1.0/docs/contributing/testing.md +115 -0
- mainsequence_metatable-0.1.0/docs/examples/README.md +28 -0
- mainsequence_metatable-0.1.0/docs/examples/__init__.py +1 -0
- mainsequence_metatable-0.1.0/docs/examples/data_sources/README.md +27 -0
- mainsequence_metatable-0.1.0/docs/examples/data_sources/mssql.json +16 -0
- mainsequence_metatable-0.1.0/docs/examples/data_sources/mysql.json +16 -0
- mainsequence_metatable-0.1.0/docs/examples/data_sources/postgresql.json +15 -0
- mainsequence_metatable-0.1.0/docs/examples/data_sources/register.py +23 -0
- mainsequence_metatable-0.1.0/docs/examples/external_table.py +20 -0
- mainsequence_metatable-0.1.0/docs/examples/query.py +19 -0
- mainsequence_metatable-0.1.0/docs/examples/quickstart.py +17 -0
- mainsequence_metatable-0.1.0/docs/examples/reader.py +12 -0
- mainsequence_metatable-0.1.0/docs/examples/scripts/__init__.py +1 -0
- mainsequence_metatable-0.1.0/docs/examples/scripts/setup_metatables.py +42 -0
- mainsequence_metatable-0.1.0/docs/examples/tables.py +49 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/README.md +82 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/__init__.py +1 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/__main__.py +76 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/data/README.md +13 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +70 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/frames.py +48 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/__init__.py +29 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/env.py +6 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/registry.py +9 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/script.py.mako +28 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +81 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/operations.py +67 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/tables.py +114 -0
- mainsequence_metatable-0.1.0/docs/examples/tutorial/updaters.py +95 -0
- mainsequence_metatable-0.1.0/docs/examples/updater.py +42 -0
- mainsequence_metatable-0.1.0/docs/index.md +62 -0
- mainsequence_metatable-0.1.0/docs/operations/catalog-migrations.md +146 -0
- mainsequence_metatable-0.1.0/docs/operations/configuration.md +58 -0
- mainsequence_metatable-0.1.0/docs/operations/hosted-runtime.md +96 -0
- mainsequence_metatable-0.1.0/docs/operations/local-runtime.md +152 -0
- mainsequence_metatable-0.1.0/docs/operations/recovery-and-observability.md +60 -0
- mainsequence_metatable-0.1.0/docs/operations/run-history.md +128 -0
- mainsequence_metatable-0.1.0/docs/operations/run-logs.md +128 -0
- mainsequence_metatable-0.1.0/docs/reference/capabilities.md +298 -0
- mainsequence_metatable-0.1.0/docs/reference/cli.md +31 -0
- mainsequence_metatable-0.1.0/docs/reference/python.md +111 -0
- mainsequence_metatable-0.1.0/docs/security/index.md +172 -0
- mainsequence_metatable-0.1.0/docs/security/ownership-and-sharing.md +145 -0
- mainsequence_metatable-0.1.0/docs/security/permissions.md +105 -0
- mainsequence_metatable-0.1.0/examples/README.md +26 -0
- mainsequence_metatable-0.1.0/examples/__init__.py +1 -0
- mainsequence_metatable-0.1.0/examples/data_sources/README.md +25 -0
- mainsequence_metatable-0.1.0/examples/data_sources/mssql.json +16 -0
- mainsequence_metatable-0.1.0/examples/data_sources/mysql.json +16 -0
- mainsequence_metatable-0.1.0/examples/data_sources/postgresql.json +15 -0
- mainsequence_metatable-0.1.0/examples/data_sources/register.py +23 -0
- mainsequence_metatable-0.1.0/examples/external_table.py +20 -0
- mainsequence_metatable-0.1.0/examples/query.py +19 -0
- mainsequence_metatable-0.1.0/examples/quickstart.py +17 -0
- mainsequence_metatable-0.1.0/examples/reader.py +12 -0
- mainsequence_metatable-0.1.0/examples/scripts/__init__.py +1 -0
- mainsequence_metatable-0.1.0/examples/scripts/setup_metatables.py +42 -0
- mainsequence_metatable-0.1.0/examples/tables.py +49 -0
- mainsequence_metatable-0.1.0/examples/tutorial/README.md +80 -0
- mainsequence_metatable-0.1.0/examples/tutorial/__init__.py +1 -0
- mainsequence_metatable-0.1.0/examples/tutorial/__main__.py +76 -0
- mainsequence_metatable-0.1.0/examples/tutorial/data/README.md +11 -0
- mainsequence_metatable-0.1.0/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +70 -0
- mainsequence_metatable-0.1.0/examples/tutorial/frames.py +48 -0
- mainsequence_metatable-0.1.0/examples/tutorial/migrations/__init__.py +29 -0
- mainsequence_metatable-0.1.0/examples/tutorial/migrations/env.py +6 -0
- mainsequence_metatable-0.1.0/examples/tutorial/migrations/registry.py +9 -0
- mainsequence_metatable-0.1.0/examples/tutorial/migrations/script.py.mako +28 -0
- mainsequence_metatable-0.1.0/examples/tutorial/migrations/versions/__init__.py +0 -0
- mainsequence_metatable-0.1.0/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +81 -0
- mainsequence_metatable-0.1.0/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- mainsequence_metatable-0.1.0/examples/tutorial/operations.py +67 -0
- mainsequence_metatable-0.1.0/examples/tutorial/tables.py +114 -0
- mainsequence_metatable-0.1.0/examples/tutorial/updaters.py +95 -0
- mainsequence_metatable-0.1.0/examples/updater.py +42 -0
- mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/PKG-INFO +137 -0
- mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/SOURCES.txt +466 -0
- mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/dependency_links.txt +1 -0
- mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/entry_points.txt +2 -0
- mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/requires.txt +40 -0
- mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/top_level.txt +3 -0
- mainsequence_metatable-0.1.0/mkdocs.yml +75 -0
- mainsequence_metatable-0.1.0/pyproject.toml +130 -0
- mainsequence_metatable-0.1.0/scripts/__init__.py +0 -0
- mainsequence_metatable-0.1.0/scripts/build_package.py +30 -0
- mainsequence_metatable-0.1.0/scripts/build_reference.py +112 -0
- mainsequence_metatable-0.1.0/scripts/check_boundaries.py +132 -0
- mainsequence_metatable-0.1.0/scripts/check_client_api_coverage.py +108 -0
- mainsequence_metatable-0.1.0/scripts/check_distribution_sources.py +180 -0
- mainsequence_metatable-0.1.0/scripts/check_docs.py +47 -0
- mainsequence_metatable-0.1.0/scripts/check_examples_debug.py +164 -0
- mainsequence_metatable-0.1.0/scripts/check_project.py +22 -0
- mainsequence_metatable-0.1.0/scripts/dev_release_version.py +132 -0
- mainsequence_metatable-0.1.0/scripts/test_databases.py +136 -0
- mainsequence_metatable-0.1.0/scripts/test_postgresql.py +61 -0
- mainsequence_metatable-0.1.0/setup.cfg +4 -0
- mainsequence_metatable-0.1.0/src/metatables/__init__.py +202 -0
- mainsequence_metatable-0.1.0/src/metatables/_skill_bundle.py +49 -0
- mainsequence_metatable-0.1.0/src/metatables/cli/__init__.py +1 -0
- mainsequence_metatable-0.1.0/src/metatables/cli/app.py +444 -0
- mainsequence_metatable-0.1.0/src/metatables/cli/filters.py +144 -0
- mainsequence_metatable-0.1.0/src/metatables/cli/migrations.py +906 -0
- mainsequence_metatable-0.1.0/src/metatables/cli/skills.py +90 -0
- mainsequence_metatable-0.1.0/src/metatables/compiled_sql/__init__.py +5 -0
- mainsequence_metatable-0.1.0/src/metatables/compiled_sql/mssql.py +35 -0
- mainsequence_metatable-0.1.0/src/metatables/compiled_sql/v1.py +219 -0
- mainsequence_metatable-0.1.0/src/metatables/dtype_codec.py +460 -0
- mainsequence_metatable-0.1.0/src/metatables/endpoint.py +243 -0
- mainsequence_metatable-0.1.0/src/metatables/future_registry.py +28 -0
- mainsequence_metatable-0.1.0/src/metatables/hashing.py +173 -0
- mainsequence_metatable-0.1.0/src/metatables/instrumentation.py +5 -0
- mainsequence_metatable-0.1.0/src/metatables/local_run_logs.py +280 -0
- mainsequence_metatable-0.1.0/src/metatables/log_contract.py +112 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/__init__.py +1670 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/alembic.py +167 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/env.py +141 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/provider.py +25 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/registry.py +75 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/scaffold.py +221 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/templates/__init__.py +1 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/templates/env.py.mako +8 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/templates/script.py.mako +28 -0
- mainsequence_metatable-0.1.0/src/metatables/migrations/tls.py +23 -0
- mainsequence_metatable-0.1.0/src/metatables/models.py +4804 -0
- mainsequence_metatable-0.1.0/src/metatables/pydantic_metadata.py +99 -0
- mainsequence_metatable-0.1.0/src/metatables/run_logging.py +172 -0
- mainsequence_metatable-0.1.0/src/metatables/runtime_context.py +65 -0
- mainsequence_metatable-0.1.0/src/metatables/runtime_contract.py +61 -0
- mainsequence_metatable-0.1.0/src/metatables/schema_names.py +304 -0
- mainsequence_metatable-0.1.0/src/metatables/sdk_compat.py +34 -0
- mainsequence_metatable-0.1.0/src/metatables/sqlalchemy_contracts.py +1771 -0
- mainsequence_metatable-0.1.0/src/metatables/time_index_table_refs.py +290 -0
- mainsequence_metatable-0.1.0/src/metatables/transport.py +73 -0
- mainsequence_metatable-0.1.0/src/metatables/update_configuration_contract.py +79 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/__init__.py +27 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/configuration.py +546 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/dependencies.py +9 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/managers.py +813 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/namespacing.py +52 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/runner.py +919 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/updaters.py +792 -0
- mainsequence_metatable-0.1.0/src/metatables/updaters/utils.py +23 -0
- mainsequence_metatable-0.1.0/tests/auth/test_caller_assertions.py +60 -0
- mainsequence_metatable-0.1.0/tests/auth/test_data_source_identity.py +85 -0
- mainsequence_metatable-0.1.0/tests/auth/test_development_client.py +59 -0
- mainsequence_metatable-0.1.0/tests/auth/test_hosted_environment_target.py +77 -0
- mainsequence_metatable-0.1.0/tests/auth/test_local_mode.py +459 -0
- mainsequence_metatable-0.1.0/tests/auth/test_platform_fact_cache.py +183 -0
- mainsequence_metatable-0.1.0/tests/auth/test_runtime_bootstrap.py +557 -0
- mainsequence_metatable-0.1.0/tests/auth/test_runtime_scaffold.py +131 -0
- mainsequence_metatable-0.1.0/tests/auth/test_runtime_selection.py +315 -0
- mainsequence_metatable-0.1.0/tests/auth/test_runtime_storage_binding.py +301 -0
- mainsequence_metatable-0.1.0/tests/auth/test_source_passwords.py +36 -0
- mainsequence_metatable-0.1.0/tests/catalog/test_catalog_foundation.py +418 -0
- mainsequence_metatable-0.1.0/tests/catalog/test_contract_projection.py +148 -0
- mainsequence_metatable-0.1.0/tests/catalog/test_database_config.py +23 -0
- mainsequence_metatable-0.1.0/tests/catalog/test_index_statistics.py +55 -0
- mainsequence_metatable-0.1.0/tests/catalog/test_migration.py +331 -0
- mainsequence_metatable-0.1.0/tests/conftest.py +40 -0
- mainsequence_metatable-0.1.0/tests/contracts/capabilities.json +3230 -0
- mainsequence_metatable-0.1.0/tests/contracts/client_signatures.json +324 -0
- mainsequence_metatable-0.1.0/tests/contracts/database_operations.json +141 -0
- mainsequence_metatable-0.1.0/tests/contracts/test_relation_import.py +45 -0
- mainsequence_metatable-0.1.0/tests/contracts/test_storage_layouts.py +77 -0
- mainsequence_metatable-0.1.0/tests/contracts/test_table_contracts.py +124 -0
- mainsequence_metatable-0.1.0/tests/database_backend/Dockerfile +20 -0
- mainsequence_metatable-0.1.0/tests/database_backend/Dockerfile.dockerignore +17 -0
- mainsequence_metatable-0.1.0/tests/database_backend/__init__.py +1 -0
- mainsequence_metatable-0.1.0/tests/database_backend/conftest.py +236 -0
- mainsequence_metatable-0.1.0/tests/database_backend/provider/__init__.py +37 -0
- mainsequence_metatable-0.1.0/tests/database_backend/provider/env.py +4 -0
- mainsequence_metatable-0.1.0/tests/database_backend/provider/versions/0001_measurement.py +19 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_api_contract.py +169 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_application_migration.py +36 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_bootstrap_recovery.py +151 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_catalog_contract.py +199 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_credential_catalog.py +33 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_physical_contract.py +266 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_relation_import.py +390 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_runtime_bootstrap.py +146 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_sql_security.py +553 -0
- mainsequence_metatable-0.1.0/tests/database_backend/test_update_client.py +109 -0
- mainsequence_metatable-0.1.0/tests/database_operations/test_physical_operations.py +77 -0
- mainsequence_metatable-0.1.0/tests/database_operations/test_postgresql_operations.py +352 -0
- mainsequence_metatable-0.1.0/tests/database_operations/test_runtime_and_temporal.py +239 -0
- mainsequence_metatable-0.1.0/tests/documentation/test_project_checks.py +83 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_api_endpoint.py +320 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_catalog_outage.py +54 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_client_api_contract.py +264 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_client_api_coverage.py +8 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_client_migration_scaffold.py +64 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_client_migration_tls.py +30 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_client_package.py +141 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_client_signatures.py +36 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_client_value_behaviors.py +46 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_data_source_registry.py +408 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_local_actor_client_api.py +155 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_managed_finalize_client_api.py +248 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_namespaces_admin_http.py +149 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_public_imports.py +15 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_remaining_client_routes.py +322 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_run_graphs.py +246 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_run_logs.py +353 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_runtime_transition.py +177 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_sdk_local_startup.py +130 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_sqlite_runtime.py +506 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_delete_client_api.py +222 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_filter_client_api.py +135 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_introspection_client_api.py +137 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_patch_client_api.py +132 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_search_document_api.py +141 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_stats_api.py +135 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_update_pipeline.py +136 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_table_updates_http.py +183 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_time_index_delete_client_api.py +136 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_time_index_reads_client_api.py +152 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_update_batch_client_api.py +122 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_update_chunk_insert_client_api.py +129 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_update_dependency_priority_client_api.py +383 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_update_index_statistics_client_api.py +128 -0
- mainsequence_metatable-0.1.0/tests/e2e/test_update_registration_client_api.py +119 -0
- mainsequence_metatable-0.1.0/tests/examples/test_documented_examples.py +60 -0
- mainsequence_metatable-0.1.0/tests/examples/test_postgresql_examples.py +46 -0
- mainsequence_metatable-0.1.0/tests/examples/test_setup_launch.py +45 -0
- mainsequence_metatable-0.1.0/tests/examples/test_tutorial.py +226 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_credential_store.py +234 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_data_source_rules.py +44 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_local_data_sources.py +94 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_local_run_logs.py +178 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_connection.py +99 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_sql.py +19 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_tables.py +228 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_time_index_queries.py +184 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_source_validation.py +91 -0
- mainsequence_metatable-0.1.0/tests/integrations/test_sqlite_operations.py +264 -0
- mainsequence_metatable-0.1.0/tests/labels/test_labels.py +125 -0
- mainsequence_metatable-0.1.0/tests/operations/test_create_table_operation.py +184 -0
- mainsequence_metatable-0.1.0/tests/operations/test_create_table_postgres.py +147 -0
- mainsequence_metatable-0.1.0/tests/operations/test_physical_operation_journal.py +126 -0
- mainsequence_metatable-0.1.0/tests/operations/test_register_catalog.py +105 -0
- mainsequence_metatable-0.1.0/tests/operations/test_search_documents.py +30 -0
- mainsequence_metatable-0.1.0/tests/packaging/test_client_skills.py +121 -0
- mainsequence_metatable-0.1.0/tests/packaging/test_dev_release_version.py +104 -0
- mainsequence_metatable-0.1.0/tests/packaging/test_distribution_sources.py +131 -0
- mainsequence_metatable-0.1.0/tests/packaging/test_editable_build.py +55 -0
- mainsequence_metatable-0.1.0/tests/packaging/test_installed_distribution.py +122 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_governed_sql_scope.py +22 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_local_actor_membership.py +48 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_migration_boundary.py +19 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_namespace_grants.py +142 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_security_api.py +253 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_table_body_filter.py +97 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_table_grants.py +230 -0
- mainsequence_metatable-0.1.0/tests/permissions/test_table_queries.py +95 -0
- mainsequence_metatable-0.1.0/uv.lock +1883 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: metatables-meta-tables
|
|
3
|
+
description: "Author and query application tables through the installed MetaTables Python client. Covers SQLAlchemy contracts, external registration and governed SQL in consuming applications. Excludes client-library implementation, API/server changes and repository tooling."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MetaTables client contracts and queries
|
|
7
|
+
|
|
8
|
+
## Client scope
|
|
9
|
+
|
|
10
|
+
Apply this skill to applications that consume the installed `metatables` Python
|
|
11
|
+
client. It covers application-facing models and workflows. Client-library
|
|
12
|
+
implementation, this repository's development/release tooling, and API internals
|
|
13
|
+
have separate ownership.
|
|
14
|
+
|
|
15
|
+
In a copied skill, resolve the `docs/` and `examples/` paths below relative to
|
|
16
|
+
this skill's `references/` directory. The client CLI bundles the matching version's
|
|
17
|
+
guides and examples there, including their linked documents. In the MetaTables
|
|
18
|
+
source checkout, read the same paths from the repository root.
|
|
19
|
+
|
|
20
|
+
Use the installed `metatables` client. The API catalog resource, the client
|
|
21
|
+
resource model, and a SQLAlchemy authoring class have different responsibilities.
|
|
22
|
+
Read `docs/concepts/architecture.md` and
|
|
23
|
+
`docs/concepts/table-contracts-and-lifecycle.md` before choosing a workflow.
|
|
24
|
+
|
|
25
|
+
For actual endpoint support, consult `docs/reference/capabilities.md`. Do not
|
|
26
|
+
infer API support from the presence of an inherited client method. Platform
|
|
27
|
+
identity and Git source facts use SDK imports. Table operations use the client's automatic hosted discovery or an explicit
|
|
28
|
+
`METATABLES_API_URL`; the API selects the effective DataSource. See
|
|
29
|
+
`docs/client/installation-and-connection.md`. Local development runs the same API
|
|
30
|
+
with SQLite behind it; ordinary clients never open local table files. Local
|
|
31
|
+
workspaces use one SQLite database for system and user tables per checkout/branch.
|
|
32
|
+
Settings explicitly initializes or selects the runtime DataSource in both modes;
|
|
33
|
+
startup never runs Alembic. See `docs/operations/catalog-migrations.md`.
|
|
34
|
+
|
|
35
|
+
## Authoring decisions
|
|
36
|
+
|
|
37
|
+
Establish row meaning, ownership, DataSource, physical schema/name, namespace,
|
|
38
|
+
logical identifier, time grain if any, and foreign-key targets from the task and
|
|
39
|
+
existing models. Clarify only unresolved choices that materially change the
|
|
40
|
+
contract. Preserve the user's existing authorization and scope.
|
|
41
|
+
|
|
42
|
+
- Managed application tables use `PlatformManagedMetaTable` or
|
|
43
|
+
`PlatformTimeIndexMetaTable` and the migration-provider workflow. Use the
|
|
44
|
+
[migrations skill](../metatables-migrations/SKILL.md) for creation and
|
|
45
|
+
evolution.
|
|
46
|
+
- Existing externally owned tables use `register_external_sqlalchemy_model` with
|
|
47
|
+
their actual physical binding. Registration does not create the physical table;
|
|
48
|
+
see `docs/client/register-existing-tables.md` and `examples/external_table.py`.
|
|
49
|
+
- `backend_managed` is a separate low-level API provisioning intent. Do not use it
|
|
50
|
+
as a substitute for ordinary managed application-table migrations.
|
|
51
|
+
|
|
52
|
+
A UID is catalog identity. An optional identifier is unique in the connected catalog.
|
|
53
|
+
A physical binding is DataSource + schema + table name. A catalog
|
|
54
|
+
namespace groups resources and grants; it is not a SQL schema. Contract hashes
|
|
55
|
+
are fingerprints, not table identity. See `docs/concepts/identity-and-scope.md`.
|
|
56
|
+
|
|
57
|
+
## SQLAlchemy contract rules
|
|
58
|
+
|
|
59
|
+
Use `examples/tables.py` as the tested pattern. Declare an explicit
|
|
60
|
+
application-prefixed physical name with `schema_table_name(app, concept)`, a
|
|
61
|
+
stable logical identifier, and an intention-rich `__metatable_description__`.
|
|
62
|
+
Give columns useful `info={"label": ..., "description": ...}` metadata. Explain
|
|
63
|
+
row grain and downstream meaning rather than repeating types.
|
|
64
|
+
|
|
65
|
+
Keep foreign keys and indexes in SQLAlchemy metadata. Reference explicit physical
|
|
66
|
+
names using `ForeignKey`/`ForeignKeyConstraint`; do not ask users to hand-author
|
|
67
|
+
catalog target UIDs. Alembic renders physical DDL; catalog finalization introspects
|
|
68
|
+
it. The client column contract does not itself serialize all FK/index metadata.
|
|
69
|
+
|
|
70
|
+
For a `PlatformTimeIndexMetaTable`, declare time first in `__index_names__`, the
|
|
71
|
+
full observation grain, and a timezone-aware time column. Prefer `time_index` as
|
|
72
|
+
the time name for updater compatibility. The mixin automatically creates the
|
|
73
|
+
unique index for the full grain; add only additional lookup indexes. Declare
|
|
74
|
+
`__cadence__` when the stable observation interval is known.
|
|
75
|
+
|
|
76
|
+
Physical names remain stable across schema changes. Evolve through new Alembic
|
|
77
|
+
revisions; do not recompute identity from columns or rewrite applied history.
|
|
78
|
+
|
|
79
|
+
## Queries and mutations
|
|
80
|
+
|
|
81
|
+
Read `docs/client/query-and-mutate.md` and `examples/query.py`. Use
|
|
82
|
+
`compile_sqlalchemy_statement` with bound parameters and explicit catalog table
|
|
83
|
+
scope/access. Resolve registered physical names instead of guessing them from
|
|
84
|
+
identifiers. Use the documented expression subset and scopes for actual read/write targets.
|
|
85
|
+
Arbitrary DDL, system relations, multiple statements and indirect view/trigger
|
|
86
|
+
writes are unsupported by the governed SQL API.
|
|
87
|
+
|
|
88
|
+
Column search is supported. Description search, search-index refresh, and
|
|
89
|
+
legacy convenience sharing/label actions are not supported API workflows.
|
|
90
|
+
Use `get_access`, `set_access` and `revoke_access` for supported Reader/Writer
|
|
91
|
+
sharing. Labels can be changed through the documented table PATCH path. Authorization is
|
|
92
|
+
owned by the API catalog; see `docs/concepts/permissions-namespaces-labels.md`.
|
|
93
|
+
|
|
94
|
+
Updater output rollback uses `TimeIndexMetaTable.delete_after_date` with an
|
|
95
|
+
inclusive time cutoff and explicit dimension/coordinate scope when appropriate.
|
|
96
|
+
A null cutoff requires a scope. Do not replace that workflow with ad hoc SQL.
|
|
97
|
+
Deletion/cascade requires edit access, relevant protection checks, and explicit
|
|
98
|
+
cascade intent; it is not an administrator-role bypass or migration repair.
|
|
99
|
+
|
|
100
|
+
## Validation
|
|
101
|
+
|
|
102
|
+
Check authored models, normalization, physical naming, FK targets, and time grain
|
|
103
|
+
against the actual workflow. Run relevant behavior tests and the example tests.
|
|
104
|
+
State whether validation used local contracts, a disposable database, or a
|
|
105
|
+
configured service. Never claim an end-to-end deployment result from an import
|
|
106
|
+
check. Preserve published contracts unless the task authorizes their evolution.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: metatables-migrations
|
|
3
|
+
description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope, scaffolding, offline revisions, approved API-side execution, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MetaTables client application migrations
|
|
7
|
+
|
|
8
|
+
## Client scope
|
|
9
|
+
|
|
10
|
+
Apply this skill to applications that consume the installed `metatables` Python
|
|
11
|
+
client. It covers application-facing models and workflows. Client-library
|
|
12
|
+
implementation, this repository's development/release tooling, and API internals
|
|
13
|
+
have separate ownership.
|
|
14
|
+
|
|
15
|
+
In a copied skill, resolve the `docs/` and `examples/` paths below relative to
|
|
16
|
+
this skill's `references/` directory. The client CLI bundles the matching version's
|
|
17
|
+
guides and examples there, including their linked documents. In the MetaTables
|
|
18
|
+
source checkout, read the same paths from the repository root.
|
|
19
|
+
|
|
20
|
+
Read `docs/client/define-and-migrate-tables.md`,
|
|
21
|
+
`docs/concepts/table-contracts-and-lifecycle.md`, and the tested
|
|
22
|
+
`examples/tables.py`. Managed authoring is migration-first: define SQLAlchemy
|
|
23
|
+
models, select a provider, author a revision, then let the API apply it and
|
|
24
|
+
finalize the catalog bindings. Use the
|
|
25
|
+
[table skill](../metatables-meta-tables/SKILL.md) for contract design.
|
|
26
|
+
|
|
27
|
+
Check `docs/reference/capabilities.md` and `metatables migrations --help` before
|
|
28
|
+
promising a command. The API's own catalog migrations are a separate history that
|
|
29
|
+
an admin runs from Settings; see `docs/operations/catalog-migrations.md`. They
|
|
30
|
+
are not application-provider revisions.
|
|
31
|
+
|
|
32
|
+
## Source and runtime context
|
|
33
|
+
|
|
34
|
+
- The API selects its active runtime DataSource. Do not accept a caller-supplied
|
|
35
|
+
DataSource, database URL, revision path, or branch override.
|
|
36
|
+
- Git source facts come from the current checkout through the SDK. Do not ask the
|
|
37
|
+
user to choose a branch or environment for a migration.
|
|
38
|
+
- An explicit `METATABLES_API_URL` selects an API endpoint, not a branch or a
|
|
39
|
+
storage binding. See `docs/client/installation-and-connection.md`.
|
|
40
|
+
- Provider aliases are API deployment configuration, not Python import paths
|
|
41
|
+
supplied by a request.
|
|
42
|
+
|
|
43
|
+
## Author the migration
|
|
44
|
+
|
|
45
|
+
1. Define the SQLAlchemy models with stable, application-prefixed physical names.
|
|
46
|
+
2. Identify one provider module, migration namespace, target `MetaData`, model
|
|
47
|
+
registry, and prefixed Alembic version-table binding.
|
|
48
|
+
3. Keep provider scope explicit. Do not scan all imported models or installed
|
|
49
|
+
packages.
|
|
50
|
+
4. Scaffold only when the application has no provider yet:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
metatables migrations scaffold \
|
|
54
|
+
--package ledger \
|
|
55
|
+
--module ledger.migrations \
|
|
56
|
+
--namespace ledger \
|
|
57
|
+
--base ledger.tables:Base \
|
|
58
|
+
--metadata ledger.tables:Base.metadata
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
5. Edit the generated `registry.py` so it returns exactly the models owned by
|
|
62
|
+
that migration stream. Scaffolding alone selects no models and creates no
|
|
63
|
+
tables.
|
|
64
|
+
6. Create and review an offline Alembic revision:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
metatables migrations revision \
|
|
68
|
+
--provider ledger.migrations:migration \
|
|
69
|
+
--no-autogenerate \
|
|
70
|
+
--message "create ledger"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Use `--source-root` and `--code-repository-root` when the application does not
|
|
74
|
+
use the default `src/` layout. Keep applied revisions immutable; add a new
|
|
75
|
+
revision for every later schema change.
|
|
76
|
+
|
|
77
|
+
## Execute through the approved runtime
|
|
78
|
+
|
|
79
|
+
Client-side `current`, `upgrade`, `downgrade`, direct migration connections, and
|
|
80
|
+
database autogeneration are unsupported. `--sqlalchemy-url` does not bypass that
|
|
81
|
+
boundary.
|
|
82
|
+
|
|
83
|
+
The API applies a provider through `POST /application-migrations/upgrade/`, which
|
|
84
|
+
accepts only an alias listed in its `application_migration_providers`. The
|
|
85
|
+
deployment must already install the reviewed provider code. The API reserves the
|
|
86
|
+
provider's catalog rows, runs Alembic to the provider head, and finalizes the
|
|
87
|
+
physical bindings. The caller needs Writer access to every existing provider
|
|
88
|
+
table and cannot upload revisions, choose a database or target revision, or
|
|
89
|
+
downgrade. See `docs/api/tables-and-migrations.md`.
|
|
90
|
+
|
|
91
|
+
Use the application's tested setup entry point when one exists;
|
|
92
|
+
`examples/scripts/setup_metatables.py` and `docs/client/tutorial.md` show the
|
|
93
|
+
pattern. Do not replace it with direct model registration or an undocumented
|
|
94
|
+
request body.
|
|
95
|
+
|
|
96
|
+
## Lifecycle invariants
|
|
97
|
+
|
|
98
|
+
- Provider tables and the Alembic registry are `platform_managed` +
|
|
99
|
+
`alembic_managed`.
|
|
100
|
+
- Reservation precedes physical migration; reconciliation moves catalog rows
|
|
101
|
+
from `reserved` to `active`.
|
|
102
|
+
- The registry is the provider root and has no parent. Provider tables bind to
|
|
103
|
+
that registry.
|
|
104
|
+
- Physical identity is DataSource UID + physical schema + physical table name.
|
|
105
|
+
A logical identifier or contract hash does not replace it. See
|
|
106
|
+
`docs/concepts/identity-and-scope.md`.
|
|
107
|
+
- Repeated setup reuses compatible bindings and applied revision history.
|
|
108
|
+
- `.register()` is lifecycle plumbing, not the ordinary way to create an
|
|
109
|
+
application table. External registration cannot stand in for a managed
|
|
110
|
+
migration registry.
|
|
111
|
+
|
|
112
|
+
## Failure handling
|
|
113
|
+
|
|
114
|
+
Read `docs/operations/recovery-and-observability.md`.
|
|
115
|
+
|
|
116
|
+
- If provider loading fails, verify the import path, model registry, metadata,
|
|
117
|
+
version-table binding, and installed `metatables` version.
|
|
118
|
+
- If reservation fails, compare provider scope and physical identities before
|
|
119
|
+
changing code. Do not create a second catalog row for the same table.
|
|
120
|
+
- If Alembic succeeds but finalization fails, physical DDL may already be
|
|
121
|
+
committed. Inspect every per-table result and the actual schema before
|
|
122
|
+
retrying.
|
|
123
|
+
- Treat an uncertain journal outcome as reconciliation work. Do not blindly
|
|
124
|
+
retry, stamp, downgrade, cascade-delete, or register around it.
|
|
125
|
+
- Destructive catalog deletion is not migration recovery and never bypasses
|
|
126
|
+
schema-management protection.
|
|
127
|
+
|
|
128
|
+
## Validation
|
|
129
|
+
|
|
130
|
+
Verify provider scope, revision content, the approved-provider configuration,
|
|
131
|
+
repeat execution, and final active bindings. Report separately what was checked
|
|
132
|
+
offline and what was exercised against a configured API.
|
mainsequence_metatable-0.1.0/.agents/skills/client/metatables-time-index-table-updates/SKILL.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: metatables-time-index-table-updates
|
|
3
|
+
description: "Build or review TimeIndexTableUpdater producers, configuration hashing, dependencies, incremental frames and table readers in applications using the MetaTables Python client. Excludes client-library implementation, API routes, scheduling and runtime administration."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MetaTables client time-index producers
|
|
7
|
+
|
|
8
|
+
## Client scope
|
|
9
|
+
|
|
10
|
+
Apply this skill to applications that consume the installed `metatables` Python
|
|
11
|
+
client. It covers application-facing models and workflows. Client-library
|
|
12
|
+
implementation, this repository's development/release tooling, and API internals
|
|
13
|
+
have separate ownership.
|
|
14
|
+
|
|
15
|
+
In a copied skill, resolve the `docs/` and `examples/` paths below relative to
|
|
16
|
+
this skill's `references/` directory. The client CLI bundles the matching version's
|
|
17
|
+
guides and examples there, including their linked documents. In the MetaTables
|
|
18
|
+
source checkout, read the same paths from the repository root.
|
|
19
|
+
|
|
20
|
+
Read `docs/client/build-an-updater.md`,
|
|
21
|
+
`docs/concepts/time-index-tables-and-updates.md`, and the tested
|
|
22
|
+
`examples/updater.py`. Use `docs/client/read-existing-time-index-tables.md` and
|
|
23
|
+
`examples/reader.py` for consumers that only need existing output.
|
|
24
|
+
|
|
25
|
+
The storage contract is a `PlatformTimeIndexMetaTable` SQLAlchemy class. The
|
|
26
|
+
producer is a `TimeIndexTableUpdater`; the API record is `TimeIndexTableUpdate`.
|
|
27
|
+
Use the [table skill](../metatables-meta-tables/SKILL.md) for storage design and the
|
|
28
|
+
[migrations skill](../metatables-migrations/SKILL.md) for table evolution. API
|
|
29
|
+
route behavior is documented in `docs/api/time-index-and-updates.md` and supported
|
|
30
|
+
capabilities in `docs/reference/capabilities.md`.
|
|
31
|
+
|
|
32
|
+
## Establish the contract
|
|
33
|
+
|
|
34
|
+
Infer dataset meaning, time grain, identity dimensions, output columns, upstream
|
|
35
|
+
choices, first-run/backfill bounds, and whether identity must be preserved from
|
|
36
|
+
the task and existing code. Clarify only unresolved choices that change the
|
|
37
|
+
published contract. Keep storage description, namespace, identifier, cadence,
|
|
38
|
+
columns, and FK/index metadata on the authoring model, not the updater config.
|
|
39
|
+
Use intention-rich table and column descriptions; see `examples/tables.py`.
|
|
40
|
+
|
|
41
|
+
Migrate and bind the output class before constructing the producer. Pass explicit
|
|
42
|
+
`config` and `output_table`; do not create/register tables inside `update()`.
|
|
43
|
+
The optional `hash_namespace` separates producer identities, **not output tables**.
|
|
44
|
+
A test namespace alone does not protect shared physical rows. Use a disposable
|
|
45
|
+
output binding or explicitly authorized row scope for mutation tests.
|
|
46
|
+
|
|
47
|
+
## Configuration and dependencies
|
|
48
|
+
|
|
49
|
+
Use `TimeIndexTableUpdateConfig` with described `Field` values and realistic
|
|
50
|
+
examples where useful. Fields affect `update_hash` by default. Values that change
|
|
51
|
+
output, source selection, dependencies, or producer scope must stay hashed.
|
|
52
|
+
Keep implementation constants in `ClassVar` or runtime configuration. For a
|
|
53
|
+
strictly descriptive Pydantic field, the supported exclusion is
|
|
54
|
+
`json_schema_extra={"hash_excluded": True}`; do not invent alternate markers.
|
|
55
|
+
|
|
56
|
+
The client owns configuration version 2 serialization/validation. A configured
|
|
57
|
+
upstream authoring class hashes by its bound table UID and must already be bound.
|
|
58
|
+
`output_table` is a constructor contract, not an ordinary config field. Removed
|
|
59
|
+
configuration forms and `test_node` are unsupported; use explicit namespaces.
|
|
60
|
+
|
|
61
|
+
Declare a deterministic `dependencies()` mapping. Executable dependencies are
|
|
62
|
+
other updater instances; read-only dependencies are `TimeIndexTableRef` objects.
|
|
63
|
+
References contribute lineage and reads without executing a producer. Do not
|
|
64
|
+
construct a changing dependency graph inside `update()`.
|
|
65
|
+
|
|
66
|
+
## Incremental output
|
|
67
|
+
|
|
68
|
+
Use `UpdateStatistics` to determine the next interval, including a first-run
|
|
69
|
+
fallback. Return rows matching the bound storage contract and avoid full-history
|
|
70
|
+
writes unless the task explicitly needs them.
|
|
71
|
+
|
|
72
|
+
Every non-empty frame must put `time_index` first and use exactly
|
|
73
|
+
`datetime64[ns, UTC]` for that index level. Construct it explicitly with
|
|
74
|
+
`pd.DatetimeIndex(..., dtype="datetime64[ns, UTC]")`; timestamp normalization alone
|
|
75
|
+
can retain microsecond precision. For a MultiIndex, declare all dimension levels
|
|
76
|
+
in storage-grain order and keep payload columns separate.
|
|
77
|
+
|
|
78
|
+
The time-index mixin creates the unique index for the complete observation grain.
|
|
79
|
+
Do not duplicate it manually. Additional indexes and foreign keys belong in
|
|
80
|
+
SQLAlchemy/Alembic metadata and should use application-prefixed physical names.
|
|
81
|
+
Changing a table contract requires a new migration, not an updater config field.
|
|
82
|
+
|
|
83
|
+
## Tail repair
|
|
84
|
+
|
|
85
|
+
Use the documented `TimeIndexMetaTable.delete_after_date` workflow for updater
|
|
86
|
+
output rollback. The cutoff is inclusive. Supply `dimension_filters` to select
|
|
87
|
+
value sets or `index_coordinates` to select exact streams. A null cutoff requires
|
|
88
|
+
one of those scopes and deletes all rows only in that scope. An unscoped null
|
|
89
|
+
cutoff must fail. Do not replace this workflow with direct connections, SQL,
|
|
90
|
+
truncation, or private endpoints.
|
|
91
|
+
|
|
92
|
+
The API route is `/time-index-meta-tables/{uid}/delete-after-date/`; deployment
|
|
93
|
+
prefixes belong in `METATABLES_API_URL`. See `docs/client/query-and-mutate.md`.
|
|
94
|
+
|
|
95
|
+
## Review and verification
|
|
96
|
+
|
|
97
|
+
Check hashing effects, deterministic dependencies, incremental bounds, configured
|
|
98
|
+
output identity, time dtype, dimension order, columns, and tail-delete scope.
|
|
99
|
+
Use the relevant updater tests and executable example tests. Report what was
|
|
100
|
+
actually exercised: pure frame logic, disposable storage, or a configured API.
|
|
101
|
+
Do not claim a scheduling/release workflow from producer tests. If a published
|
|
102
|
+
contract decision remains unknown, resolve that decision while continuing any
|
|
103
|
+
independent authorized work.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MainSequence GmbH
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
include alembic.ini mkdocs.yml uv.lock compose.database-tests.yml
|
|
2
|
+
include .mainsequence/workflows/metatables-api.yaml
|
|
3
|
+
include api/metatables/configuration.yaml
|
|
4
|
+
recursive-include docs *.md *.json *.py *.csv *.mako *.svg
|
|
5
|
+
recursive-include examples *.md *.json *.py *.csv *.mako
|
|
6
|
+
recursive-include scripts *.py
|
|
7
|
+
recursive-include tests *.py *.json Dockerfile Dockerfile.dockerignore
|
|
8
|
+
graft .agents/skills/client
|
|
9
|
+
global-exclude __pycache__ *.py[cod]
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mainsequence-metatable
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Main Sequence MetaTables Python client and standalone API
|
|
5
|
+
Author-email: Main Sequence GmbH <dev@main-sequence.io>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/mainsequence-projects/MetaTables
|
|
8
|
+
Project-URL: Issues, https://github.com/mainsequence-projects/MetaTables/issues
|
|
9
|
+
Project-URL: Documentation, https://potential-doodle-wn39mnm.pages.github.io/
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Requires-Python: >=3.13
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: mainsequence[server]<9,>=8.1.25
|
|
18
|
+
Requires-Dist: alembic<2,>=1.18
|
|
19
|
+
Requires-Dist: cachetools
|
|
20
|
+
Requires-Dist: cryptography<51,>=46
|
|
21
|
+
Requires-Dist: fastapi<1,>=0.110
|
|
22
|
+
Requires-Dist: httpx<1,>=0.28
|
|
23
|
+
Requires-Dist: keyring<26,>=25
|
|
24
|
+
Requires-Dist: numpy
|
|
25
|
+
Requires-Dist: opentelemetry-api
|
|
26
|
+
Requires-Dist: opentelemetry-exporter-otlp
|
|
27
|
+
Requires-Dist: opentelemetry-sdk
|
|
28
|
+
Requires-Dist: pandas
|
|
29
|
+
Requires-Dist: psutil
|
|
30
|
+
Requires-Dist: psycopg2-binary<3,>=2.9
|
|
31
|
+
Requires-Dist: pyodbc<6,>=5
|
|
32
|
+
Requires-Dist: pydantic<3,>=2.11
|
|
33
|
+
Requires-Dist: pyyaml
|
|
34
|
+
Requires-Dist: requests>=2.33.0
|
|
35
|
+
Requires-Dist: sqlalchemy<3,>=2
|
|
36
|
+
Requires-Dist: psycopg[binary]<4,>=3.2
|
|
37
|
+
Requires-Dist: structlog
|
|
38
|
+
Requires-Dist: tqdm<5,>=4.66
|
|
39
|
+
Requires-Dist: typer<1,>=0.12
|
|
40
|
+
Requires-Dist: urllib3>=2.7.0
|
|
41
|
+
Requires-Dist: uvicorn==0.52.4
|
|
42
|
+
Provides-Extra: dev
|
|
43
|
+
Requires-Dist: pytest<10,>=8; extra == "dev"
|
|
44
|
+
Requires-Dist: ruff>=0.14; extra == "dev"
|
|
45
|
+
Requires-Dist: build<2,>=1; extra == "dev"
|
|
46
|
+
Requires-Dist: packaging>=24.2; extra == "dev"
|
|
47
|
+
Requires-Dist: twine<7,>=6; extra == "dev"
|
|
48
|
+
Provides-Extra: docs
|
|
49
|
+
Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
|
|
50
|
+
Provides-Extra: mysql
|
|
51
|
+
Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
|
|
52
|
+
Provides-Extra: mssql
|
|
53
|
+
Dynamic: license-file
|
|
54
|
+
|
|
55
|
+
<p align="center">
|
|
56
|
+
<img src="docs/assets/branding/metatables.svg" alt="MetaTables logo" width="80" height="80" />
|
|
57
|
+
</p>
|
|
58
|
+
<p align="center">
|
|
59
|
+
<picture>
|
|
60
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/branding/mainsequence-dark.png" />
|
|
61
|
+
<source media="(prefers-color-scheme: light)" srcset="docs/assets/branding/mainsequence-light.png" />
|
|
62
|
+
<img src="docs/assets/branding/mainsequence-light.png" alt="Main Sequence logo" width="280" />
|
|
63
|
+
</picture>
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
# MetaTables
|
|
67
|
+
|
|
68
|
+
MetaTables is a Python client and API for describing, registering, querying, and
|
|
69
|
+
updating database tables through a governed catalog.
|
|
70
|
+
|
|
71
|
+
Its PyPI distribution is `mainsequence-metatable`; imports and the command are
|
|
72
|
+
named `metatables`. See [publishing](docs/contributing/releasing.md) for the
|
|
73
|
+
release process and the current published SDK prerequisite.
|
|
74
|
+
|
|
75
|
+
The **Python client** provides SQLAlchemy table definitions, application-table
|
|
76
|
+
migrations, query objects, time-index readers and update processes,
|
|
77
|
+
and the `metatables` command. The **MetaTables API** stores table identities,
|
|
78
|
+
contracts, permissions, and update history, and executes authorized operations on
|
|
79
|
+
physical databases.
|
|
80
|
+
|
|
81
|
+
A catalog record describes a table; the table's rows live in its DataSource.
|
|
82
|
+
The Main Sequence SDK supplies platform authentication, identity, repository
|
|
83
|
+
context, and platform Secrets. MetaTables owns its table behavior and storage
|
|
84
|
+
adapters. Local development runs the same API with one SQLite database for system metadata and table rows. Initialize it explicitly
|
|
85
|
+
through Settings; startup never runs Alembic.
|
|
86
|
+
|
|
87
|
+
## Start here
|
|
88
|
+
|
|
89
|
+
- [Install and connect](docs/client/installation-and-connection.md), including the current local SDK prerequisite.
|
|
90
|
+
- [Understand the concepts](docs/concepts/architecture.md) and [identity and scope](docs/concepts/identity-and-scope.md).
|
|
91
|
+
- [Understand the security model](docs/security/index.md): administration, Reader/Writer table ownership, sharing, and implementation status.
|
|
92
|
+
- [Follow the market-data tutorial](docs/client/tutorial.md) with its complete examples folder.
|
|
93
|
+
- [Define and migrate managed tables](docs/client/define-and-migrate-tables.md).
|
|
94
|
+
- [Register existing tables](docs/client/register-existing-tables.md).
|
|
95
|
+
- [Manage DataSources](docs/concepts/data-sources.md): PostgreSQL, MySQL and MSSQL configuration, driver setup, examples and current operation limits.
|
|
96
|
+
- [Build an updater](docs/client/build-an-updater.md) or [read an existing time-index table](docs/client/read-existing-time-index-tables.md).
|
|
97
|
+
- [Run the API locally](docs/operations/local-runtime.md) or [operate a hosted API](docs/operations/hosted-runtime.md).
|
|
98
|
+
|
|
99
|
+
The [documentation index](docs/index.md) separates client, API, operations, and
|
|
100
|
+
contributor guides. The [capability reference](docs/reference/capabilities.md)
|
|
101
|
+
records implemented and unavailable operations, including inherited methods and
|
|
102
|
+
CLI commands. Runnable guide assets live in [examples](examples/README.md).
|
|
103
|
+
|
|
104
|
+
## Client skills
|
|
105
|
+
|
|
106
|
+
Copy the installed client's skills into a consuming application explicitly:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
metatables copy-metatables-skills --path /path/to/application
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The command uses the Main Sequence SDK helper, writes to
|
|
113
|
+
`.agents/skills/metatables/`, and records the client version. It works without
|
|
114
|
+
login or an API. Use `--dry-run` to preview the copy, or put global `--json` before
|
|
115
|
+
the command for structured output. See [installation](docs/client/installation-and-connection.md#copy-client-skills-into-an-application)
|
|
116
|
+
for refresh behavior and the bundled references.
|
|
117
|
+
|
|
118
|
+
## Development
|
|
119
|
+
|
|
120
|
+
Python 3.13 or newer is required. After installing the compatible local SDK:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
python -m pip install -e '.[dev,docs]'
|
|
124
|
+
python -m metatables.sdk_compat
|
|
125
|
+
python -m pytest -q
|
|
126
|
+
python -m scripts.check_project
|
|
127
|
+
mkdocs build --strict
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Physical PostgreSQL checks use explicitly configured disposable databases;
|
|
131
|
+
see [testing](docs/contributing/testing.md). No separate frontend is needed to
|
|
132
|
+
use the Python client or run the API.
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
MetaTables is licensed under the MIT License. See [LICENSE](LICENSE) for the
|
|
137
|
+
complete terms.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/branding/metatables.svg" alt="MetaTables logo" width="80" height="80" />
|
|
3
|
+
</p>
|
|
4
|
+
<p align="center">
|
|
5
|
+
<picture>
|
|
6
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/branding/mainsequence-dark.png" />
|
|
7
|
+
<source media="(prefers-color-scheme: light)" srcset="docs/assets/branding/mainsequence-light.png" />
|
|
8
|
+
<img src="docs/assets/branding/mainsequence-light.png" alt="Main Sequence logo" width="280" />
|
|
9
|
+
</picture>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
# MetaTables
|
|
13
|
+
|
|
14
|
+
MetaTables is a Python client and API for describing, registering, querying, and
|
|
15
|
+
updating database tables through a governed catalog.
|
|
16
|
+
|
|
17
|
+
Its PyPI distribution is `mainsequence-metatable`; imports and the command are
|
|
18
|
+
named `metatables`. See [publishing](docs/contributing/releasing.md) for the
|
|
19
|
+
release process and the current published SDK prerequisite.
|
|
20
|
+
|
|
21
|
+
The **Python client** provides SQLAlchemy table definitions, application-table
|
|
22
|
+
migrations, query objects, time-index readers and update processes,
|
|
23
|
+
and the `metatables` command. The **MetaTables API** stores table identities,
|
|
24
|
+
contracts, permissions, and update history, and executes authorized operations on
|
|
25
|
+
physical databases.
|
|
26
|
+
|
|
27
|
+
A catalog record describes a table; the table's rows live in its DataSource.
|
|
28
|
+
The Main Sequence SDK supplies platform authentication, identity, repository
|
|
29
|
+
context, and platform Secrets. MetaTables owns its table behavior and storage
|
|
30
|
+
adapters. Local development runs the same API with one SQLite database for system metadata and table rows. Initialize it explicitly
|
|
31
|
+
through Settings; startup never runs Alembic.
|
|
32
|
+
|
|
33
|
+
## Start here
|
|
34
|
+
|
|
35
|
+
- [Install and connect](docs/client/installation-and-connection.md), including the current local SDK prerequisite.
|
|
36
|
+
- [Understand the concepts](docs/concepts/architecture.md) and [identity and scope](docs/concepts/identity-and-scope.md).
|
|
37
|
+
- [Understand the security model](docs/security/index.md): administration, Reader/Writer table ownership, sharing, and implementation status.
|
|
38
|
+
- [Follow the market-data tutorial](docs/client/tutorial.md) with its complete examples folder.
|
|
39
|
+
- [Define and migrate managed tables](docs/client/define-and-migrate-tables.md).
|
|
40
|
+
- [Register existing tables](docs/client/register-existing-tables.md).
|
|
41
|
+
- [Manage DataSources](docs/concepts/data-sources.md): PostgreSQL, MySQL and MSSQL configuration, driver setup, examples and current operation limits.
|
|
42
|
+
- [Build an updater](docs/client/build-an-updater.md) or [read an existing time-index table](docs/client/read-existing-time-index-tables.md).
|
|
43
|
+
- [Run the API locally](docs/operations/local-runtime.md) or [operate a hosted API](docs/operations/hosted-runtime.md).
|
|
44
|
+
|
|
45
|
+
The [documentation index](docs/index.md) separates client, API, operations, and
|
|
46
|
+
contributor guides. The [capability reference](docs/reference/capabilities.md)
|
|
47
|
+
records implemented and unavailable operations, including inherited methods and
|
|
48
|
+
CLI commands. Runnable guide assets live in [examples](examples/README.md).
|
|
49
|
+
|
|
50
|
+
## Client skills
|
|
51
|
+
|
|
52
|
+
Copy the installed client's skills into a consuming application explicitly:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
metatables copy-metatables-skills --path /path/to/application
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The command uses the Main Sequence SDK helper, writes to
|
|
59
|
+
`.agents/skills/metatables/`, and records the client version. It works without
|
|
60
|
+
login or an API. Use `--dry-run` to preview the copy, or put global `--json` before
|
|
61
|
+
the command for structured output. See [installation](docs/client/installation-and-connection.md#copy-client-skills-into-an-application)
|
|
62
|
+
for refresh behavior and the bundled references.
|
|
63
|
+
|
|
64
|
+
## Development
|
|
65
|
+
|
|
66
|
+
Python 3.13 or newer is required. After installing the compatible local SDK:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
python -m pip install -e '.[dev,docs]'
|
|
70
|
+
python -m metatables.sdk_compat
|
|
71
|
+
python -m pytest -q
|
|
72
|
+
python -m scripts.check_project
|
|
73
|
+
mkdocs build --strict
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Physical PostgreSQL checks use explicitly configured disposable databases;
|
|
77
|
+
see [testing](docs/contributing/testing.md). No separate frontend is needed to
|
|
78
|
+
use the Python client or run the API.
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
MetaTables is licensed under the MIT License. See [LICENSE](LICENSE) for the
|
|
83
|
+
complete terms.
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Inbound FastAPI caller authentication."""
|