matrx-orm 3.1.26__tar.gz → 3.1.28__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/PKG-INFO +1 -1
  2. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/MODULE_README.md +9 -0
  3. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/pydantic_bridge.py +7 -8
  4. matrx_orm-3.1.28/matrx_orm/operations/db_functions.py +78 -0
  5. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/pyproject.toml +1 -1
  6. matrx_orm-3.1.28/tests/level1/test_pydantic_bridge.py +33 -0
  7. matrx_orm-3.1.28/tests/test_db_functions.py +43 -0
  8. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/.gitignore +0 -0
  9. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/AGENTS.md +0 -0
  10. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/BASE_CLASS_METHODS.md +0 -0
  11. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/CLAUDE.md +0 -0
  12. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/MODEL_API.md +0 -0
  13. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/README.md +0 -0
  14. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/database/orm/extended/managers/ai_model_base.py +0 -0
  15. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/docs/migrations.md +0 -0
  16. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/MODULE_README.md +0 -0
  17. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/__init__.py +0 -0
  18. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/adapters/MODULE_README.md +0 -0
  19. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/adapters/__init__.py +0 -0
  20. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/adapters/async_postgresql.py +0 -0
  21. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/adapters/base_adapter.py +0 -0
  22. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/adapters/postgresql.py +0 -0
  23. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
  24. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/adapters/supabase_adapter.py +0 -0
  25. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/admin/__init__.py +0 -0
  26. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/admin/router.py +0 -0
  27. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/api/__init__.py +0 -0
  28. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/api/auth.py +0 -0
  29. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/api/config.py +0 -0
  30. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/api/handlers.py +0 -0
  31. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/api/protocol.py +0 -0
  32. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/api/server.py +0 -0
  33. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/associations.py +0 -0
  34. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/cache_debug.py +0 -0
  35. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/client/MODULE_README.md +0 -0
  36. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/client/__init__.py +0 -0
  37. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/client/postgres_connection.py +0 -0
  38. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/client/postgrest.py +0 -0
  39. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/client/supabase_auth.py +0 -0
  40. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/client/supabase_config.py +0 -0
  41. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/client/supabase_manager.py +0 -0
  42. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/EXTENDED-TASK.md +0 -0
  43. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
  44. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/TASKS.md +0 -0
  45. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/__init__.py +0 -0
  46. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/async_db_manager.py +0 -0
  47. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/base.py +0 -0
  48. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/config.py +0 -0
  49. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/db_function.py +0 -0
  50. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/diagnostics.py +0 -0
  51. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/expressions.py +0 -0
  52. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/extended.py +0 -0
  53. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/fields.py +0 -0
  54. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/introspection.py +0 -0
  55. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/listen.py +0 -0
  56. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/loop_filters.py +0 -0
  57. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/model_dto.py +0 -0
  58. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/model_view.py +0 -0
  59. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/paginator.py +0 -0
  60. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/pool_maintenance.py +0 -0
  61. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/registry.py +0 -0
  62. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/relations.py +0 -0
  63. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/resilience.py +0 -0
  64. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/rls_session.py +0 -0
  65. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/signals.py +0 -0
  66. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/tls.py +0 -0
  67. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/transaction.py +0 -0
  68. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/types.py +0 -0
  69. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/core/write_queue.py +0 -0
  70. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/entity.py +0 -0
  71. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/error_handling.py +0 -0
  72. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/exceptions.py +0 -0
  73. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/extended/__init__.py +0 -0
  74. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/extended/app_error_handler.py +0 -0
  75. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/identity_rule.py +0 -0
  76. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/middleware/__init__.py +0 -0
  77. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/middleware/base.py +0 -0
  78. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/MODULE_README.md +0 -0
  79. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/__init__.py +0 -0
  80. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/cli.py +0 -0
  81. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/ddl.py +0 -0
  82. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/diff.py +0 -0
  83. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/executor.py +0 -0
  84. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/integration.py +0 -0
  85. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/loader.py +0 -0
  86. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/operations.py +0 -0
  87. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/state.py +0 -0
  88. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/migrations/table_filter.py +0 -0
  89. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/MODULE_README.md +0 -0
  90. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/__init__.py +0 -0
  91. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/bulk_update_values.py +0 -0
  92. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/conflict.py +0 -0
  93. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/conflict_writes.py +0 -0
  94. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/create.py +0 -0
  95. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/delete.py +0 -0
  96. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/dynamic_admin.py +0 -0
  97. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/queue_claim.py +0 -0
  98. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/read.py +0 -0
  99. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/staging_load.py +0 -0
  100. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/operations/update.py +0 -0
  101. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/py.typed +0 -0
  102. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/python_sql/MODULE_README.md +0 -0
  103. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/python_sql/__init__.py +0 -0
  104. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/python_sql/db_objects.py +0 -0
  105. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
  106. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
  107. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/query/MODULE_README.md +0 -0
  108. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/query/__init__.py +0 -0
  109. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/query/builder.py +0 -0
  110. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/query/executor.py +0 -0
  111. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/MODULE_README.md +0 -0
  112. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/__init__.py +0 -0
  113. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/code_handler.py +0 -0
  114. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/codegen_writer.py +0 -0
  115. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/columns.py +0 -0
  116. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/common.py +0 -0
  117. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/diff_preview.py +0 -0
  118. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
  119. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/generator.py +0 -0
  120. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
  121. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
  122. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
  123. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
  124. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/package_wiring.py +0 -0
  125. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/relationships.py +0 -0
  126. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/runner.py +0 -0
  127. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/schema.py +0 -0
  128. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/schema_manager.py +0 -0
  129. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/tables.py +0 -0
  130. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/schema_builder/views.py +0 -0
  131. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/secrets_battery/FEATURE.md +0 -0
  132. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/secrets_battery/__init__.py +0 -0
  133. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/secrets_battery/crypto.py +0 -0
  134. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/secrets_battery/model.py +0 -0
  135. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/secrets_battery/org_service.py +0 -0
  136. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/secrets_battery/service.py +0 -0
  137. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/README.md +0 -0
  138. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/__init__.py +0 -0
  139. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/coalesce.py +0 -0
  140. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/dag.py +0 -0
  141. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/errors.py +0 -0
  142. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/fallback.py +0 -0
  143. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/flush.py +0 -0
  144. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/lifecycle.py +0 -0
  145. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/managed.py +0 -0
  146. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/op.py +0 -0
  147. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/reads.py +0 -0
  148. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/session.py +0 -0
  149. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/session/telemetry.py +0 -0
  150. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/sql_executor/MODULE_README.md +0 -0
  151. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/sql_executor/__init__.py +0 -0
  152. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/sql_executor/executor.py +0 -0
  153. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/sql_executor/queries.py +0 -0
  154. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/sql_executor/registry.py +0 -0
  155. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/sql_executor/types.py +0 -0
  156. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/sql_executor/utils.py +0 -0
  157. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/state.py +0 -0
  158. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/utils/__init__.py +0 -0
  159. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/utils/sql_utils.py +0 -0
  160. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/matrx_orm/utils/type_converters.py +0 -0
  161. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/scripts/git-branches.sh +0 -0
  162. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/scripts/publish.sh +0 -0
  163. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/scripts/release.sh +0 -0
  164. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/MODULE_README.md +0 -0
  165. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/__init__.py +0 -0
  166. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/conftest.py +0 -0
  167. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/MODULE_README.md +0 -0
  168. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/__init__.py +0 -0
  169. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_admin_db_columns.py +0 -0
  170. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_admin_search_negation.py +0 -0
  171. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_admin_search_sentinels.py +0 -0
  172. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_advisory_lock.py +0 -0
  173. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_agent_message.py +0 -0
  174. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_api_auth.py +0 -0
  175. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_api_config.py +0 -0
  176. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_api_handlers.py +0 -0
  177. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_api_protocol.py +0 -0
  178. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_array_agg_order_by.py +0 -0
  179. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_associations.py +0 -0
  180. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_bulk_update_by_pk.py +0 -0
  181. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
  182. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_cache_debug.py +0 -0
  183. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_call_function.py +0 -0
  184. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_case_when.py +0 -0
  185. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_composite_pk_filter.py +0 -0
  186. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_composite_pk_write_paths.py +0 -0
  187. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_config.py +0 -0
  188. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_conflict_target.py +0 -0
  189. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_conflict_writes.py +0 -0
  190. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_connection_codecs.py +0 -0
  191. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_connection_poison_guard.py +0 -0
  192. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_count_composite_distinct.py +0 -0
  193. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_db_function_field.py +0 -0
  194. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_ddl_generator.py +0 -0
  195. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_derived_table.py +0 -0
  196. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_dirty_tracking.py +0 -0
  197. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_exceptions.py +0 -0
  198. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_execute_admin_sql.py +0 -0
  199. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_expression_primitives.py +0 -0
  200. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_fields.py +0 -0
  201. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
  202. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_filter_raw.py +0 -0
  203. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_from_alias.py +0 -0
  204. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_fts.py +0 -0
  205. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_func_expression_args.py +0 -0
  206. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_having_annotate_alias.py +0 -0
  207. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
  208. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_introspect_rls_policies.py +0 -0
  209. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_join_and_aggregate.py +0 -0
  210. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_listen_notify.py +0 -0
  211. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_managed_write_guard.py +0 -0
  212. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_matrx_entity.py +0 -0
  213. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_migration_diff_types.py +0 -0
  214. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_migration_loader.py +0 -0
  215. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_model_instance.py +0 -0
  216. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_model_meta.py +0 -0
  217. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_order_by_expression.py +0 -0
  218. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_patch_jsonb_path.py +0 -0
  219. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_pool_maintenance.py +0 -0
  220. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_postgrest_filters.py +0 -0
  221. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_query_builder.py +0 -0
  222. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_query_error_detail.py +0 -0
  223. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_query_executor_sql.py +0 -0
  224. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_query_timeout.py +0 -0
  225. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
  226. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_queue_claim.py +0 -0
  227. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_registry.py +0 -0
  228. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_registry_multi_database.py +0 -0
  229. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_registry_multi_schema.py +0 -0
  230. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_relations.py +0 -0
  231. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_resilience.py +0 -0
  232. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_schema_exists.py +0 -0
  233. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_session_advisory_lock.py +0 -0
  234. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_state_cache.py +0 -0
  235. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_subquery_filter_raw.py +0 -0
  236. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_subquery_in_filter.py +0 -0
  237. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_supabase_auth.py +0 -0
  238. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_supabase_config.py +0 -0
  239. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_tls.py +0 -0
  240. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_update_case_expression.py +0 -0
  241. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_update_subquery.py +0 -0
  242. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_upsert_with_conflict.py +0 -0
  243. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_values_jsonb_decode.py +0 -0
  244. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_watched_lifecycle.py +0 -0
  245. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level1/test_write_retry_semantics.py +0 -0
  246. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/MODULE_README.md +0 -0
  247. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/__init__.py +0 -0
  248. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/conftest.py +0 -0
  249. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_bulk_ops.py +0 -0
  250. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_cache_integration.py +0 -0
  251. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_crud.py +0 -0
  252. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_foreign_keys.py +0 -0
  253. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_m2m.py +0 -0
  254. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_manager.py +0 -0
  255. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_migrations_live.py +0 -0
  256. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_query_execution.py +0 -0
  257. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/level2/test_schema_diff.py +0 -0
  258. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project/.env.example +0 -0
  259. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project/README.md +0 -0
  260. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project/__init__.py +0 -0
  261. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project/generate.py +0 -0
  262. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project/generated/.gitkeep +0 -0
  263. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project/matrx_orm.yaml +0 -0
  264. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project/test_schema_generation.py +0 -0
  265. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project_desktop/.env.example +0 -0
  266. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project_desktop/README.md +0 -0
  267. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project_desktop/__init__.py +0 -0
  268. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project_desktop/client_example.py +0 -0
  269. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project_desktop/client_example.ts +0 -0
  270. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project_desktop/client_supabase_example.py +0 -0
  271. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/sample_project_desktop/server.py +0 -0
  272. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/entity_tests.py +0 -0
  273. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_base_generation.py +0 -0
  274. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_composite_pk_fk_generation.py +0 -0
  275. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_composite_unique_generation.py +0 -0
  276. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_dto_identity_generation.py +0 -0
  277. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_entity_capability_generation.py +0 -0
  278. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_generate_schema.py +0 -0
  279. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_multi_schema_output.py +0 -0
  280. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_sql_expression_defaults.py +0 -0
  281. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema/test_view_generation.py +0 -0
  282. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/schema_builder/test_focused_generation_plan.py +0 -0
  283. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/__init__.py +0 -0
  284. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/conftest.py +0 -0
  285. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_capture_poison_proof.py +0 -0
  286. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_coalesce.py +0 -0
  287. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_dag.py +0 -0
  288. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_disk_spill_fallback.py +0 -0
  289. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_flush_individual_fallback.py +0 -0
  290. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_governed_write.py +0 -0
  291. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_managed.py +0 -0
  292. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_op_enqueue_site.py +0 -0
  293. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_reads.py +0 -0
  294. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/session/test_session.py +0 -0
  295. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/test_database_name_alias.py +0 -0
  296. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/test_model_cls_refactor.py +0 -0
  297. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/test_no_blocking_asyncpg_tls.py +0 -0
  298. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/test_secrets_battery.py +0 -0
  299. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/tests/test_sql_param_casts.py +0 -0
  300. {matrx_orm-3.1.26 → matrx_orm-3.1.28}/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.26
3
+ Version: 3.1.28
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
@@ -28,6 +28,15 @@ python utils/code_context/generate_module_readme.py src/matrx_orm/core --mode si
28
28
 
29
29
  ## Architecture
30
30
 
31
+ ### Pydantic bridge default invariant
32
+
33
+ `pydantic_bridge.py` derives input/output schemas from ORM fields. Every
34
+ non-`None` static field default is normalized through that field's `to_python`
35
+ conversion before it is attached to the generated Pydantic schema. This keeps
36
+ defaults canonical even though Pydantic does not validate defaults by default
37
+ (for example, `DecimalField(default=0)` exposes `Decimal("0")`, not an `int`) and
38
+ prevents serializer type warnings at API boundaries.
39
+
31
40
  > **Fill this in.** Describe the execution flow and layer map for this module.
32
41
  > See `utils/code_context/MODULE_README_SPEC.md` for the recommended format.
33
42
  >
@@ -210,7 +210,6 @@ def _field_annotation(field: Any, *, partial: bool) -> tuple[Any, Any]:
210
210
  from matrx_orm.core.fields import ( # noqa: PLC0415
211
211
  DateField,
212
212
  DateTimeField,
213
- EnumField,
214
213
  ForeignKey,
215
214
  TimeField,
216
215
  )
@@ -218,15 +217,15 @@ def _field_annotation(field: Any, *, partial: bool) -> tuple[Any, Any]:
218
217
  py_type = field.python_type()
219
218
 
220
219
  def _default() -> Any:
221
- """ORM field defaults for EnumField are often bare strings
222
- (``default='internal'`` in generated models). Pydantic v2 does not
223
- re-validate defaults, so a string default on an Enum-typed field
224
- survives onto the instance and ``model_dump()`` emits
225
- ``PydanticSerializationUnexpectedValue``. Coerce via ``to_python``
226
- so the schema default is a real enum member.
220
+ """Coerce ORM defaults into each field's canonical Python type.
221
+
222
+ Pydantic v2 does not re-validate defaults. Generated model defaults
223
+ therefore otherwise retain their DB-literal types (for example ``0``
224
+ on a DecimalField or ``"internal"`` on an EnumField), and
225
+ ``model_dump()`` emits ``PydanticSerializationUnexpectedValue``.
227
226
  """
228
227
  value = field.get_default()
229
- if isinstance(field, EnumField) and value is not None:
228
+ if value is not None:
230
229
  try:
231
230
  return field.to_python(value)
232
231
  except (TypeError, ValueError):
@@ -0,0 +1,78 @@
1
+ """Generic Postgres function-call primitive.
2
+
3
+ Databases increasingly own logic as ``schema.fn_*`` functions (identity
4
+ upserts, jsonb merges, ingestion RPCs). Application code must never
5
+ re-implement them and must never hand-write ``SELECT ... FROM schema.fn(...)``
6
+ strings — this module is the ONE place that renders that statement.
7
+
8
+ ``call_db_function`` executes ``SELECT * FROM <schema.fn>($1, $2, ...)`` on a
9
+ model's database (or a named database config) and returns the result rows as
10
+ plain dicts. It routes through ``AsyncDatabaseManager.execute_write`` because
11
+ DB functions may write; a read-only function is simply a write that touches
12
+ nothing.
13
+
14
+ Argument encoding: scalars bind as-is; ``dict``/``list`` arguments are JSON
15
+ encoded and cast ``::jsonb`` in the rendered statement (the overwhelmingly
16
+ common composite argument type for these functions). A function needing a
17
+ different composite cast gets a new explicit parameter here — never a raw SQL
18
+ call site.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import json
24
+ import re
25
+ from typing import TYPE_CHECKING, Any
26
+
27
+ if TYPE_CHECKING: # pragma: no cover
28
+ from matrx_orm.core.base import Model
29
+
30
+ # schema-qualified (or bare) SQL function identifier — the only shape we ever
31
+ # interpolate into the statement. Everything else binds as a parameter.
32
+ _FUNCTION_NAME_RE = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)?$")
33
+
34
+
35
+ def _render_call(function_name: str, args: tuple[Any, ...]) -> tuple[str, list[Any]]:
36
+ if not _FUNCTION_NAME_RE.match(function_name):
37
+ raise ValueError(f"call_db_function: invalid function name {function_name!r}")
38
+ placeholders: list[str] = []
39
+ values: list[Any] = []
40
+ for index, arg in enumerate(args, start=1):
41
+ if isinstance(arg, dict | list):
42
+ placeholders.append(f"${index}::jsonb")
43
+ values.append(json.dumps(arg, ensure_ascii=False, default=str))
44
+ else:
45
+ placeholders.append(f"${index}")
46
+ values.append(arg)
47
+ sql = f"SELECT * FROM {function_name}({', '.join(placeholders)})"
48
+ return sql, values
49
+
50
+
51
+ async def call_db_function(
52
+ database: type[Model] | str,
53
+ function_name: str,
54
+ *args: Any,
55
+ ) -> list[dict[str, Any]]:
56
+ """``SELECT * FROM <function_name>($1, ...)`` → ``list[dict]``.
57
+
58
+ Args:
59
+ database: a matrx-orm ``Model`` subclass (the call runs on its
60
+ database) or a database config name string.
61
+ function_name: bare or schema-qualified function identifier
62
+ (e.g. ``"seo.fn_upsert_keyword"``). Validated — never user input.
63
+ *args: positional function arguments. ``dict``/``list`` values are
64
+ JSON-encoded and cast ``::jsonb``; everything else binds directly.
65
+
66
+ Returns the function's result set as plain dicts (a scalar-returning
67
+ function yields one row with one column named after the function).
68
+ """
69
+ sql, values = _render_call(function_name, args)
70
+
71
+ from matrx_orm.core.async_db_manager import AsyncDatabaseManager
72
+
73
+ config = database if isinstance(database, str) else database.get_database_name()
74
+ rows = await AsyncDatabaseManager.execute_write(config, sql, *values)
75
+ return [dict(row) for row in rows]
76
+
77
+
78
+ __all__ = ["call_db_function"]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "matrx-orm"
3
- version = "3.1.26"
3
+ version = "3.1.28"
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" }
@@ -0,0 +1,33 @@
1
+ from __future__ import annotations
2
+
3
+ import warnings
4
+ from decimal import Decimal
5
+
6
+ from matrx_orm import (
7
+ DecimalField,
8
+ Model,
9
+ TextField,
10
+ UUIDField,
11
+ build_input_schema,
12
+ validate_model_input,
13
+ )
14
+
15
+
16
+ class CostedRecord(Model):
17
+ _table_name = "costed_record"
18
+ _database = "test"
19
+
20
+ id = UUIDField(primary_key=True)
21
+ name = TextField(null=False)
22
+ total_cost = DecimalField(null=False, default=0)
23
+
24
+
25
+ def test_decimal_default_is_canonical_before_pydantic_serialization() -> None:
26
+ with warnings.catch_warnings(record=True) as caught:
27
+ warnings.simplefilter("always")
28
+ validated = validate_model_input(CostedRecord, {"name": "example"})
29
+
30
+ assert validated == {"name": "example"}
31
+ schema = build_input_schema(CostedRecord)
32
+ assert schema(name="example").total_cost == Decimal("0")
33
+ assert not [w for w in caught if "Pydantic serializer warnings" in str(w.message)]
@@ -0,0 +1,43 @@
1
+ """Render-layer tests for the generic DB function-call primitive."""
2
+
3
+ import json
4
+
5
+ import pytest
6
+
7
+ from matrx_orm.operations.db_functions import _render_call
8
+
9
+
10
+ def test_scalar_args_bind_positionally():
11
+ sql, values = _render_call("seo.fn_upsert_keyword", ("botox cost", "en"))
12
+ assert sql == "SELECT * FROM seo.fn_upsert_keyword($1, $2)"
13
+ assert values == ["botox cost", "en"]
14
+
15
+
16
+ def test_dict_and_list_args_encode_as_jsonb():
17
+ research = {"primary": "botox", "children": ["botox cost"]}
18
+ sql, values = _render_call("seo.fn_ingest_keyword_research", (research, "en", None))
19
+ assert sql == "SELECT * FROM seo.fn_ingest_keyword_research($1::jsonb, $2, $3)"
20
+ assert json.loads(values[0]) == research
21
+ assert values[1:] == ["en", None]
22
+
23
+
24
+ def test_bare_function_name_allowed():
25
+ sql, values = _render_call("now", ())
26
+ assert sql == "SELECT * FROM now()"
27
+ assert values == []
28
+
29
+
30
+ @pytest.mark.parametrize(
31
+ "bad",
32
+ [
33
+ "seo.fn_upsert_keyword; drop table x",
34
+ "seo.fn(*)",
35
+ "a.b.c",
36
+ "",
37
+ "seo.fn upsert",
38
+ "seo.fn_upsert_keyword()",
39
+ ],
40
+ )
41
+ def test_invalid_function_names_rejected(bad):
42
+ with pytest.raises(ValueError):
43
+ _render_call(bad, ())
File without changes
File without changes
File without changes
File without changes
File without changes