mainsequence-metatable 0.1.15.dev27__tar.gz → 0.1.16.dev28__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.
Files changed (535) hide show
  1. {mainsequence_metatable-0.1.15.dev27/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.16.dev28}/PKG-INFO +1 -1
  2. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/pyproject.toml +1 -1
  3. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  4. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/mainsequence_metatable.egg-info/SOURCES.txt +1 -0
  5. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/bootstrap.py +16 -9
  6. mainsequence_metatable-0.1.16.dev28/src/metatables/api/app/error_logging.py +41 -0
  7. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/main.py +14 -2
  8. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/data_sources.py +12 -12
  9. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/managed_finalize.py +6 -0
  10. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/run_logs.py +2 -2
  11. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/runtime_context.py +9 -0
  12. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/security.py +4 -4
  13. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_delete.py +5 -0
  14. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_import.py +9 -9
  15. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_introspection.py +1 -1
  16. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_sql.py +1 -1
  17. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/runtime.py +4 -0
  18. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/runtime_control.py +5 -5
  19. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/runtime_database.py +2 -2
  20. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/source_passwords.py +5 -2
  21. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/access.py +2 -2
  22. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +12 -10
  23. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +2 -2
  24. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +4 -0
  25. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +4 -4
  26. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +2 -2
  27. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +2 -2
  28. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +4 -4
  29. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +4 -4
  30. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +2 -2
  31. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +3 -3
  32. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +1 -1
  33. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +2 -2
  34. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +3 -3
  35. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/source_validation.py +4 -4
  36. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +4 -4
  37. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +2 -2
  38. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/catalog.py +2 -2
  39. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/hosted_access.py +2 -2
  40. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/postgresql_access.py +6 -2
  41. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/registry.py +2 -2
  42. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/relation_tables.py +20 -15
  43. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/relational.py +18 -15
  44. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/restricted_sql.py +6 -2
  45. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/timescale.py +10 -5
  46. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/catalog_data_sources.py +2 -2
  47. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/credential_keys.py +14 -14
  48. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/credential_store.py +6 -6
  49. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/local_credentials.py +12 -8
  50. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/platform_principals.py +6 -2
  51. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/run_logs.py +12 -6
  52. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/runtime_binding.py +2 -2
  53. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/import_relations.py +7 -2
  54. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/admin_install.py +5 -5
  55. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/app.py +11 -7
  56. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/local.py +2 -2
  57. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/project.py +2 -2
  58. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/local_connection.py +2 -2
  59. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/local_files.py +2 -2
  60. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/log_contract.py +7 -4
  61. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/models.py +1 -1
  62. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/run_logging.py +5 -0
  63. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/transfer_contract.py +4 -0
  64. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/runner.py +2 -2
  65. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/updaters.py +2 -1
  66. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_catalog_outage.py +5 -1
  67. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/uv.lock +1 -1
  68. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  69. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  70. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  71. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  72. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  73. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/.mainsequence/workflows/metatables-api.yaml +0 -0
  74. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/LICENSE +0 -0
  75. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/MANIFEST.in +0 -0
  76. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/README.md +0 -0
  77. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/alembic.ini +0 -0
  78. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/api/metatables/main.py +0 -0
  79. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/compose.database-tests.yml +0 -0
  80. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  81. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  82. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  83. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  84. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  85. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  86. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  87. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  88. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  89. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0009-shared-credential-store.md +0 -0
  90. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  91. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  92. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  93. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  94. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  95. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  96. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  97. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/adr/index.md +0 -0
  98. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/api/authentication-and-errors.md +0 -0
  99. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/api/data-sources.md +0 -0
  100. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/api/openapi.json +0 -0
  101. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/api/overview.md +0 -0
  102. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/api/reference.md +0 -0
  103. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/api/tables-and-migrations.md +0 -0
  104. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/api/time-index-and-updates.md +0 -0
  105. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/assets/branding/metatables.svg +0 -0
  106. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/assets/diagrams/local-client-experience.svg +0 -0
  107. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/bounded-transfers.md +0 -0
  108. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/build-an-updater.md +0 -0
  109. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/define-and-migrate-tables.md +0 -0
  110. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/deploy-application-migrations.md +0 -0
  111. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/installation-and-connection.md +0 -0
  112. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/local-storage.md +0 -0
  113. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/query-and-mutate.md +0 -0
  114. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/quickstart.md +0 -0
  115. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/read-existing-time-index-tables.md +0 -0
  116. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/register-existing-tables.md +0 -0
  117. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/tutorial.md +0 -0
  118. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/client/upgrade-legacy-app.md +0 -0
  119. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/concepts/architecture.md +0 -0
  120. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/concepts/data-sources.md +0 -0
  121. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/concepts/identity-and-scope.md +0 -0
  122. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/concepts/permissions-namespaces-labels.md +0 -0
  123. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/concepts/runs-and-execution-graphs.md +0 -0
  124. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  125. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/concepts/time-index-tables-and-updates.md +0 -0
  126. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/contributing/architecture-and-boundaries.md +0 -0
  127. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/contributing/database-backends.md +0 -0
  128. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/contributing/documentation.md +0 -0
  129. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/contributing/releasing.md +0 -0
  130. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/contributing/testing.md +0 -0
  131. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/README.md +0 -0
  132. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/__init__.py +0 -0
  133. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/bounded_reader.py +0 -0
  134. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/data_sources/README.md +0 -0
  135. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/data_sources/mssql.json +0 -0
  136. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/data_sources/mysql.json +0 -0
  137. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/data_sources/postgresql.json +0 -0
  138. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/data_sources/register.py +0 -0
  139. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/external_table.py +0 -0
  140. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/README.md +0 -0
  141. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/__init__.py +0 -0
  142. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/__main__.py +0 -0
  143. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/migrations/__init__.py +0 -0
  144. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/migrations/env.py +0 -0
  145. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/migrations/script.py.mako +0 -0
  146. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  147. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/local_app/tables.py +0 -0
  148. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/query.py +0 -0
  149. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/quickstart.py +0 -0
  150. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/reader.py +0 -0
  151. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/scripts/__init__.py +0 -0
  152. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/scripts/setup_metatables.py +0 -0
  153. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tables.py +0 -0
  154. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/README.md +0 -0
  155. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/__init__.py +0 -0
  156. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/__main__.py +0 -0
  157. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/data/README.md +0 -0
  158. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  159. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/frames.py +0 -0
  160. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/__init__.py +0 -0
  161. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/env.py +0 -0
  162. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/registry.py +0 -0
  163. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  164. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  165. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  166. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  167. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  168. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/operations.py +0 -0
  169. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/tables.py +0 -0
  170. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/tutorial/updaters.py +0 -0
  171. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/examples/updater.py +0 -0
  172. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/index.md +0 -0
  173. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/operations/catalog-migrations.md +0 -0
  174. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/operations/configuration.md +0 -0
  175. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/operations/hosted-runtime.md +0 -0
  176. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/operations/local-runtime.md +0 -0
  177. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/operations/recovery-and-observability.md +0 -0
  178. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/operations/run-history.md +0 -0
  179. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/operations/run-logs.md +0 -0
  180. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/reference/capabilities.md +0 -0
  181. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/reference/cli.md +0 -0
  182. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/reference/python.md +0 -0
  183. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/security/index.md +0 -0
  184. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/security/ownership-and-sharing.md +0 -0
  185. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/docs/security/permissions.md +0 -0
  186. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/mkdocs.yml +0 -0
  187. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/__init__.py +0 -0
  188. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/build_reference.py +0 -0
  189. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/check_boundaries.py +0 -0
  190. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/check_client_api_coverage.py +0 -0
  191. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/check_distribution_sources.py +0 -0
  192. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/check_docs.py +0 -0
  193. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/check_examples_debug.py +0 -0
  194. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/check_project.py +0 -0
  195. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/dev_release_version.py +0 -0
  196. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/test_databases.py +0 -0
  197. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/scripts/test_postgresql.py +0 -0
  198. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/setup.cfg +0 -0
  199. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  200. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  201. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  202. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  203. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/__init__.py +0 -0
  204. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/_admin_source.json +0 -0
  205. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/_build.py +0 -0
  206. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/_skill_bundle.py +0 -0
  207. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/__init__.py +0 -0
  208. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/__init__.py +0 -0
  209. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/auth/__init__.py +0 -0
  210. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/auth/boundary.py +0 -0
  211. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/auth/caller_assertions.py +0 -0
  212. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/auth/local_actor.py +0 -0
  213. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/configuration.py +0 -0
  214. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/credential_admin.py +0 -0
  215. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/development.py +0 -0
  216. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/development_client.py +0 -0
  217. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/platform_cache.py +0 -0
  218. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/__init__.py +0 -0
  219. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/column_search.py +0 -0
  220. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/contract_validation.py +0 -0
  221. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/migration_connection.py +0 -0
  222. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/namespaces.py +0 -0
  223. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/schema_graph.py +0 -0
  224. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_cascade.py +0 -0
  225. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_crud.py +0 -0
  226. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_filter.py +0 -0
  227. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_patch.py +0 -0
  228. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_registration.py +0 -0
  229. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_response.py +0 -0
  230. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_search_document.py +0 -0
  231. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  232. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  233. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  234. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  235. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  236. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_batch.py +0 -0
  237. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  238. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_constants.py +0 -0
  239. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_crud.py +0 -0
  240. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_details.py +0 -0
  241. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_graph.py +0 -0
  242. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  243. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_registration.py +0 -0
  244. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_runs.py +0 -0
  245. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/routes/update_statistics.py +0 -0
  246. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/app/transfer.py +0 -0
  247. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/__init__.py +0 -0
  248. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/__init__.py +0 -0
  249. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  250. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  251. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  252. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  253. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  254. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  255. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  256. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/contracts.py +0 -0
  257. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/hosted.py +0 -0
  258. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  259. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/native.py +0 -0
  260. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/operations.py +0 -0
  261. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/pages.py +0 -0
  262. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  263. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/backends/streaming.py +0 -0
  264. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/contracts/__init__.py +0 -0
  265. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  266. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  267. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  268. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/contracts/values.py +0 -0
  269. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/domain/__init__.py +0 -0
  270. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  271. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  272. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  273. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/domain/label_rules.py +0 -0
  274. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  275. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/domain/update_constants.py +0 -0
  276. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/__init__.py +0 -0
  277. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  278. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  279. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  280. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  281. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/__init__.py +0 -0
  282. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/env.py +0 -0
  283. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  284. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  285. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  286. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  287. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  288. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  289. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  290. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  291. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  292. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  293. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  294. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/__init__.py +0 -0
  295. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  296. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  297. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/create_table.py +0 -0
  298. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  299. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  300. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  301. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  302. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/operations/search_documents.py +0 -0
  303. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/__init__.py +0 -0
  304. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/cascade.py +0 -0
  305. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/catalog.py +0 -0
  306. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/database.py +0 -0
  307. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/grants.py +0 -0
  308. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/labels.py +0 -0
  309. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/locking.py +0 -0
  310. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/models.py +0 -0
  311. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  312. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/projections.py +0 -0
  313. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  314. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  315. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  316. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  317. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  318. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/table_response.py +0 -0
  319. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  320. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  321. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/updates.py +0 -0
  322. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  323. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  324. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/metatables/__init__.py +0 -0
  325. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/metatables/configuration.yaml +0 -0
  326. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/api/metatables/main.py +0 -0
  327. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/__init__.py +0 -0
  328. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/filters.py +0 -0
  329. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/migrations.py +0 -0
  330. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/cli/skills.py +0 -0
  331. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/compiled_sql/__init__.py +0 -0
  332. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/compiled_sql/mssql.py +0 -0
  333. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/compiled_sql/v1.py +0 -0
  334. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/dtype_codec.py +0 -0
  335. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/endpoint.py +0 -0
  336. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/README.md +0 -0
  337. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/__init__.py +0 -0
  338. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/bounded_reader.py +0 -0
  339. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/data_sources/README.md +0 -0
  340. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/data_sources/mssql.json +0 -0
  341. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/data_sources/mysql.json +0 -0
  342. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/data_sources/postgresql.json +0 -0
  343. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/data_sources/register.py +0 -0
  344. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/external_table.py +0 -0
  345. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/README.md +0 -0
  346. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/__init__.py +0 -0
  347. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/__main__.py +0 -0
  348. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  349. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/migrations/env.py +0 -0
  350. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  351. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  352. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/local_app/tables.py +0 -0
  353. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/query.py +0 -0
  354. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/quickstart.py +0 -0
  355. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/reader.py +0 -0
  356. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/scripts/__init__.py +0 -0
  357. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  358. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tables.py +0 -0
  359. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/README.md +0 -0
  360. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/__init__.py +0 -0
  361. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/__main__.py +0 -0
  362. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/data/README.md +0 -0
  363. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  364. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/frames.py +0 -0
  365. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  366. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  367. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  368. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  369. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  370. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  371. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  372. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  373. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/operations.py +0 -0
  374. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/tables.py +0 -0
  375. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/tutorial/updaters.py +0 -0
  376. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/examples/updater.py +0 -0
  377. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/future_registry.py +0 -0
  378. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/hashing.py +0 -0
  379. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/instrumentation.py +0 -0
  380. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/local_run_logs.py +0 -0
  381. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/__init__.py +0 -0
  382. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/alembic.py +0 -0
  383. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/connection.py +0 -0
  384. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/env.py +0 -0
  385. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/provider.py +0 -0
  386. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/registry.py +0 -0
  387. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/runner.py +0 -0
  388. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/scaffold.py +0 -0
  389. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/sqlite.py +0 -0
  390. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/templates/__init__.py +0 -0
  391. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/templates/env.py.mako +0 -0
  392. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/templates/script.py.mako +0 -0
  393. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/migrations/tls.py +0 -0
  394. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/pydantic_metadata.py +0 -0
  395. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/runtime.py +0 -0
  396. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/runtime_context.py +0 -0
  397. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/runtime_contract.py +0 -0
  398. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/schema_names.py +0 -0
  399. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/sdk_compat.py +0 -0
  400. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/sqlalchemy_contracts.py +0 -0
  401. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/storage_layout_contract.py +0 -0
  402. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/time_index_table_refs.py +0 -0
  403. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/transfer.py +0 -0
  404. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/transport.py +0 -0
  405. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/update_configuration_contract.py +0 -0
  406. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/__init__.py +0 -0
  407. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/configuration.py +0 -0
  408. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/dependencies.py +0 -0
  409. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/managers.py +0 -0
  410. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/namespacing.py +0 -0
  411. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/updaters/utils.py +0 -0
  412. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/src/metatables/upload.py +0 -0
  413. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  414. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_caller_assertions.py +0 -0
  415. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_data_source_identity.py +0 -0
  416. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_development_client.py +0 -0
  417. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_hosted_environment_target.py +0 -0
  418. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_local_mode.py +0 -0
  419. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_platform_fact_cache.py +0 -0
  420. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_runtime_bootstrap.py +0 -0
  421. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_runtime_database.py +0 -0
  422. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_runtime_scaffold.py +0 -0
  423. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_runtime_selection.py +0 -0
  424. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_runtime_storage_binding.py +0 -0
  425. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/auth/test_source_passwords.py +0 -0
  426. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/catalog/test_catalog_foundation.py +0 -0
  427. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/catalog/test_contract_projection.py +0 -0
  428. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/catalog/test_database_config.py +0 -0
  429. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/catalog/test_index_statistics.py +0 -0
  430. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/catalog/test_migration.py +0 -0
  431. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/conftest.py +0 -0
  432. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/capabilities.json +0 -0
  433. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/client_signatures.json +0 -0
  434. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/database_operations.json +0 -0
  435. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/test_bounded_transfer.py +0 -0
  436. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/test_compiler_runtime_source.py +0 -0
  437. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/test_relation_batching.py +0 -0
  438. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/test_relation_import.py +0 -0
  439. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/test_storage_layouts.py +0 -0
  440. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/contracts/test_table_contracts.py +0 -0
  441. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/Dockerfile +0 -0
  442. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/Dockerfile.dockerignore +0 -0
  443. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/__init__.py +0 -0
  444. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/conftest.py +0 -0
  445. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/provider/__init__.py +0 -0
  446. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/provider/env.py +0 -0
  447. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  448. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_api_contract.py +0 -0
  449. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_application_migration.py +0 -0
  450. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  451. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_catalog_contract.py +0 -0
  452. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_credential_catalog.py +0 -0
  453. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_physical_contract.py +0 -0
  454. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_relation_import.py +0 -0
  455. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  456. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_sql_security.py +0 -0
  457. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_backend/test_update_client.py +0 -0
  458. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_operations/test_physical_operations.py +0 -0
  459. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_operations/test_postgresql_operations.py +0 -0
  460. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  461. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/documentation/test_project_checks.py +0 -0
  462. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_admin_installation.py +0 -0
  463. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_api_endpoint.py +0 -0
  464. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_application_owned_migrations.py +0 -0
  465. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_client_api_contract.py +0 -0
  466. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_client_api_coverage.py +0 -0
  467. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_client_migration_scaffold.py +0 -0
  468. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_client_migration_tls.py +0 -0
  469. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_client_package.py +0 -0
  470. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_client_signatures.py +0 -0
  471. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_client_value_behaviors.py +0 -0
  472. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_data_source_registry.py +0 -0
  473. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_local_actor_client_api.py +0 -0
  474. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_local_cli_workflow.py +0 -0
  475. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_local_client_selection.py +0 -0
  476. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  477. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_namespaces_admin_http.py +0 -0
  478. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_public_imports.py +0 -0
  479. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_remaining_client_routes.py +0 -0
  480. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_run_graphs.py +0 -0
  481. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_run_logs.py +0 -0
  482. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_runtime_transition.py +0 -0
  483. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_runtime_upgrade.py +0 -0
  484. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_sdk_local_startup.py +0 -0
  485. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_sqlite_runtime.py +0 -0
  486. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_delete_client_api.py +0 -0
  487. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_filter_client_api.py +0 -0
  488. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_introspection_client_api.py +0 -0
  489. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_patch_client_api.py +0 -0
  490. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_search_document_api.py +0 -0
  491. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_stats_api.py +0 -0
  492. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_update_pipeline.py +0 -0
  493. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_table_updates_http.py +0 -0
  494. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  495. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  496. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  497. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_update_batch_client_api.py +0 -0
  498. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  499. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  500. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  501. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/e2e/test_update_registration_client_api.py +0 -0
  502. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/examples/test_documented_examples.py +0 -0
  503. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/examples/test_postgresql_examples.py +0 -0
  504. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/examples/test_setup_launch.py +0 -0
  505. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/examples/test_tutorial.py +0 -0
  506. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_credential_store.py +0 -0
  507. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_data_source_rules.py +0 -0
  508. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_local_data_sources.py +0 -0
  509. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_local_run_logs.py +0 -0
  510. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_postgresql_connection.py +0 -0
  511. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_postgresql_sql.py +0 -0
  512. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_postgresql_tables.py +0 -0
  513. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  514. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_source_validation.py +0 -0
  515. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/integrations/test_sqlite_operations.py +0 -0
  516. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/labels/test_labels.py +0 -0
  517. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/operations/test_create_table_operation.py +0 -0
  518. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/operations/test_create_table_postgres.py +0 -0
  519. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/operations/test_physical_operation_journal.py +0 -0
  520. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/operations/test_register_catalog.py +0 -0
  521. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/operations/test_search_documents.py +0 -0
  522. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/operations/test_timescale_policies.py +0 -0
  523. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/packaging/test_client_skills.py +0 -0
  524. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/packaging/test_dev_release_version.py +0 -0
  525. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/packaging/test_distribution_sources.py +0 -0
  526. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/packaging/test_editable_build.py +0 -0
  527. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/packaging/test_installed_distribution.py +0 -0
  528. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_governed_sql_scope.py +0 -0
  529. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_local_actor_membership.py +0 -0
  530. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_migration_boundary.py +0 -0
  531. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_namespace_grants.py +0 -0
  532. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_security_api.py +0 -0
  533. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_table_body_filter.py +0 -0
  534. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_table_grants.py +0 -0
  535. {mainsequence_metatable-0.1.15.dev27 → mainsequence_metatable-0.1.16.dev28}/tests/permissions/test_table_queries.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.15.dev27
3
+ Version: 0.1.16.dev28
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.15.dev27"
7
+ version = "0.1.16.dev28"
8
8
  description = "Main Sequence MetaTables Python client and standalone API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.15.dev27
3
+ Version: 0.1.16.dev28
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -172,6 +172,7 @@ src/metatables/api/app/configuration.py
172
172
  src/metatables/api/app/credential_admin.py
173
173
  src/metatables/api/app/development.py
174
174
  src/metatables/api/app/development_client.py
175
+ src/metatables/api/app/error_logging.py
175
176
  src/metatables/api/app/main.py
176
177
  src/metatables/api/app/platform_cache.py
177
178
  src/metatables/api/app/runtime.py
@@ -177,6 +177,7 @@ class RuntimeBootstrap:
177
177
  raise ValueError("Database heads do not match the migration files")
178
178
  result["migration_status"] = "pending" if pending else "up_to_date"
179
179
  except Exception:
180
+ logger.warning("Database revision is not compatible with the migration files", exc_info=True)
180
181
  result.update(migration_status="incompatible",
181
182
  migration_error="The database revision is not compatible with these migration files. Review the migration history before applying changes.")
182
183
  return result
@@ -201,6 +202,7 @@ class RuntimeBootstrap:
201
202
  self.error = "Multiple legacy local databases are saved. Choose the existing local runtime file in Settings; no database has been replaced."
202
203
  return None
203
204
  except (OSError, ValueError):
205
+ logger.warning("Saved runtime selection cannot be read", exc_info=True)
204
206
  self.error = "Saved runtime selection cannot be read. Configure the DataSource again."
205
207
  return None
206
208
  if self.workspace:
@@ -214,9 +216,11 @@ class RuntimeBootstrap:
214
216
  try:
215
217
  self.declaration, candidate, self.credential_store = declared_database(self.config, self.credential_store)
216
218
  except RuntimeDatabaseError as exc:
219
+ logger.warning("Declared runtime database is unavailable", exc_info=True)
217
220
  self.status, self.error = exc.status, str(exc)
218
221
  return None
219
222
  except RuntimeError as exc:
223
+ logger.warning("Declared runtime database is incompatible", exc_info=True)
220
224
  self.status, self.error = "incompatible", str(exc)
221
225
  return None
222
226
  return candidate
@@ -307,6 +311,7 @@ class RuntimeBootstrap:
307
311
  if script.get_revision(revision) is None:
308
312
  raise ValueError("Unknown revision")
309
313
  except Exception:
314
+ logger.warning("Database has an unsupported MetaTables migration revision", exc_info=True)
310
315
  self.status, self.error = "incompatible", "The database has an unsupported MetaTables migration revision. Earlier development databases require recreation."
311
316
  return
312
317
  if set(self.current) != set(self.expected):
@@ -345,8 +350,10 @@ class RuntimeBootstrap:
345
350
  self.uid = row.uid
346
351
  self.status = "ready"
347
352
  except (BootstrapError, CatalogConfigurationError) as exc:
353
+ logger.warning("Runtime database is incompatible", exc_info=True)
348
354
  self.status, self.error = "incompatible", str(exc)
349
355
  except CredentialStoreError as exc:
356
+ logger.warning("Runtime credential store is unavailable", exc_info=True)
350
357
  self.status, self.error = "unavailable", exc.message
351
358
  except Exception as exc:
352
359
  cause = log_failure("Cannot verify the selected database or its Alembic history", exc)
@@ -422,15 +429,15 @@ class RuntimeBootstrap:
422
429
  self.inspect()
423
430
  if isinstance(exc, CredentialStoreError):
424
431
  self.error = exc.message
425
- raise BootstrapError(exc.message) from None
432
+ raise BootstrapError(exc.message) from exc
426
433
  from metatables.api.backend.backends.contracts import SQLExecutionError
427
434
  if isinstance(exc, SQLExecutionError):
428
435
  self.error = f"Database access setup failed ({exc.code}). Check the DataSource password Secret and database permissions, then retry setup."
429
- raise BootstrapError(self.error) from None
436
+ raise BootstrapError(self.error) from exc
430
437
  if privilege_error := insufficient_privilege(exc):
431
438
  self.error = (f"Database setup failed: {privilege_error}. The DataSource login must own the runtime "
432
439
  "database and every object in it; see the DataSource database privileges.")
433
- raise BootstrapError(self.error) from None
440
+ raise BootstrapError(self.error) from exc
434
441
  cause = log_failure("MetaTables migration or registration failed", exc)
435
442
  self.error = (f"MetaTables migration or registration failed ({cause}). The runtime was not activated; "
436
443
  "inspect the database before retrying. The log has the full error.")
@@ -460,8 +467,8 @@ class RuntimeBootstrap:
460
467
  stream = stack.enter_context(os.fdopen(descriptor, "a"))
461
468
  try:
462
469
  fcntl.flock(stream, fcntl.LOCK_EX | fcntl.LOCK_NB)
463
- except BlockingIOError:
464
- raise BootstrapError("Another local initialization is in progress. Retry when it finishes.") from None
470
+ except BlockingIOError as error:
471
+ raise BootstrapError("Another local initialization is in progress. Retry when it finishes.") from error
465
472
  files = local_store_files(self.workspace)
466
473
  saved = json.loads(self.saved_path.read_text()) if self.saved_path.exists() else {}
467
474
  if "local" in saved:
@@ -484,7 +491,7 @@ class RuntimeBootstrap:
484
491
  except BootstrapError:
485
492
  raise
486
493
  except RuntimeError as exc:
487
- raise BootstrapError(str(exc)) from None
494
+ raise BootstrapError(str(exc)) from exc
488
495
  except Exception as exc:
489
496
  cause = log_failure("Unable to finish local database destruction", exc)
490
497
  message = f"Unable to finish local database destruction ({cause}). Check file access and retry."
@@ -580,7 +587,7 @@ def mutation(request, caller):
580
587
  finally:
581
588
  control.cancel()
582
589
  except BootstrapError as exc:
583
- raise HTTPException(409, str(exc)) from None
590
+ raise HTTPException(409, str(exc)) from exc
584
591
  finally:
585
592
  value.lock.release()
586
593
 
@@ -599,8 +606,8 @@ def configure(body: RuntimeSourceInput, request: Request, caller: AdmittedCaller
599
606
  value.configure(body, caller.user_uid)
600
607
  except BootstrapError:
601
608
  raise
602
- except Exception:
603
- raise BootstrapError("Invalid runtime DataSource configuration.") from None
609
+ except Exception as exc:
610
+ raise BootstrapError("Invalid runtime DataSource configuration.") from exc
604
611
  request.app.state.runtime = replace(request.app.state.runtime, data_sources=None, binding=RuntimeStorageBinding())
605
612
  return value.descriptor(caller.user_uid, is_admin=caller.is_admin)
606
613
 
@@ -0,0 +1,41 @@
1
+ """Server-side error logs: every failure the API translates keeps its traceback."""
2
+
3
+ import logging
4
+
5
+ from metatables.log_contract import redact_text
6
+
7
+ logger = logging.getLogger("metatables.api")
8
+
9
+
10
+ class RedactingFormatter(logging.Formatter):
11
+ """Mask credential patterns in the message and the rendered traceback."""
12
+
13
+ def format(self, record: logging.LogRecord) -> str:
14
+ return redact_text(super().format(record))
15
+
16
+
17
+ def configure_logging() -> None:
18
+ """Emit ``metatables.*`` warnings and errors when the host configured no handler."""
19
+ package = logging.getLogger("metatables")
20
+ if package.hasHandlers():
21
+ return
22
+ handler = logging.StreamHandler()
23
+ handler.setFormatter(RedactingFormatter("%(asctime)s %(levelname)s %(name)s: %(message)s"))
24
+ package.addHandler(handler)
25
+
26
+
27
+ def translated_cause(error: BaseException) -> BaseException | None:
28
+ if error.__cause__ is not None:
29
+ return error.__cause__
30
+ return None if error.__suppress_context__ else error.__context__
31
+
32
+
33
+ def log_translated(request, error: BaseException, status_code: int) -> None:
34
+ """Log server failures and any exception translated into a client response."""
35
+ if status_code < 500 and translated_cause(error) is None:
36
+ return
37
+ logger.log(
38
+ logging.ERROR if status_code >= 500 else logging.WARNING,
39
+ "%s %s -> %s %s", request.method, request.url.path, status_code, type(error).__name__,
40
+ exc_info=error,
41
+ )
@@ -4,12 +4,15 @@ from contextlib import asynccontextmanager
4
4
  from uuid import UUID
5
5
 
6
6
  from fastapi import Depends, FastAPI, HTTPException, Request
7
+ from fastapi.exception_handlers import http_exception_handler
7
8
  from fastapi.responses import JSONResponse
8
9
  from fastapi.routing import APIRoute
9
10
  from sqlalchemy.orm import Session
11
+ from starlette.exceptions import HTTPException as StarletteHTTPException
10
12
 
11
13
  from metatables.api.app.auth.boundary import trusted_actor_facts
12
14
  from metatables.api.app.auth.local_actor import catalog_session
15
+ from metatables.api.app.error_logging import configure_logging, log_translated
13
16
  from metatables.api.app.routes.column_search import router as column_search_router
14
17
  from metatables.api.app.routes.contract_validation import router as contract_validation_router
15
18
  from metatables.api.app.routes.data_sources import router as data_sources_router
@@ -99,6 +102,7 @@ from metatables.api.app.routes.update_crud import router as update_crud_router
99
102
 
100
103
 
101
104
  def create_app(config: RuntimeConfig | None = None) -> FastAPI:
105
+ configure_logging()
102
106
  selected = config or RuntimeConfig.from_environment()
103
107
 
104
108
  @asynccontextmanager
@@ -120,12 +124,18 @@ def create_app(config: RuntimeConfig | None = None) -> FastAPI:
120
124
  service = FastAPI(title="MetaTables API", version="0.1.0", lifespan=lifespan)
121
125
  from metatables.api.backend.backends.contracts import SQLExecutionError
122
126
 
127
+ @service.exception_handler(StarletteHTTPException)
128
+ async def http_error(request, error):
129
+ log_translated(request, error, error.status_code)
130
+ return await http_exception_handler(request, error)
131
+
123
132
  @service.exception_handler(SQLExecutionError)
124
133
  async def database_access_error(request, error):
125
134
  unavailable = error.code in {
126
135
  "sql_security_not_initialized", "sql_identity_secret_required",
127
136
  "sql_permission_reconciliation_pending", "sql_principal_permission_drift",
128
137
  } or error.code.endswith("outcome_unknown")
138
+ log_translated(request, error, 503 if unavailable else 400)
129
139
  return JSONResponse(status_code=503 if unavailable else 400,
130
140
  content={"detail": {"code": error.code, "detail": error.detail}})
131
141
  from metatables.api.app.transfer import TransferMiddleware
@@ -135,8 +145,9 @@ def create_app(config: RuntimeConfig | None = None) -> FastAPI:
135
145
 
136
146
  @service.exception_handler(TransferError)
137
147
  async def transfer_error(request, error):
138
- return JSONResponse(status_code=408 if isinstance(error, TransferDeadlineError) else 413,
139
- content={"detail": {"code": str(error)}})
148
+ status_code = 408 if isinstance(error, TransferDeadlineError) else 413
149
+ log_translated(request, error, status_code)
150
+ return JSONResponse(status_code=status_code, content={"detail": {"code": str(error)}})
140
151
 
141
152
  service.state.runtime = RuntimeState(config=selected)
142
153
  from metatables.api.app.runtime_control import RuntimeControl
@@ -154,6 +165,7 @@ def create_app(config: RuntimeConfig | None = None) -> FastAPI:
154
165
  if control is not None:
155
166
  control.enter(request)
156
167
  except HTTPException as exc:
168
+ log_translated(request, exc, exc.status_code)
157
169
  return JSONResponse(status_code=exc.status_code, content={"detail": exc.detail})
158
170
  try:
159
171
  return await call_next(request)
@@ -56,9 +56,9 @@ class SourceRoute(APIRoute):
56
56
  try:
57
57
  return await handler(request)
58
58
  except RuntimeBindingError as exc:
59
- raise HTTPException(409, exc.code) from None
59
+ raise HTTPException(409, exc.code) from exc
60
60
  except CredentialStoreError as exc:
61
- raise HTTPException(503, exc.message) from None
61
+ raise HTTPException(503, exc.message) from exc
62
62
  except RequestValidationError as exc:
63
63
  # Keep field diagnostics without echoing submitted credentials.
64
64
  detail = [{key: error[key] for key in ("loc", "msg", "type")}
@@ -206,13 +206,13 @@ def test_source_connection(body: SourceCreate, request: Request, actor: TrustedA
206
206
  source = replace(source, connection=replace(source.connection, **connection_tls))
207
207
  validate_connection(source)
208
208
  except CredentialStoreError as exc:
209
- raise HTTPException(503, exc.message) from None
209
+ raise HTTPException(503, exc.message) from exc
210
210
  except DataSourceIntegrationError as exc:
211
211
  if exc.code in {"mysql_driver_unavailable", "mssql_driver_unavailable"}:
212
- raise HTTPException(503, f"Install the {body.class_type} driver dependencies on the MetaTables API server.") from None
213
- raise HTTPException(503, "Connection failed. Check the host, port, database name, credentials and TLS settings.") from None
214
- except Exception:
215
- raise HTTPException(503, "Connection failed. Check the host, port, database name, credentials and TLS settings.") from None
212
+ raise HTTPException(503, f"Install the {body.class_type} driver dependencies on the MetaTables API server.") from exc
213
+ raise HTTPException(503, "Connection failed. Check the host, port, database name, credentials and TLS settings.") from exc
214
+ except Exception as error:
215
+ raise HTTPException(503, "Connection failed. Check the host, port, database name, credentials and TLS settings.") from error
216
216
  return {"ok": True, "message": "Connection succeeded."}
217
217
 
218
218
 
@@ -347,17 +347,17 @@ def validate_source(uid: UUID, request: Request, actor: TrustedActorFacts = Depe
347
347
  source = resolve_source(row, request_credentials(request, session, actor), binding=binding)
348
348
  validate_connection(source)
349
349
  except CredentialStoreError as exc:
350
- raise HTTPException(503, exc.message) from None
350
+ raise HTTPException(503, exc.message) from exc
351
351
  except DataSourceIntegrationError as exc:
352
352
  row.status = "FAILED"
353
353
  session.commit()
354
354
  if exc.code in {"mysql_driver_unavailable", "mssql_driver_unavailable"}:
355
- raise HTTPException(503, f"Install the {row.class_type} driver dependencies on the MetaTables API server.") from None
356
- raise HTTPException(503, "DataSource validation failed; check connection configuration and Secret access.") from None
357
- except Exception:
355
+ raise HTTPException(503, f"Install the {row.class_type} driver dependencies on the MetaTables API server.") from exc
356
+ raise HTTPException(503, "DataSource validation failed; check connection configuration and Secret access.") from exc
357
+ except Exception as error:
358
358
  row.status = "FAILED"
359
359
  session.commit()
360
- raise HTTPException(503, "DataSource validation failed; check connection configuration and Secret access.") from None
360
+ raise HTTPException(503, "DataSource validation failed; check connection configuration and Secret access.") from error
361
361
  row.status = "AVAILABLE"
362
362
  session.commit()
363
363
  return payload(row, actor, binding)
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import logging
5
6
  from collections.abc import Callable
6
7
  from typing import Any
7
8
  from uuid import UUID
@@ -47,6 +48,8 @@ from metatables.api.backend.persistence.projections import (
47
48
  resolved_foreign_key_targets,
48
49
  )
49
50
 
51
+ logger = logging.getLogger(__name__)
52
+
50
53
  router = APIRouter(prefix="/meta-tables", tags=["MetaTables"])
51
54
 
52
55
 
@@ -157,6 +160,7 @@ def finalize_managed(
157
160
  physical_table_name=table.physical_table_name,
158
161
  )
159
162
  except PhysicalIntrospectionError as exc:
163
+ logger.warning("Physical table introspection failed during finalization", exc_info=True)
160
164
  if exc.code == "physical_table_not_found":
161
165
  if uid == version_root:
162
166
  rows.append(_row(table, uid, previous=previous, specialization=specialization,
@@ -220,6 +224,7 @@ def finalize_managed(
220
224
  rows.append(_row(table, uid, previous=previous, specialization=specialization,
221
225
  exists=True, finalized=previous != "active"))
222
226
  except (CatalogInvariantError, ContractValidationError, IntegrityError) as exc:
227
+ logger.warning("Physical table contract could not be reconciled", exc_info=True)
223
228
  rows.append(_row(
224
229
  table, uid, previous=previous, specialization=specialization, exists=True,
225
230
  error={
@@ -229,6 +234,7 @@ def finalize_managed(
229
234
  ))
230
235
  continue
231
236
  except (TimescaleError, PhysicalConnectionUnavailable) as exc:
237
+ logger.warning("TimescaleDB hypertable could not be created", exc_info=True)
232
238
  rows.append(_row(
233
239
  table, uid, previous=previous, specialization=specialization, exists=True,
234
240
  error={
@@ -102,8 +102,8 @@ def update_logs(
102
102
  if request.query_params.get("run_uid"):
103
103
  try:
104
104
  statement = statement.where(UpdateRun.uid == UUID(request.query_params["run_uid"]))
105
- except ValueError:
106
- raise HTTPException(422, "Invalid run UID.") from None
105
+ except ValueError as exc:
106
+ raise HTTPException(422, "Invalid run UID.") from exc
107
107
  runs = list(
108
108
  session.scalars(statement.order_by(UpdateRun.started_at.desc(), UpdateRun.uid).limit(21))
109
109
  )
@@ -1,5 +1,6 @@
1
1
  """Authenticated application initialization and effective storage settings."""
2
2
 
3
+ import logging
3
4
  from uuid import UUID
4
5
 
5
6
  from fastapi import APIRouter, Depends, Request, Response
@@ -13,6 +14,8 @@ from metatables.api.backend.integrations.local_workspace import source_descripto
13
14
  from metatables.api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
14
15
  from metatables.runtime_contract import HostedEnvironment, RuntimeContext
15
16
 
17
+ logger = logging.getLogger(__name__)
18
+
16
19
  router = APIRouter(tags=["Runtime"])
17
20
 
18
21
 
@@ -31,10 +34,12 @@ def verified_environment(uid: UUID | None) -> HostedEnvironment:
31
34
  is_production=environment.is_production,
32
35
  required_repository_branch=environment.required_repository_branch)
33
36
  except ApiError as exc:
37
+ logger.warning("Hosted environment lookup failed", exc_info=True)
34
38
  return HostedEnvironment(uid=str(uid), status="not_found" if exc.status_code == 404 else "unavailable")
35
39
  except DoesNotExist:
36
40
  return HostedEnvironment(uid=str(uid), status="not_found")
37
41
  except Exception:
42
+ logger.exception("Hosted environment lookup failed")
38
43
  return HostedEnvironment(uid=str(uid), status="unavailable")
39
44
 
40
45
 
@@ -52,6 +57,7 @@ def developer_hosted_environment(cache: PlatformCache[UUID, HostedEnvironment])
52
57
  uid = get_code_repository_context().organization_environment_uid
53
58
  return cached_environment(cache, UUID(uid) if uid else None)
54
59
  except Exception:
60
+ logger.exception("Hosted environment resolution failed")
55
61
  return HostedEnvironment(uid=None, status="unavailable")
56
62
 
57
63
 
@@ -103,9 +109,12 @@ def runtime_context(
103
109
  uid = state.binding.source_uid or provider.default_uid()
104
110
  metadata = provider.metadata(uid)
105
111
  except DataSourceIntegrationError as exc:
112
+ if exc.code != "default_data_source_not_configured":
113
+ logger.warning("Runtime DataSource metadata is unavailable", exc_info=True)
106
114
  result["data_source_error"] = "data_source_not_configured" if exc.code == "default_data_source_not_configured" else "data_source_unavailable"
107
115
  return result
108
116
  except (KeyError, ValueError, RuntimeError, SQLAlchemyError):
117
+ logger.warning("Runtime DataSource metadata is unavailable", exc_info=True)
109
118
  result["data_source_error"] = "data_source_unavailable"
110
119
  return result
111
120
  if metadata is None:
@@ -74,9 +74,9 @@ def reconcile_database_permissions(actor=Depends(require_admin_actor),
74
74
  try:
75
75
  backend.access.initialize(session)
76
76
  session.commit()
77
- except Exception:
77
+ except Exception as exc:
78
78
  session.rollback()
79
- raise HTTPException(503, "Database permission reconciliation failed; caller SQL remains disabled.") from None
79
+ raise HTTPException(503, "Database permission reconciliation failed; caller SQL remains disabled.") from exc
80
80
  return {"ok": True, "data_source_uid": str(backend.source.uid)}
81
81
 
82
82
 
@@ -162,7 +162,7 @@ def replace_grants(session, actor, kind, uid, body):
162
162
  try:
163
163
  validate_principal(principal_kind, principal_uid)
164
164
  except PrincipalUnavailable as exc:
165
- raise HTTPException(422, str(exc)) from None
165
+ raise HTTPException(422, str(exc)) from exc
166
166
  lock_catalog(session)
167
167
  session.expire_all()
168
168
  row = authorize(session, actor, kind, uid, edit=True)
@@ -256,7 +256,7 @@ def effective_access(uid: UUID, user_uid: UUID | None = None, without_grant_uid:
256
256
  identity = validate_principal("user", user_uid)
257
257
  teams, _ = platform_facts(identity)
258
258
  except PrincipalUnavailable as exc:
259
- raise HTTPException(422, str(exc)) from None
259
+ raise HTTPException(422, str(exc)) from exc
260
260
  subject = TrustedActorFacts(user_uid=user_uid, user_active=True, active_team_uids=teams)
261
261
  contributions = GrantRepository(session).contributions(table=table, actor=subject)
262
262
  remaining = [g for g in contributions if g['grant_uid'] != str(without_grant_uid)]
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import logging
5
6
  from collections.abc import Callable
6
7
  from uuid import UUID
7
8
 
@@ -29,6 +30,8 @@ from metatables.api.backend.persistence.locking import lock_catalog
29
30
  from metatables.api.backend.persistence.models import MetaTable, MetaTableForeignKey, MetaTableGrant
30
31
  from metatables.api.backend.persistence.physical_operations import PhysicalOperationRepository
31
32
 
33
+ logger = logging.getLogger(__name__)
34
+
32
35
  router = APIRouter(prefix="/meta-tables", tags=["MetaTables"])
33
36
 
34
37
 
@@ -41,6 +44,7 @@ def _journal_reconciliation(session: Session, operation_uid: UUID) -> None:
41
44
  PhysicalOperationRepository(session).require_reconciliation(operation_uid=operation_uid)
42
45
  session.commit()
43
46
  except SQLAlchemyError:
47
+ logger.exception("Failed to record that the physical delete requires reconciliation")
44
48
  session.rollback()
45
49
 
46
50
 
@@ -133,6 +137,7 @@ def destroy_meta_table(
133
137
  repository.record_failed(operation_uid=operation_uid, safe_error_code=safe_code)
134
138
  session.commit()
135
139
  except SQLAlchemyError:
140
+ logger.exception("Failed to record the failed physical delete")
136
141
  session.rollback()
137
142
  status = exc.status_code if isinstance(exc, DataSourceAdmissionError) else 409
138
143
  if isinstance(exc, (DataSourceIntegrationError, PhysicalConnectionUnavailable)):
@@ -40,22 +40,22 @@ def invoke(session, operation):
40
40
  return operation()
41
41
  except RelationError as exc:
42
42
  session.rollback()
43
- raise HTTPException(exc.status, {"code": exc.code}) from None
43
+ raise HTTPException(exc.status, {"code": exc.code}) from exc
44
44
  except CredentialStoreError as exc:
45
45
  session.rollback()
46
- raise HTTPException(503, {"code": exc.code, "detail": exc.message}) from None
46
+ raise HTTPException(503, {"code": exc.code, "detail": exc.message}) from exc
47
47
  except (DataSourceIntegrationError, DataSourceAdmissionError, SQLExecutionError) as exc:
48
48
  session.rollback()
49
- raise HTTPException(getattr(exc, "status_code", 409), {"code": exc.code}) from None
50
- except PhysicalConnectionUnavailable:
49
+ raise HTTPException(getattr(exc, "status_code", 409), {"code": exc.code}) from exc
50
+ except PhysicalConnectionUnavailable as error:
51
51
  session.rollback()
52
- raise HTTPException(503, {"code": "relation_access_failed"}) from None
53
- except SQLAlchemyError:
52
+ raise HTTPException(503, {"code": "relation_access_failed"}) from error
53
+ except SQLAlchemyError as error:
54
54
  session.rollback()
55
- raise HTTPException(503, {"code": "relation_catalog_unavailable"}) from None
56
- except ValueError:
55
+ raise HTTPException(503, {"code": "relation_catalog_unavailable"}) from error
56
+ except ValueError as error:
57
57
  session.rollback()
58
- raise HTTPException(422, {"code": "invalid_relation_contract"}) from None
58
+ raise HTTPException(422, {"code": "invalid_relation_contract"}) from error
59
59
 
60
60
 
61
61
  @source_router.get("/{source_uid}/relations/", response_model=RelationDiscovery)
@@ -80,7 +80,7 @@ def introspect_meta_table(
80
80
  except DataSourceIntegrationError as exc:
81
81
  raise HTTPException(status_code=503, detail="DataSource service is unavailable.") from exc
82
82
  except RelationError as exc:
83
- raise HTTPException(status_code=exc.status, detail={"code": exc.code}) from None
83
+ raise HTTPException(status_code=exc.status, detail={"code": exc.code}) from exc
84
84
  except PhysicalIntrospectionError as exc:
85
85
  raise HTTPException(status_code=409, detail=exc.code) from exc
86
86
  session.commit()
@@ -124,7 +124,7 @@ def execute_operation(
124
124
  try:
125
125
  backend.sql.check_wire_contract(payload.dialect, payload.statement.paramstyle)
126
126
  except SQLExecutionError as exc:
127
- raise HTTPException(422, exc.code) from None
127
+ raise HTTPException(422, exc.code) from exc
128
128
  result = _execute(
129
129
  executor,
130
130
  backend,
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import errno
6
6
  import ipaddress
7
7
  import json
8
+ import logging
8
9
  import os
9
10
  import socket
10
11
  from dataclasses import dataclass, field, replace
@@ -39,6 +40,8 @@ from metatables.api.backend.integrations.runtime_binding import (
39
40
  )
40
41
  from metatables.runtime_contract import HostedEnvironment
41
42
 
43
+ logger = logging.getLogger(__name__)
44
+
42
45
  LOCAL_TOKEN_HEADER = "X-MetaTables-Local-Token"
43
46
  UNSAFE_METHODS = frozenset({"POST", "PUT", "PATCH", "DELETE"})
44
47
 
@@ -245,6 +248,7 @@ def initialize_runtime(config: RuntimeConfig) -> RuntimeState:
245
248
  try:
246
249
  bootstrap.configure(candidate, None)
247
250
  except Exception:
251
+ logger.exception("Saved or declared runtime configuration is invalid")
248
252
  bootstrap.status = "unavailable"
249
253
  bootstrap.error = ("Saved runtime configuration is invalid. Configure the DataSource again in Settings."
250
254
  if config.local_mode else "The declared runtime database configuration is invalid. "
@@ -153,7 +153,7 @@ def select_runtime(body: RuntimeSelection, request: Request, background: Backgro
153
153
  try:
154
154
  DeploymentConfiguration.load(control.configuration).require_development()
155
155
  except RuntimeError as exc:
156
- raise HTTPException(403, str(exc)) from None
156
+ raise HTTPException(403, str(exc)) from exc
157
157
  current = request.app.state.runtime.config.profile
158
158
  if body.mode == current:
159
159
  return {"mode": current, "restarting": False}
@@ -168,13 +168,13 @@ def select_runtime(body: RuntimeSelection, request: Request, background: Backgro
168
168
  except HTTPException:
169
169
  control.cancel()
170
170
  raise
171
- except Exception:
171
+ except Exception as error:
172
172
  control.cancel()
173
- raise HTTPException(409, "Unable to switch runtime mode. Check its current operations.") from None
173
+ raise HTTPException(409, "Unable to switch runtime mode. Check its current operations.") from error
174
174
  try:
175
175
  write_state(control.directory / "request.json", {"mode": body.mode})
176
- except OSError:
176
+ except OSError as error:
177
177
  control.cancel()
178
- raise HTTPException(503, "Unable to record the runtime switch; the current mode remains active.") from None
178
+ raise HTTPException(503, "Unable to record the runtime switch; the current mode remains active.") from error
179
179
  background.add_task(control.shutdown)
180
180
  return {"mode": body.mode, "restarting": True}
@@ -46,9 +46,9 @@ def read_secret(name: str) -> tuple[UUID, str]:
46
46
  if not secret.uid or not value:
47
47
  raise ValueError("Empty Secret")
48
48
  return UUID(str(secret.uid)), value
49
- except Exception:
49
+ except Exception as exc:
50
50
  raise RuntimeDatabaseError("unavailable", f"Cannot read the Environment Secret {name}. Create it in this "
51
- "Environment, then deploy the API.") from None
51
+ "Environment, then deploy the API.") from exc
52
52
 
53
53
 
54
54
  def declaration(config):
@@ -1,5 +1,6 @@
1
1
  """Persist write-only credential fields through the runtime's CredentialStore."""
2
2
 
3
+ import logging
3
4
  from contextlib import contextmanager
4
5
  from dataclasses import dataclass
5
6
 
@@ -11,6 +12,8 @@ from metatables.api.backend.integrations.credential_store import (
11
12
  CredentialStoreError,
12
13
  )
13
14
 
15
+ logger = logging.getLogger(__name__)
16
+
14
17
 
15
18
  @dataclass
16
19
  class PasswordConfiguration:
@@ -34,7 +37,7 @@ def password_configuration(configuration: dict, password: SecretStr | None, cred
34
37
  prepared.values[field] = str(uid)
35
38
  yield prepared
36
39
  except CredentialStoreError as exc:
37
- raise HTTPException(503, exc.message) from None
40
+ raise HTTPException(503, exc.message) from exc
38
41
  finally:
39
42
  if not prepared.saved:
40
43
  for uid in reversed(created):
@@ -43,4 +46,4 @@ def password_configuration(configuration: dict, password: SecretStr | None, cred
43
46
  except Exception:
44
47
  # Local rows roll back with the session. Hosted cleanup
45
48
  # compensates only newly created Secrets, never old refs.
46
- pass
49
+ logger.exception("Failed to delete a newly created credential during rollback")
@@ -378,8 +378,8 @@ def _after_transaction_end(session, transaction):
378
378
  if committed and access is not None:
379
379
  try:
380
380
  access.finish_pending(session.get_bind())
381
- except Exception:
382
- raise SQLExecutionError(code="sql_permission_reconciliation_pending") from None
381
+ except Exception as exc:
382
+ raise SQLExecutionError(code="sql_permission_reconciliation_pending") from exc
383
383
 
384
384
 
385
385
  event.listen(Session, "after_commit", _after_commit)