matrx-orm 3.1.165__tar.gz → 3.1.166__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.
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/PKG-INFO +1 -1
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/__init__.py +2 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/FEATURE.md +5 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/pool_watch.py +56 -2
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/pyproject.toml +1 -1
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_pool_holder_census.py +29 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/.gitignore +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/AGENTS.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/BASE_CLASS_METHODS.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/CLAUDE.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/MODEL_API.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/database/orm/extended/managers/ai_model_base.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/docs/migrations.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/FEATURE.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/adapters/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/adapters/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/adapters/async_postgresql.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/adapters/base_adapter.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/adapters/supabase_adapter.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/admin/FEATURE.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/admin/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/admin/router.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/api/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/api/auth.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/api/config.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/api/handlers.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/api/protocol.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/api/server.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/associations.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/cache_debug.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/catalog.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/catalog_sql.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/client/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/client/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/client/postgres_connection.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/client/postgrest.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/client/supabase_auth.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/client/supabase_config.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/client/supabase_manager.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/EXTENDED-TASK.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/TASKS.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/async_db_manager.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/base.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/config.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/connections.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/db_function.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/diagnostics.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/expressions.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/extended.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/fields.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/introspection.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/listen.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/loop_filters.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/model_dto.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/model_view.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/one_database.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/paginator.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/pool_maintenance.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/pooler_role.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/pydantic_bridge.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/registry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/relations.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/resilience.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/rls_session.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/session_context.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/signals.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/tls.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/transaction.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/types.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/write_queue.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/core/write_retry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/entity.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/error_handling.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/exceptions.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/extended/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/extended/app_error_handler.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/identity_rule.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/local_sqlite.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/middleware/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/middleware/base.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/cli.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/ddl.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/diff.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/executor.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/integration.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/loader.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/operations.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/state.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/migrations/table_filter.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/no_org_assignment.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/FEATURE.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/bulk_update_values.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/catalog_select.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/conflict.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/conflict_writes.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/create.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/db_functions.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/delete.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/dynamic_admin.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/dynamic_crud.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/graph_walk.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/latest_rows.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/queue_claim.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/read.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/relational_backfill.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/staging_load.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/operations/update.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/platform_access.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/platform_db.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/py.typed +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/pytest_lock_guard.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/pytest_plugin.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/python_sql/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/python_sql/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/python_sql/db_objects.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/query/FEATURE.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/query/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/query/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/query/builder.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/query/executor.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/resources/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/resources/additional-assigners-2026-09-12.json +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/resources/org_assignment_trigger_baseline.json +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/FEATURE.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/code_handler.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/codegen_writer.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/columns.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/common.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/diff_preview.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/generator.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/package_wiring.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/relationships.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/runner.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/schema.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/schema_manager.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/tables.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/views.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/FEATURE.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/attachments.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/crypto.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/host_authorization.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/items.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/model.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/mutation_receipts.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/org_service.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/service.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/coalesce.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/dag.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/errors.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/fallback.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/flush.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/lifecycle.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/managed.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/op.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/reads.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/session.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/session/telemetry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/sql_executor/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/sql_executor/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/sql_executor/executor.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/sql_executor/queries.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/sql_executor/registry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/sql_executor/types.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/sql_executor/utils.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/state.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/utils/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/utils/sql_utils.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/utils/type_converters.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/write_actor.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/scripts/git-branches.sh +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/scripts/publish.sh +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/scripts/release.sh +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/conftest.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_adapter_registry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_admin_db_columns.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_admin_response_rendering.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_admin_search_negation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_admin_search_sentinels.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_advisory_lock.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_agent_message.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_api_auth.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_api_config.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_api_handlers.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_api_protocol.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_array_agg_order_by.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_associations.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_associations_wiring.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_bulk_hydration_offload.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_bulk_update_by_pk.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_cache_debug.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_call_function.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_case_when.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_catalog.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_committed_row_guard.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_composite_pk_filter.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_composite_pk_write_paths.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_config.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_conflict_target.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_conflict_writes.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_connection_codecs.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_connection_poison_guard.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_connection_primitives.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_count_composite_distinct.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_count_limit_param_leak.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_db_function_field.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_ddl_generator.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_deadlock_retry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_derived_table.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_dirty_tracking.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_dynamic_crud.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_exceptions.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_expression_primitives.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_fields.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_from_alias.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_fts.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_func_expression_args.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_graph_walk.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_having_annotate_alias.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_introspect_rls_policies.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_join_and_aggregate.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_latest_rows.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_listen_notify.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_local_sqlite.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_lock_contention_retry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_managed_write_guard.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_matrx_entity.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_migration_diff_types.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_migration_loader.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_model_instance.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_model_meta.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_optimistic_concurrency.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_order_by_expression.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_org_assignment_inventory.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_orm_banners_are_client_safe.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_parameter_name_hydration.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_patch_jsonb_path.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_persisted_count.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_pool_loop_recreation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_pool_maintenance.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_postgrest_filters.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_pydantic_bridge.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_query_builder.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_query_error_detail.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_query_executor_sql.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_query_timeout.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_queue_claim.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_read_connection_retry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_registry.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_registry_multi_database.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_registry_multi_schema.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_relational_backfill.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_relations.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_resilience.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_rls_session_scope.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_schema_exists.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_session_advisory_lock.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_standalone_write_session_context.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_state_cache.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_subquery_filter_raw.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_subquery_in_filter.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_subquery_nested_expressions.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_supabase_auth.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_supabase_config.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_tls.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_transaction_database_identity.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_typed_join_projection.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_typed_predicates.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_update_case_expression.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_update_subquery.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_update_with_rebase.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_upsert_default_leak.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_upsert_with_conflict.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_values_jsonb_decode.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_watched_lifecycle.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_write_queue_deadline.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level1/test_write_retry_semantics.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/MODULE_README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/conftest.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_bulk_ops.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_cache_integration.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_crud.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_foreign_keys.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_m2m.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_manager.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_migrations_live.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_query_execution.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/test_schema_diff.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/level2/verify_committed_row_guard_pg17.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/live_pooler_role.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project/.env.example +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project/README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project/generate.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project/generated/.gitkeep +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project/matrx_orm.yaml +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project/test_schema_generation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project_desktop/.env.example +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project_desktop/README.md +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project_desktop/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project_desktop/client_example.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project_desktop/client_example.ts +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project_desktop/client_supabase_example.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/sample_project_desktop/server.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/entity_tests.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_base_generation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_composite_pk_fk_generation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_composite_unique_generation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_dto_identity_generation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_entity_capability_generation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_enum_ordering.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_generate_schema.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_junction_analysis.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_multi_schema_output.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_schema_analysis.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_sql_expression_defaults.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_table_relationships_query.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema/test_view_generation.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema_builder/test_array_default_parsing.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema_builder/test_focused_generation_plan.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/schema_builder/test_host_models_aggregator.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/__init__.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/conftest.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_cache_no_downgrade.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_capture_poison_proof.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_coalesce.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_dag.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_disk_spill_fallback.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_flush_individual_fallback.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_governed_write.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_managed.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_op_enqueue_site.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_reads.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_record_error_bounded_insert.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_record_error_storm.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_session.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/session/test_spill_guard_plugin.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_array_arg_element_type.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_database_name_alias.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_db_functions.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_dynamic_select_unregistered.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_immutable_insert_or_exact_verify.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_keyed_digest.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_model_cls_refactor.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_no_blocking_asyncpg_tls.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_one_database.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_order_by_desc_nulls_last.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_pooler_role_guard.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_secret_audit_names_its_organization.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_secrets_battery.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_secrets_minting_keys.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_shared_lock_guard.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_sql_param_casts.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_sync_twins_guard.py +0 -0
- {matrx_orm-3.1.165 → matrx_orm-3.1.166}/tests/test_user_visible_lookup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: matrx-orm
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.166
|
|
4
4
|
Summary: Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching
|
|
5
5
|
Project-URL: Homepage, https://github.com/AI-Matrix-Engine/aidream-current
|
|
6
6
|
Project-URL: Repository, https://github.com/AI-Matrix-Engine/aidream-current
|
|
@@ -226,6 +226,7 @@ from .core.pydantic_bridge import (
|
|
|
226
226
|
model_json_schema,
|
|
227
227
|
)
|
|
228
228
|
from .core.pool_watch import (
|
|
229
|
+
PoolHolderProvenance,
|
|
229
230
|
PoolHolderSnapshot,
|
|
230
231
|
PoolSaturationEvent,
|
|
231
232
|
connection_holder_census,
|
|
@@ -657,6 +658,7 @@ __all__ = [
|
|
|
657
658
|
"Paginator",
|
|
658
659
|
"Page",
|
|
659
660
|
# ── Pool saturation observability ───────────────────────────────────────────
|
|
661
|
+
"PoolHolderProvenance",
|
|
660
662
|
"PoolHolderSnapshot",
|
|
661
663
|
"PoolSaturationEvent",
|
|
662
664
|
"connection_holder_census",
|
|
@@ -186,6 +186,11 @@ and invokes host sinks; subsequent retry timeouts do not spam another incident.
|
|
|
186
186
|
Once a release returns an idle slot, the alarm re-arms. The final
|
|
187
187
|
`PoolAcquireTimeoutError.details` carries both the first snapshot and the current
|
|
188
188
|
census, so retry/persistence casualties preserve the diagnosis.
|
|
189
|
+
The census also carries only identifier-validated request provenance from the
|
|
190
|
+
host-injected context (`request_id`, source/execution labels). It deliberately
|
|
191
|
+
excludes route text, users, arguments, SQL, and arbitrary metadata, so an opaque
|
|
192
|
+
ORM operation can be tied to its producer without turning the saturation sink
|
|
193
|
+
into a request-payload recorder.
|
|
189
194
|
|
|
190
195
|
**Release is bounded and cancellation-safe.** Return/reset runs in a dedicated,
|
|
191
196
|
shielded task with a 10-second asyncpg release timeout. A holder remains visible
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
|
+
import re
|
|
5
6
|
import time
|
|
6
7
|
import traceback
|
|
7
8
|
from collections.abc import AsyncIterator, Callable
|
|
@@ -10,14 +11,41 @@ from dataclasses import dataclass
|
|
|
10
11
|
from datetime import UTC, datetime
|
|
11
12
|
from typing import Any, Literal
|
|
12
13
|
|
|
13
|
-
from pydantic import BaseModel, ConfigDict
|
|
14
|
+
from pydantic import BaseModel, ConfigDict, field_validator
|
|
14
15
|
|
|
15
|
-
from matrx_utils import vcprint
|
|
16
|
+
from matrx_utils import get_active_context, vcprint
|
|
16
17
|
|
|
17
18
|
logger = logging.getLogger("matrx_orm.pool_watch")
|
|
18
19
|
|
|
19
20
|
_STACK_LIMIT = 24
|
|
20
21
|
_DISPLAY_STACK_LIMIT = 8
|
|
22
|
+
_PROVENANCE_TEXT = re.compile(r"^[A-Za-z0-9_.:/-]{1,128}$")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class PoolHolderProvenance(BaseModel):
|
|
26
|
+
"""Bounded, request-scoped producer identity safe for durable capture."""
|
|
27
|
+
|
|
28
|
+
model_config = ConfigDict(extra="forbid", frozen=True)
|
|
29
|
+
|
|
30
|
+
request_id: str | None = None
|
|
31
|
+
source_app: str | None = None
|
|
32
|
+
source_feature: str | None = None
|
|
33
|
+
origin_class: str | None = None
|
|
34
|
+
execution_kind: str | None = None
|
|
35
|
+
execution_id: str | None = None
|
|
36
|
+
|
|
37
|
+
@field_validator(
|
|
38
|
+
"request_id",
|
|
39
|
+
"source_app",
|
|
40
|
+
"source_feature",
|
|
41
|
+
"origin_class",
|
|
42
|
+
"execution_kind",
|
|
43
|
+
"execution_id",
|
|
44
|
+
mode="before",
|
|
45
|
+
)
|
|
46
|
+
@classmethod
|
|
47
|
+
def _only_bounded_identifiers(cls, value: Any) -> str | None:
|
|
48
|
+
return value if isinstance(value, str) and _PROVENANCE_TEXT.fullmatch(value) else None
|
|
21
49
|
|
|
22
50
|
|
|
23
51
|
class PoolHolderSnapshot(BaseModel):
|
|
@@ -32,6 +60,7 @@ class PoolHolderSnapshot(BaseModel):
|
|
|
32
60
|
acquired_at: datetime
|
|
33
61
|
checkout_site: str
|
|
34
62
|
checkout_stack: tuple[str, ...]
|
|
63
|
+
provenance: PoolHolderProvenance = PoolHolderProvenance()
|
|
35
64
|
current_site: str | None
|
|
36
65
|
current_stack: tuple[str, ...]
|
|
37
66
|
task_done: bool
|
|
@@ -68,6 +97,7 @@ class _TrackedHolder:
|
|
|
68
97
|
acquired_at: datetime
|
|
69
98
|
checkout_site: str
|
|
70
99
|
checkout_stack: tuple[str, ...]
|
|
100
|
+
provenance: PoolHolderProvenance
|
|
71
101
|
state: Literal["held", "releasing"] = "held"
|
|
72
102
|
|
|
73
103
|
|
|
@@ -105,6 +135,26 @@ def _capture_checkout_stack() -> tuple[str, tuple[str, ...]]:
|
|
|
105
135
|
return site, formatted
|
|
106
136
|
|
|
107
137
|
|
|
138
|
+
def _safe_provenance_text(value: Any) -> str | None:
|
|
139
|
+
"""Keep only bounded identifier vocabulary; never persist context payloads."""
|
|
140
|
+
return value if isinstance(value, str) and _PROVENANCE_TEXT.fullmatch(value) else None
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _capture_provenance() -> PoolHolderProvenance:
|
|
144
|
+
"""Project host request context without coupling this package to that host."""
|
|
145
|
+
context = get_active_context()
|
|
146
|
+
if context is None:
|
|
147
|
+
return PoolHolderProvenance()
|
|
148
|
+
return PoolHolderProvenance(
|
|
149
|
+
request_id=_safe_provenance_text(getattr(context, "request_id", None)),
|
|
150
|
+
source_app=_safe_provenance_text(getattr(context, "source_app", None)),
|
|
151
|
+
source_feature=_safe_provenance_text(getattr(context, "source_feature", None)),
|
|
152
|
+
origin_class=_safe_provenance_text(getattr(context, "origin_class", None)),
|
|
153
|
+
execution_kind=_safe_provenance_text(getattr(context, "execution_kind", None)),
|
|
154
|
+
execution_id=_safe_provenance_text(getattr(context, "execution_id", None)),
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
|
|
108
158
|
def _task_stack(task: asyncio.Task[Any]) -> tuple[str | None, tuple[str, ...]]:
|
|
109
159
|
try:
|
|
110
160
|
frames = task.get_stack(limit=_DISPLAY_STACK_LIMIT)
|
|
@@ -122,6 +172,7 @@ def track_connection_holder(config_name: str, connection: Any) -> None:
|
|
|
122
172
|
if task is None:
|
|
123
173
|
return
|
|
124
174
|
checkout_site, checkout_stack = _capture_checkout_stack()
|
|
175
|
+
provenance = _capture_provenance()
|
|
125
176
|
tracked = _TrackedHolder(
|
|
126
177
|
config_name=config_name,
|
|
127
178
|
connection=connection,
|
|
@@ -130,6 +181,7 @@ def track_connection_holder(config_name: str, connection: Any) -> None:
|
|
|
130
181
|
acquired_at=datetime.now(UTC),
|
|
131
182
|
checkout_site=checkout_site,
|
|
132
183
|
checkout_stack=checkout_stack,
|
|
184
|
+
provenance=provenance,
|
|
133
185
|
)
|
|
134
186
|
_holders.setdefault(config_name, {})[id(connection)] = tracked
|
|
135
187
|
|
|
@@ -166,6 +218,7 @@ def connection_holder_census(config_name: str) -> tuple[PoolHolderSnapshot, ...]
|
|
|
166
218
|
acquired_at=tracked.acquired_at,
|
|
167
219
|
checkout_site=tracked.checkout_site,
|
|
168
220
|
checkout_stack=tracked.checkout_stack,
|
|
221
|
+
provenance=tracked.provenance,
|
|
169
222
|
current_site=current_site,
|
|
170
223
|
current_stack=current_stack,
|
|
171
224
|
task_done=tracked.task.done(),
|
|
@@ -304,6 +357,7 @@ def emit_first_pool_timeout(
|
|
|
304
357
|
|
|
305
358
|
|
|
306
359
|
__all__ = [
|
|
360
|
+
"PoolHolderProvenance",
|
|
307
361
|
"PoolHolderSnapshot",
|
|
308
362
|
"PoolSaturationEvent",
|
|
309
363
|
"connection_holder_census",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "matrx-orm"
|
|
3
|
-
version = "3.1.
|
|
3
|
+
version = "3.1.166"
|
|
4
4
|
description = "Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
from types import SimpleNamespace
|
|
4
5
|
from typing import Any
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
7
8
|
|
|
8
9
|
import matrx_orm.core.async_db_manager as manager_module
|
|
10
|
+
import matrx_orm.core.pool_watch as pool_watch
|
|
9
11
|
from matrx_orm.core.async_db_manager import AsyncDatabaseManager
|
|
10
12
|
from matrx_orm.core.pool_watch import (
|
|
13
|
+
PoolHolderProvenance,
|
|
11
14
|
PoolSaturationEvent,
|
|
12
15
|
emit_first_pool_timeout,
|
|
13
16
|
note_pool_recovered,
|
|
@@ -47,6 +50,16 @@ class _OneSlotPool:
|
|
|
47
50
|
return 1
|
|
48
51
|
|
|
49
52
|
|
|
53
|
+
def test_holder_provenance_refuses_unbounded_text() -> None:
|
|
54
|
+
provenance = PoolHolderProvenance(
|
|
55
|
+
request_id="request-ok",
|
|
56
|
+
source_feature="not safe; contains request payload",
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
assert provenance.request_id == "request-ok"
|
|
60
|
+
assert provenance.source_feature is None
|
|
61
|
+
|
|
62
|
+
|
|
50
63
|
@pytest.mark.asyncio
|
|
51
64
|
async def test_first_acquire_timeout_names_deliberate_long_holder(monkeypatch: Any) -> None:
|
|
52
65
|
"""Reproduce the wedge: a holder waits forever while the next acquire times out."""
|
|
@@ -81,6 +94,19 @@ async def test_first_acquire_timeout_names_deliberate_long_holder(monkeypatch: A
|
|
|
81
94
|
monkeypatch.setattr(manager_module, "resolve_database_name", lambda name: name)
|
|
82
95
|
monkeypatch.setattr(manager_module, "get_database_config", lambda _name: {"pool_min": 1})
|
|
83
96
|
monkeypatch.setattr(manager_module, "POOL_ACQUIRE_RETRIES", 0)
|
|
97
|
+
monkeypatch.setattr(
|
|
98
|
+
pool_watch,
|
|
99
|
+
"get_active_context",
|
|
100
|
+
lambda: SimpleNamespace(
|
|
101
|
+
request_id="req-opaque-exists",
|
|
102
|
+
source_app="aidream-api",
|
|
103
|
+
source_feature="opaque-exists-probe",
|
|
104
|
+
origin_class="api",
|
|
105
|
+
execution_kind=None,
|
|
106
|
+
execution_id=None,
|
|
107
|
+
metadata={"never": "captured"},
|
|
108
|
+
),
|
|
109
|
+
)
|
|
84
110
|
|
|
85
111
|
async def deliberate_long_holder() -> None:
|
|
86
112
|
async with AsyncDatabaseManager.get_connection("repro", timeout=0.01):
|
|
@@ -102,6 +128,9 @@ async def test_first_acquire_timeout_names_deliberate_long_holder(monkeypatch: A
|
|
|
102
128
|
holder = event.holders[0]
|
|
103
129
|
assert holder.task_name == "deliberate-long-holder"
|
|
104
130
|
assert "deliberate_long_holder" in holder.checkout_site
|
|
131
|
+
assert holder.provenance.request_id == "req-opaque-exists"
|
|
132
|
+
assert holder.provenance.source_feature == "opaque-exists-probe"
|
|
133
|
+
assert holder.provenance.origin_class == "api"
|
|
105
134
|
assert holder.current_site is not None
|
|
106
135
|
assert "deliberate_long_holder" in holder.current_site
|
|
107
136
|
assert holder.age_seconds >= 0.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/python_sql/table_detailed_relationships.py
RENAMED
|
File without changes
|
{matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/python_sql/table_typescript_relationship.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/resources/additional-assigners-2026-09-12.json
RENAMED
|
File without changes
|
{matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/resources/org_assignment_trigger_baseline.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_orm-3.1.165 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/entity_generators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|