matrx-orm 3.1.149__tar.gz → 3.1.151__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.149 → matrx_orm-3.1.151}/PKG-INFO +1 -1
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/README.md +9 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/fallback.py +33 -14
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/pyproject.toml +1 -1
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_standalone_write_session_context.py +3 -1
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_record_error_bounded_insert.py +66 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/.gitignore +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/AGENTS.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/BASE_CLASS_METHODS.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/CLAUDE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/MODEL_API.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/database/orm/extended/managers/ai_model_base.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/docs/migrations.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/FEATURE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/adapters/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/adapters/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/adapters/async_postgresql.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/adapters/base_adapter.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/adapters/postgresql.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/adapters/supabase_adapter.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/admin/FEATURE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/admin/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/admin/router.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/api/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/api/auth.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/api/config.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/api/handlers.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/api/protocol.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/api/server.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/associations.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/cache_debug.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/catalog.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/catalog_sql.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/client/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/client/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/client/postgres_connection.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/client/postgrest.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/client/supabase_auth.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/client/supabase_config.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/client/supabase_manager.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/EXTENDED-TASK.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/FEATURE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/TASKS.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/async_db_manager.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/base.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/config.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/connections.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/db_function.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/diagnostics.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/expressions.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/extended.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/fields.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/introspection.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/listen.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/loop_filters.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/model_dto.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/model_view.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/one_database.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/paginator.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/pool_maintenance.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/pool_watch.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/pooler_role.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/pydantic_bridge.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/registry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/relations.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/resilience.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/rls_session.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/session_context.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/signals.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/tls.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/transaction.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/types.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/write_queue.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/core/write_retry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/entity.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/error_handling.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/exceptions.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/extended/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/extended/app_error_handler.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/identity_rule.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/local_sqlite.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/middleware/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/middleware/base.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/cli.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/ddl.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/diff.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/executor.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/integration.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/loader.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/operations.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/state.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/migrations/table_filter.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/no_org_assignment.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/FEATURE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/bulk_update_values.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/catalog_select.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/conflict.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/conflict_writes.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/create.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/db_functions.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/delete.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/dynamic_admin.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/dynamic_crud.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/graph_walk.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/latest_rows.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/queue_claim.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/read.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/relational_backfill.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/staging_load.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/operations/update.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/platform_access.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/platform_db.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/py.typed +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/pytest_plugin.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/python_sql/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/python_sql/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/python_sql/db_objects.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/query/FEATURE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/query/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/query/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/query/builder.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/query/executor.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/resources/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/resources/additional-assigners-2026-09-12.json +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/resources/org_assignment_trigger_baseline.json +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/FEATURE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/code_handler.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/codegen_writer.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/columns.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/common.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/diff_preview.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/generator.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/package_wiring.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/relationships.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/runner.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/schema.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/schema_manager.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/tables.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/views.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/FEATURE.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/attachments.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/crypto.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/host_authorization.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/items.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/model.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/mutation_receipts.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/org_service.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/secrets_battery/service.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/coalesce.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/dag.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/errors.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/flush.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/lifecycle.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/managed.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/op.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/reads.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/session.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/session/telemetry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/sql_executor/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/sql_executor/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/sql_executor/executor.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/sql_executor/queries.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/sql_executor/registry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/sql_executor/types.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/sql_executor/utils.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/state.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/utils/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/utils/sql_utils.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/utils/type_converters.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/scripts/git-branches.sh +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/scripts/publish.sh +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/scripts/release.sh +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/conftest.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_adapter_registry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_admin_db_columns.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_admin_response_rendering.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_admin_search_negation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_admin_search_sentinels.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_advisory_lock.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_agent_message.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_api_auth.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_api_config.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_api_handlers.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_api_protocol.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_array_agg_order_by.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_associations.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_associations_wiring.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_bulk_hydration_offload.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_bulk_update_by_pk.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_cache_debug.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_call_function.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_case_when.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_catalog.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_committed_row_guard.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_composite_pk_filter.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_composite_pk_write_paths.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_config.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_conflict_target.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_conflict_writes.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_connection_codecs.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_connection_poison_guard.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_connection_primitives.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_count_composite_distinct.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_count_limit_param_leak.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_db_function_field.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_ddl_generator.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_deadlock_retry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_derived_table.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_dirty_tracking.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_dynamic_crud.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_exceptions.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_expression_primitives.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_fields.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_from_alias.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_fts.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_func_expression_args.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_graph_walk.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_having_annotate_alias.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_introspect_rls_policies.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_join_and_aggregate.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_latest_rows.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_listen_notify.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_local_sqlite.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_lock_contention_retry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_managed_write_guard.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_matrx_entity.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_migration_diff_types.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_migration_loader.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_model_instance.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_model_meta.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_optimistic_concurrency.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_order_by_expression.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_org_assignment_inventory.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_parameter_name_hydration.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_patch_jsonb_path.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_persisted_count.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_pool_holder_census.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_pool_loop_recreation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_pool_maintenance.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_postgrest_filters.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_pydantic_bridge.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_query_builder.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_query_error_detail.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_query_executor_sql.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_query_timeout.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_queue_claim.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_read_connection_retry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_registry.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_registry_multi_database.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_registry_multi_schema.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_relational_backfill.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_relations.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_resilience.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_rls_session_scope.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_schema_exists.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_session_advisory_lock.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_state_cache.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_subquery_filter_raw.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_subquery_in_filter.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_subquery_nested_expressions.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_supabase_auth.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_supabase_config.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_tls.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_transaction_database_identity.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_typed_join_projection.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_typed_predicates.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_update_case_expression.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_update_subquery.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_update_with_rebase.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_upsert_default_leak.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_upsert_with_conflict.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_values_jsonb_decode.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_watched_lifecycle.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_write_queue_deadline.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_write_retry_semantics.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/MODULE_README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/conftest.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_bulk_ops.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_cache_integration.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_crud.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_foreign_keys.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_m2m.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_manager.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_migrations_live.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_query_execution.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/test_schema_diff.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level2/verify_committed_row_guard_pg17.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/live_pooler_role.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project/.env.example +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project/README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project/generate.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project/generated/.gitkeep +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project/matrx_orm.yaml +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project/test_schema_generation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project_desktop/.env.example +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project_desktop/README.md +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project_desktop/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project_desktop/client_example.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project_desktop/client_example.ts +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project_desktop/client_supabase_example.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/sample_project_desktop/server.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/entity_tests.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_base_generation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_composite_pk_fk_generation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_composite_unique_generation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_dto_identity_generation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_entity_capability_generation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_enum_ordering.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_generate_schema.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_junction_analysis.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_multi_schema_output.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_schema_analysis.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_sql_expression_defaults.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_table_relationships_query.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema/test_view_generation.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema_builder/test_array_default_parsing.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema_builder/test_focused_generation_plan.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/schema_builder/test_host_models_aggregator.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/__init__.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/conftest.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_cache_no_downgrade.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_capture_poison_proof.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_coalesce.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_dag.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_disk_spill_fallback.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_flush_individual_fallback.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_governed_write.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_managed.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_op_enqueue_site.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_reads.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_record_error_storm.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_session.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/session/test_spill_guard_plugin.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_array_arg_element_type.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_database_name_alias.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_db_functions.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_dynamic_select_unregistered.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_immutable_insert_or_exact_verify.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_keyed_digest.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_model_cls_refactor.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_no_blocking_asyncpg_tls.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_one_database.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_order_by_desc_nulls_last.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_pooler_role_guard.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_secrets_battery.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_secrets_minting_keys.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_sql_param_casts.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/test_sync_twins_guard.py +0 -0
- {matrx_orm-3.1.149 → matrx_orm-3.1.151}/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.151
|
|
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
|
|
@@ -273,6 +273,15 @@ printed (`storm: … suppressed …`), and folded into the next admitted row as
|
|
|
273
273
|
`context._storm.suppressed_in_previous_window`. Nothing is lost, nothing floods.
|
|
274
274
|
Guard: `tests/session/test_record_error_storm.py`.
|
|
275
275
|
|
|
276
|
+
If the bounded `ops.system_error` insert itself times out or meets a lock, the
|
|
277
|
+
fallback emits exactly one `matrx_orm_system_error_capture_failed` ERROR event.
|
|
278
|
+
Its `matrx_system_error` metadata keeps the original kind/error, request and route,
|
|
279
|
+
plus a bounded, secret-redacted original traceback, the capture exception and operation.
|
|
280
|
+
It never copies the failed capture's payload or context into that app-log event. Do not
|
|
281
|
+
add a `vcprint` banner beside that event: `vcprint` is also captured by the app-log
|
|
282
|
+
handler and would turn one failed capture into two unrelated error families. Guard:
|
|
283
|
+
`tests/session/test_record_error_bounded_insert.py`.
|
|
284
|
+
|
|
276
285
|
## Telemetry (optional)
|
|
277
286
|
|
|
278
287
|
If OpenTelemetry is installed, Session emits spans and metrics:
|
|
@@ -28,6 +28,7 @@ from typing import Any
|
|
|
28
28
|
from uuid import UUID
|
|
29
29
|
|
|
30
30
|
from matrx_utils import vcprint
|
|
31
|
+
from matrx_utils.secret_detection import redact_secrets
|
|
31
32
|
|
|
32
33
|
from matrx_orm.exceptions import describe_db_exception
|
|
33
34
|
from matrx_orm.session.op import SessionOp
|
|
@@ -70,6 +71,11 @@ STORM_ROW_BUDGET = 3
|
|
|
70
71
|
CAPTURE_ACQUIRE_TIMEOUT_SECONDS = 2.0
|
|
71
72
|
CAPTURE_LOCK_TIMEOUT_MS = 1500
|
|
72
73
|
CAPTURE_STATEMENT_TIMEOUT_MS = 2500
|
|
74
|
+
# A failed error capture cannot make the forensic diagnostic itself an
|
|
75
|
+
# unbounded durable log payload. This bound is deliberately below app_log's
|
|
76
|
+
# generic message cap because this is a last-resort, high-frequency path.
|
|
77
|
+
CAPTURE_FAILURE_DIAGNOSTIC_MAX = 8_192
|
|
78
|
+
CAPTURE_FAILURE_DIAGNOSTIC_TRUNCATION_MARKER = "… [truncated]"
|
|
73
79
|
_storm_state: dict[tuple[str, str, str], dict[str, Any]] = {}
|
|
74
80
|
|
|
75
81
|
|
|
@@ -147,6 +153,17 @@ def _serialize_primary_key(pk_field: str, pk_value: str) -> str:
|
|
|
147
153
|
return json.dumps({pk_field: pk_value})
|
|
148
154
|
|
|
149
155
|
|
|
156
|
+
def _capture_failure_diagnostic(value: object) -> str:
|
|
157
|
+
"""Redact and bound text retained when ``system_error`` capture fails."""
|
|
158
|
+
redacted, _ = redact_secrets(str(value))
|
|
159
|
+
if len(redacted) <= CAPTURE_FAILURE_DIAGNOSTIC_MAX:
|
|
160
|
+
return redacted
|
|
161
|
+
prefix_length = CAPTURE_FAILURE_DIAGNOSTIC_MAX - len(
|
|
162
|
+
CAPTURE_FAILURE_DIAGNOSTIC_TRUNCATION_MARKER
|
|
163
|
+
)
|
|
164
|
+
return redacted[:prefix_length] + CAPTURE_FAILURE_DIAGNOSTIC_TRUNCATION_MARKER
|
|
165
|
+
|
|
166
|
+
|
|
150
167
|
def _safe_uuid(value: Any) -> str | None:
|
|
151
168
|
"""Return ``value`` only if it is a valid UUID, else ``None``.
|
|
152
169
|
|
|
@@ -724,27 +741,29 @@ async def record_error(
|
|
|
724
741
|
color="yellow",
|
|
725
742
|
)
|
|
726
743
|
except Exception as capture_exc:
|
|
727
|
-
#
|
|
728
|
-
#
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
"║ matrx-orm — system_error capture FAILED ║\n"
|
|
733
|
-
"╚══════════════════════════════════════════════════════════════════╝\n"
|
|
734
|
-
f" kind: {kind}\n"
|
|
735
|
-
f" error: {resolved_error_text}\n"
|
|
736
|
-
f" capture exc: {type(capture_exc).__name__}: {capture_exc}\n"
|
|
737
|
-
f" traceback:\n{tb_text}",
|
|
738
|
-
color="red",
|
|
739
|
-
)
|
|
744
|
+
# ``vcprint(..., color="red")`` is itself a logger call. Emitting it
|
|
745
|
+
# beside this structured event made ONE failed capture appear as TWO
|
|
746
|
+
# unrelated ERROR families in ``app_log``. Keep one ERROR so the
|
|
747
|
+
# durable log has an exact, queryable incident without concealing the
|
|
748
|
+
# original failure or the bounded-capture refusal.
|
|
740
749
|
logger.error(
|
|
741
750
|
"matrx_orm_system_error_capture_failed",
|
|
742
751
|
extra={
|
|
743
752
|
"matrx_system_error": {
|
|
744
753
|
"kind": kind,
|
|
745
|
-
"
|
|
754
|
+
"error_type": resolved_error_type,
|
|
755
|
+
"error_text": _capture_failure_diagnostic(resolved_error_text),
|
|
746
756
|
"request_id": request_id,
|
|
747
757
|
"user_id": user_id,
|
|
758
|
+
"route": route,
|
|
759
|
+
"capture_exception_type": type(capture_exc).__name__,
|
|
760
|
+
"capture_exception_text": _capture_failure_diagnostic(capture_exc),
|
|
761
|
+
"capture_operation": "ops.system_error.insert",
|
|
762
|
+
# Do not include the original payload or context here: either
|
|
763
|
+
# can contain request secrets. This traceback is the bounded,
|
|
764
|
+
# redacted diagnostic that lets the one surviving app-log event
|
|
765
|
+
# retain the original failure boundary instead.
|
|
766
|
+
"original_traceback": _capture_failure_diagnostic(tb_text),
|
|
748
767
|
}
|
|
749
768
|
},
|
|
750
769
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "matrx-orm"
|
|
3
|
-
version = "3.1.
|
|
3
|
+
version = "3.1.151"
|
|
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" }
|
{matrx_orm-3.1.149 → matrx_orm-3.1.151}/tests/level1/test_standalone_write_session_context.py
RENAMED
|
@@ -108,7 +108,9 @@ async def test_declared_write_without_a_queue_opens_its_own_transaction(monkeypa
|
|
|
108
108
|
configure_session_context(declared_actor_gucs)
|
|
109
109
|
try:
|
|
110
110
|
async with declared_actor("human", "user-1"):
|
|
111
|
-
rows = await AsyncDatabaseManager.execute_write(
|
|
111
|
+
rows = await AsyncDatabaseManager.execute_write(
|
|
112
|
+
"test", "UPDATE public.t SET x = 1"
|
|
113
|
+
)
|
|
112
114
|
finally:
|
|
113
115
|
configure_session_context(None)
|
|
114
116
|
|
|
@@ -14,6 +14,8 @@ set AFTER the INSERT (too late to protect anything).
|
|
|
14
14
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
+
import logging
|
|
18
|
+
|
|
17
19
|
import pytest
|
|
18
20
|
|
|
19
21
|
from matrx_orm.session import fallback
|
|
@@ -87,3 +89,67 @@ async def test_capture_insert_is_bounded_before_it_touches_the_table(monkeypatch
|
|
|
87
89
|
assert log[1] == f"SET LOCAL statement_timeout = '{fallback.CAPTURE_STATEMENT_TIMEOUT_MS}ms'"
|
|
88
90
|
assert log[2].startswith("INSERT INTO ops.system_error")
|
|
89
91
|
assert len(log) == 3
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@pytest.mark.asyncio
|
|
95
|
+
async def test_failed_capture_emits_one_structured_error_not_a_banner_twin(
|
|
96
|
+
monkeypatch: pytest.MonkeyPatch, caplog: pytest.LogCaptureFixture
|
|
97
|
+
) -> None:
|
|
98
|
+
"""One failed insert must remain one durable app-log incident."""
|
|
99
|
+
|
|
100
|
+
capture_secret = "sk-" + "a" * 32
|
|
101
|
+
traceback_sentinel = "TRACEBACK_SENTINEL"
|
|
102
|
+
|
|
103
|
+
async def _failed_insert(**_kwargs) -> None:
|
|
104
|
+
raise RuntimeError(f"lock timeout API_TOKEN={capture_secret}")
|
|
105
|
+
|
|
106
|
+
def _unexpected_banner(*_args, **_kwargs) -> None:
|
|
107
|
+
raise AssertionError("capture failure must not make a second vcprint log event")
|
|
108
|
+
|
|
109
|
+
monkeypatch.setattr(fallback, "_insert_error", _failed_insert)
|
|
110
|
+
monkeypatch.setattr(fallback, "vcprint", _unexpected_banner)
|
|
111
|
+
|
|
112
|
+
with caplog.at_level(logging.ERROR, logger="matrx_orm.session.fallback"):
|
|
113
|
+
await fallback.record_error(
|
|
114
|
+
ValueError("shed"),
|
|
115
|
+
kind="cloud_file_change_feed_shed",
|
|
116
|
+
request_id="request-1",
|
|
117
|
+
user_id="user-1",
|
|
118
|
+
route="/api/cloud-files/changes",
|
|
119
|
+
traceback_text=f"{traceback_sentinel}\nAPI_TOKEN={capture_secret}",
|
|
120
|
+
payload={"access_token": capture_secret},
|
|
121
|
+
context={"credential": capture_secret},
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
records = [
|
|
125
|
+
record
|
|
126
|
+
for record in caplog.records
|
|
127
|
+
if record.name == "matrx_orm.session.fallback"
|
|
128
|
+
and record.getMessage() == "matrx_orm_system_error_capture_failed"
|
|
129
|
+
]
|
|
130
|
+
assert len(records) == 1
|
|
131
|
+
captured = records[0].matrx_system_error
|
|
132
|
+
assert captured == {
|
|
133
|
+
"kind": "cloud_file_change_feed_shed",
|
|
134
|
+
"error_type": "ValueError",
|
|
135
|
+
"error_text": "ValueError: shed",
|
|
136
|
+
"request_id": "request-1",
|
|
137
|
+
"user_id": "user-1",
|
|
138
|
+
"route": "/api/cloud-files/changes",
|
|
139
|
+
"capture_exception_type": "RuntimeError",
|
|
140
|
+
"capture_exception_text": "lock timeout API_TOKEN=<redacted:token>",
|
|
141
|
+
"capture_operation": "ops.system_error.insert",
|
|
142
|
+
"original_traceback": f"{traceback_sentinel}\nAPI_TOKEN=<redacted:API_TOKEN>",
|
|
143
|
+
}
|
|
144
|
+
assert capture_secret not in repr(captured)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def test_capture_failure_diagnostic_is_bounded_and_secret_safe() -> None:
|
|
148
|
+
secret = "sk-" + "b" * 32
|
|
149
|
+
diagnostic = fallback._capture_failure_diagnostic(
|
|
150
|
+
f"API_TOKEN={secret}\n" + "x" * (fallback.CAPTURE_FAILURE_DIAGNOSTIC_MAX + 1)
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
assert secret not in diagnostic
|
|
154
|
+
assert diagnostic.endswith("… [truncated]")
|
|
155
|
+
assert len(diagnostic) <= fallback.CAPTURE_FAILURE_DIAGNOSTIC_MAX
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_orm-3.1.149 → matrx_orm-3.1.151}/matrx_orm/python_sql/table_detailed_relationships.py
RENAMED
|
File without changes
|
{matrx_orm-3.1.149 → matrx_orm-3.1.151}/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.149 → matrx_orm-3.1.151}/matrx_orm/resources/additional-assigners-2026-09-12.json
RENAMED
|
File without changes
|
{matrx_orm-3.1.149 → matrx_orm-3.1.151}/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.149 → matrx_orm-3.1.151}/matrx_orm/schema_builder/helpers/entity_generators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|