matrx-orm 3.1.46__tar.gz → 3.1.48__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.46 → matrx_orm-3.1.48}/PKG-INFO +1 -1
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/db_function.py +18 -8
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/pyproject.toml +1 -1
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_call_function.py +11 -11
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_db_function_field.py +3 -3
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/.gitignore +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/AGENTS.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/BASE_CLASS_METHODS.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/CLAUDE.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/MODEL_API.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/database/orm/extended/managers/ai_model_base.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/docs/migrations.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/adapters/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/adapters/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/adapters/async_postgresql.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/adapters/base_adapter.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/adapters/postgresql.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/adapters/supabase_adapter.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/admin/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/admin/router.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/api/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/api/auth.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/api/config.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/api/handlers.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/api/protocol.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/api/server.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/associations.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/cache_debug.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/catalog.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/client/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/client/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/client/postgres_connection.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/client/postgrest.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/client/supabase_auth.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/client/supabase_config.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/client/supabase_manager.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/EXTENDED-TASK.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/FEATURE.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/TASKS.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/async_db_manager.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/base.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/config.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/connections.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/diagnostics.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/expressions.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/extended.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/fields.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/introspection.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/listen.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/loop_filters.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/model_dto.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/model_view.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/paginator.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/pool_maintenance.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/pydantic_bridge.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/registry.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/relations.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/resilience.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/rls_session.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/signals.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/tls.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/transaction.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/types.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/core/write_queue.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/entity.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/error_handling.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/exceptions.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/extended/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/extended/app_error_handler.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/identity_rule.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/middleware/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/middleware/base.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/cli.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/ddl.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/diff.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/executor.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/integration.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/loader.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/operations.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/state.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/migrations/table_filter.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/bulk_update_values.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/conflict.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/conflict_writes.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/create.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/db_functions.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/delete.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/dynamic_admin.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/dynamic_crud.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/graph_walk.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/latest_rows.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/queue_claim.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/read.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/relational_backfill.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/staging_load.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/operations/update.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/py.typed +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/python_sql/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/python_sql/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/python_sql/db_objects.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/query/FEATURE.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/query/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/query/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/query/builder.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/query/executor.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/code_handler.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/codegen_writer.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/columns.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/common.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/diff_preview.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/generator.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/package_wiring.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/relationships.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/runner.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/schema.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/schema_manager.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/tables.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/schema_builder/views.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/secrets_battery/FEATURE.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/secrets_battery/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/secrets_battery/crypto.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/secrets_battery/items.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/secrets_battery/model.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/secrets_battery/org_service.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/secrets_battery/service.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/coalesce.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/dag.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/errors.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/fallback.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/flush.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/lifecycle.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/managed.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/op.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/reads.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/session.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/session/telemetry.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/sql_executor/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/sql_executor/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/sql_executor/executor.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/sql_executor/queries.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/sql_executor/registry.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/sql_executor/types.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/sql_executor/utils.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/state.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/utils/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/utils/sql_utils.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/matrx_orm/utils/type_converters.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/scripts/git-branches.sh +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/scripts/publish.sh +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/scripts/release.sh +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/conftest.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_admin_db_columns.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_admin_search_negation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_admin_search_sentinels.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_advisory_lock.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_agent_message.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_api_auth.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_api_config.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_api_handlers.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_api_protocol.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_array_agg_order_by.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_associations.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_bulk_update_by_pk.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_cache_debug.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_case_when.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_catalog.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_composite_pk_filter.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_composite_pk_write_paths.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_config.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_conflict_target.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_conflict_writes.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_connection_codecs.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_connection_poison_guard.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_connection_primitives.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_count_composite_distinct.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_ddl_generator.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_derived_table.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_dirty_tracking.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_dynamic_crud.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_exceptions.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_expression_primitives.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_fields.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_from_alias.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_fts.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_func_expression_args.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_graph_walk.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_having_annotate_alias.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_introspect_rls_policies.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_join_and_aggregate.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_latest_rows.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_listen_notify.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_managed_write_guard.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_matrx_entity.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_migration_diff_types.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_migration_loader.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_model_instance.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_model_meta.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_order_by_expression.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_patch_jsonb_path.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_pool_loop_recreation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_pool_maintenance.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_postgrest_filters.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_pydantic_bridge.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_query_builder.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_query_error_detail.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_query_executor_sql.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_query_timeout.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_queue_claim.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_registry.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_registry_multi_database.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_registry_multi_schema.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_relational_backfill.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_relations.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_resilience.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_schema_exists.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_session_advisory_lock.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_state_cache.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_subquery_filter_raw.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_subquery_in_filter.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_supabase_auth.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_supabase_config.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_tls.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_typed_join_projection.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_typed_predicates.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_update_case_expression.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_update_subquery.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_upsert_default_leak.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_upsert_with_conflict.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_values_jsonb_decode.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_watched_lifecycle.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level1/test_write_retry_semantics.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/MODULE_README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/conftest.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_bulk_ops.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_cache_integration.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_crud.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_foreign_keys.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_m2m.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_manager.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_migrations_live.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_query_execution.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/level2/test_schema_diff.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project/.env.example +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project/README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project/generate.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project/generated/.gitkeep +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project/matrx_orm.yaml +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project/test_schema_generation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project_desktop/.env.example +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project_desktop/README.md +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project_desktop/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project_desktop/client_example.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project_desktop/client_example.ts +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project_desktop/client_supabase_example.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/sample_project_desktop/server.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/entity_tests.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_base_generation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_composite_pk_fk_generation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_composite_unique_generation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_dto_identity_generation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_entity_capability_generation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_generate_schema.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_junction_analysis.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_multi_schema_output.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_sql_expression_defaults.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema/test_view_generation.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/schema_builder/test_focused_generation_plan.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/__init__.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/conftest.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_cache_no_downgrade.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_capture_poison_proof.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_coalesce.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_dag.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_disk_spill_fallback.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_flush_individual_fallback.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_governed_write.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_managed.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_op_enqueue_site.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_reads.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/session/test_session.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/test_database_name_alias.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/test_db_functions.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/test_model_cls_refactor.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/test_no_blocking_asyncpg_tls.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/test_secrets_battery.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/test_sql_param_casts.py +0 -0
- {matrx_orm-3.1.46 → matrx_orm-3.1.48}/tests/test_sync_twins_guard.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matrx-orm
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.48
|
|
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
|
|
@@ -127,13 +127,14 @@ def _validate_identifier(name: str, kind: str) -> None:
|
|
|
127
127
|
)
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
async def call_function(
|
|
130
|
+
async def call_function( # noqa: ASYNC109 — maps onto asyncpg's per-call timeout
|
|
131
131
|
database: str,
|
|
132
132
|
schema: str,
|
|
133
133
|
function: str,
|
|
134
134
|
*args: Any,
|
|
135
135
|
mode: Literal["scalar", "none", "rows"] = "scalar",
|
|
136
136
|
field: str | None = None,
|
|
137
|
+
timeout: float | None = None,
|
|
137
138
|
) -> Any:
|
|
138
139
|
"""Call ``schema.function(args...)`` and return its value.
|
|
139
140
|
|
|
@@ -154,6 +155,12 @@ async def call_function(
|
|
|
154
155
|
just this field (``(schema.function(args)).field``) instead of
|
|
155
156
|
decoding the whole row. Mutually exclusive with ``mode="none"``
|
|
156
157
|
and ``mode="rows"``.
|
|
158
|
+
timeout: per-call driver timeout in seconds, overriding the pool's
|
|
159
|
+
``command_timeout`` (default 10s). Use for known-slow analytical
|
|
160
|
+
functions (aggregation RPCs) that legitimately exceed the pool
|
|
161
|
+
default; ``None`` keeps the pool's setting. A server-side
|
|
162
|
+
``statement_timeout`` (e.g. from ``rls_session``) still applies
|
|
163
|
+
independently.
|
|
157
164
|
|
|
158
165
|
Returns:
|
|
159
166
|
The scalar value (mode="scalar"), ``None`` (mode="none"), or
|
|
@@ -180,21 +187,21 @@ async def call_function(
|
|
|
180
187
|
active_conn = get_active_connection()
|
|
181
188
|
if active_conn is not None:
|
|
182
189
|
if mode == "none":
|
|
183
|
-
await active_conn.execute(sql, *bound_args)
|
|
190
|
+
await active_conn.execute(sql, *bound_args, timeout=timeout)
|
|
184
191
|
return None
|
|
185
192
|
if mode == "rows":
|
|
186
|
-
rows = await active_conn.fetch(sql, *bound_args)
|
|
193
|
+
rows = await active_conn.fetch(sql, *bound_args, timeout=timeout)
|
|
187
194
|
return [dict(r) for r in rows]
|
|
188
|
-
return await active_conn.fetchval(sql, *bound_args)
|
|
195
|
+
return await active_conn.fetchval(sql, *bound_args, timeout=timeout)
|
|
189
196
|
|
|
190
197
|
async with AsyncDatabaseManager.get_connection(database) as conn:
|
|
191
198
|
if mode == "none":
|
|
192
|
-
await conn.execute(sql, *bound_args)
|
|
199
|
+
await conn.execute(sql, *bound_args, timeout=timeout)
|
|
193
200
|
return None
|
|
194
201
|
if mode == "rows":
|
|
195
|
-
rows = await conn.fetch(sql, *bound_args)
|
|
202
|
+
rows = await conn.fetch(sql, *bound_args, timeout=timeout)
|
|
196
203
|
return [dict(r) for r in rows]
|
|
197
|
-
return await conn.fetchval(sql, *bound_args)
|
|
204
|
+
return await conn.fetchval(sql, *bound_args, timeout=timeout)
|
|
198
205
|
|
|
199
206
|
|
|
200
207
|
def call_function_sync(
|
|
@@ -204,6 +211,7 @@ def call_function_sync(
|
|
|
204
211
|
*args: Any,
|
|
205
212
|
mode: Literal["scalar", "none", "rows"] = "scalar",
|
|
206
213
|
field: str | None = None,
|
|
214
|
+
timeout: float | None = None,
|
|
207
215
|
) -> Any:
|
|
208
216
|
"""Synchronous twin of :func:`call_function`. Sync contexts only."""
|
|
209
217
|
import asyncio
|
|
@@ -218,4 +226,6 @@ def call_function_sync(
|
|
|
218
226
|
except RuntimeError as e:
|
|
219
227
|
if "no running event loop" not in str(e):
|
|
220
228
|
raise
|
|
221
|
-
return run_sync(
|
|
229
|
+
return run_sync(
|
|
230
|
+
call_function(database, schema, function, *args, mode=mode, field=field, timeout=timeout)
|
|
231
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "matrx-orm"
|
|
3
|
-
version = "3.1.
|
|
3
|
+
version = "3.1.48"
|
|
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" }
|
|
@@ -61,7 +61,7 @@ class TestScalarMode:
|
|
|
61
61
|
result = await call_function("db", "scraper", "canonical_url", "https://Example.com")
|
|
62
62
|
assert result == "https://example.com/"
|
|
63
63
|
conn.fetchval.assert_awaited_once_with(
|
|
64
|
-
'SELECT "scraper"."canonical_url"($1)', "https://Example.com"
|
|
64
|
+
'SELECT "scraper"."canonical_url"($1)', "https://Example.com", timeout=None
|
|
65
65
|
)
|
|
66
66
|
conn.execute.assert_not_called()
|
|
67
67
|
|
|
@@ -73,7 +73,7 @@ class TestScalarMode:
|
|
|
73
73
|
)
|
|
74
74
|
await call_function("db", "scraper", "some_func", "a", "b", "c")
|
|
75
75
|
conn.fetchval.assert_awaited_once_with(
|
|
76
|
-
'SELECT "scraper"."some_func"($1, $2, $3)', "a", "b", "c"
|
|
76
|
+
'SELECT "scraper"."some_func"($1, $2, $3)', "a", "b", "c", timeout=None
|
|
77
77
|
)
|
|
78
78
|
|
|
79
79
|
|
|
@@ -94,7 +94,7 @@ class TestJsonbArgBinding:
|
|
|
94
94
|
"user-id",
|
|
95
95
|
"canvas-id",
|
|
96
96
|
"title",
|
|
97
|
-
'{"data": "hello", "type": "code", "metadata": {}}',
|
|
97
|
+
'{"data": "hello", "type": "code", "metadata": {}}', timeout=None
|
|
98
98
|
)
|
|
99
99
|
|
|
100
100
|
async def test_list_arg_serialized_and_cast(self, monkeypatch) -> None:
|
|
@@ -105,7 +105,7 @@ class TestJsonbArgBinding:
|
|
|
105
105
|
)
|
|
106
106
|
await call_function("db", "scraper", "some_func", ["a", "b"])
|
|
107
107
|
conn.fetchval.assert_awaited_once_with(
|
|
108
|
-
'SELECT "scraper"."some_func"($1::jsonb)', '["a", "b"]'
|
|
108
|
+
'SELECT "scraper"."some_func"($1::jsonb)', '["a", "b"]', timeout=None
|
|
109
109
|
)
|
|
110
110
|
|
|
111
111
|
async def test_mixed_args_only_dict_gets_cast(self, monkeypatch) -> None:
|
|
@@ -116,7 +116,7 @@ class TestJsonbArgBinding:
|
|
|
116
116
|
)
|
|
117
117
|
await call_function("db", "scraper", "some_func", "plain", {"k": "v"}, 5)
|
|
118
118
|
conn.fetchval.assert_awaited_once_with(
|
|
119
|
-
'SELECT "scraper"."some_func"($1, $2::jsonb, $3)', "plain", '{"k": "v"}', 5
|
|
119
|
+
'SELECT "scraper"."some_func"($1, $2::jsonb, $3)', "plain", '{"k": "v"}', 5, timeout=None
|
|
120
120
|
)
|
|
121
121
|
|
|
122
122
|
|
|
@@ -134,7 +134,7 @@ class TestArrayArgBinding:
|
|
|
134
134
|
conn.fetchval.assert_awaited_once_with(
|
|
135
135
|
'SELECT "public"."resolve_full_context"($1, $2)',
|
|
136
136
|
"user-id",
|
|
137
|
-
["scope-1", "scope-2"],
|
|
137
|
+
["scope-1", "scope-2"], timeout=None
|
|
138
138
|
)
|
|
139
139
|
|
|
140
140
|
async def test_array_arg_none_binds_none(self, monkeypatch) -> None:
|
|
@@ -145,7 +145,7 @@ class TestArrayArgBinding:
|
|
|
145
145
|
)
|
|
146
146
|
await call_function("db", "public", "resolve_full_context", "user-id", ArrayArg(None))
|
|
147
147
|
conn.fetchval.assert_awaited_once_with(
|
|
148
|
-
'SELECT "public"."resolve_full_context"($1, $2)', "user-id", None
|
|
148
|
+
'SELECT "public"."resolve_full_context"($1, $2)', "user-id", None, timeout=None
|
|
149
149
|
)
|
|
150
150
|
|
|
151
151
|
async def test_array_arg_distinct_from_plain_list_jsonb_cast(self, monkeypatch) -> None:
|
|
@@ -157,7 +157,7 @@ class TestArrayArgBinding:
|
|
|
157
157
|
# A bare list still gets the jsonb treatment — ArrayArg is opt-in.
|
|
158
158
|
await call_function("db", "scraper", "some_func", ["a", "b"])
|
|
159
159
|
conn.fetchval.assert_awaited_once_with(
|
|
160
|
-
'SELECT "scraper"."some_func"($1::jsonb)', '["a", "b"]'
|
|
160
|
+
'SELECT "scraper"."some_func"($1::jsonb)', '["a", "b"]', timeout=None
|
|
161
161
|
)
|
|
162
162
|
|
|
163
163
|
|
|
@@ -173,7 +173,7 @@ class TestNoneMode:
|
|
|
173
173
|
)
|
|
174
174
|
assert result is None
|
|
175
175
|
conn.execute.assert_awaited_once_with(
|
|
176
|
-
'SELECT "scraper"."reconcile_site_after_run"($1)', "run-uuid"
|
|
176
|
+
'SELECT "scraper"."reconcile_site_after_run"($1)', "run-uuid", timeout=None
|
|
177
177
|
)
|
|
178
178
|
conn.fetchval.assert_not_called()
|
|
179
179
|
|
|
@@ -188,7 +188,7 @@ class TestActiveTransactionReuse:
|
|
|
188
188
|
tx_module._active_connection.reset(token)
|
|
189
189
|
assert result == 7
|
|
190
190
|
conn.fetchval.assert_awaited_once_with(
|
|
191
|
-
'SELECT "scraper"."sync_gsc_into_site_pages"($1)', "site-id"
|
|
191
|
+
'SELECT "scraper"."sync_gsc_into_site_pages"($1)', "site-id", timeout=None
|
|
192
192
|
)
|
|
193
193
|
|
|
194
194
|
async def test_reuses_active_connection_none_mode(self) -> None:
|
|
@@ -202,6 +202,6 @@ class TestActiveTransactionReuse:
|
|
|
202
202
|
tx_module._active_connection.reset(token)
|
|
203
203
|
assert result is None
|
|
204
204
|
conn.execute.assert_awaited_once_with(
|
|
205
|
-
'SELECT "scraper"."reconcile_site_after_run"($1)', "run-id"
|
|
205
|
+
'SELECT "scraper"."reconcile_site_after_run"($1)', "run-id", timeout=None
|
|
206
206
|
)
|
|
207
207
|
conn.fetchval.assert_not_called()
|
|
@@ -26,14 +26,14 @@ class _FakeConn:
|
|
|
26
26
|
def __init__(self) -> None:
|
|
27
27
|
self.calls: list[dict[str, Any]] = []
|
|
28
28
|
|
|
29
|
-
async def fetchval(self, sql: str, *args: Any) -> Any:
|
|
29
|
+
async def fetchval(self, sql: str, *args: Any, **kwargs: Any) -> Any:
|
|
30
30
|
self.calls.append({"sql": sql, "args": args})
|
|
31
31
|
return "grant-id-123"
|
|
32
32
|
|
|
33
|
-
async def execute(self, sql: str, *args: Any) -> None:
|
|
33
|
+
async def execute(self, sql: str, *args: Any, **kwargs: Any) -> None:
|
|
34
34
|
self.calls.append({"sql": sql, "args": args})
|
|
35
35
|
|
|
36
|
-
async def fetch(self, sql: str, *args: Any) -> list[Any]:
|
|
36
|
+
async def fetch(self, sql: str, *args: Any, **kwargs: Any) -> list[Any]:
|
|
37
37
|
self.calls.append({"sql": sql, "args": args})
|
|
38
38
|
return [_FakeRecord(id="1", term="foo"), _FakeRecord(id="2", term="bar")]
|
|
39
39
|
|
|
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
|
|
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
|