matrx-orm 3.0.7__tar.gz → 3.0.10__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 (152) hide show
  1. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/PKG-INFO +2 -1
  2. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/README.md +1 -0
  3. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/pyproject.toml +1 -1
  4. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/fields.py +23 -7
  5. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_fields.py +8 -0
  6. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/uv.lock +1 -1
  7. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/.arman/pending/versioning/INITIAL.md +0 -0
  8. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/.env.example +0 -0
  9. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/.github/workflows/publish.yml +0 -0
  10. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/.gitignore +0 -0
  11. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/.python-version +0 -0
  12. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/CLAUDE.md +0 -0
  13. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/MIGRATIONS.md +0 -0
  14. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/MODULE_README.md +0 -0
  15. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/RESERVED_NAMES.md +0 -0
  16. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/TASKS-TEMPLATE.md +0 -0
  17. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/TASKS.md +0 -0
  18. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/database/orm/extended/managers/ai_model_base.py +0 -0
  19. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/docs/migrations.md +0 -0
  20. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/extended_jan5_backup.py +0 -0
  21. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/main.py +0 -0
  22. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/release.sh +0 -0
  23. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/scripts/publish.sh +0 -0
  24. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/MODULE_README.md +0 -0
  25. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/MODULE_README.md +0 -0
  26. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/__init__.py +0 -0
  27. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/adapters/MODULE_README.md +0 -0
  28. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/adapters/__init__.py +0 -0
  29. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/adapters/base_adapter.py +0 -0
  30. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/adapters/postgresql.py +0 -0
  31. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/client/MODULE_README.md +0 -0
  32. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/client/__init__.py +0 -0
  33. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/client/postgres_connection.py +0 -0
  34. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/EXTENDED-TASK.md +0 -0
  35. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/MODULE_README.md +0 -0
  36. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/RELATIONS-TASKS.md +0 -0
  37. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/TASKS.md +0 -0
  38. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/__init__.py +0 -0
  39. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/async_db_manager.py +0 -0
  40. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/base.py +0 -0
  41. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/config.py +0 -0
  42. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/expressions.py +0 -0
  43. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/extended.py +0 -0
  44. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/model_dto.py +0 -0
  45. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/model_view.py +0 -0
  46. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/paginator.py +0 -0
  47. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/pydantic_bridge.py +0 -0
  48. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/registry.py +0 -0
  49. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/relations.py +0 -0
  50. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/signals.py +0 -0
  51. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/transaction.py +0 -0
  52. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/core/types.py +0 -0
  53. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/error_handling.py +0 -0
  54. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/exceptions.py +0 -0
  55. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/extended/__init__.py +0 -0
  56. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/extended/app_error_handler.py +0 -0
  57. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/middleware/__init__.py +0 -0
  58. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/middleware/base.py +0 -0
  59. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/MODULE_README.md +0 -0
  60. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/__init__.py +0 -0
  61. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/cli.py +0 -0
  62. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/ddl.py +0 -0
  63. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/diff.py +0 -0
  64. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/executor.py +0 -0
  65. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/integration.py +0 -0
  66. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/loader.py +0 -0
  67. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/operations.py +0 -0
  68. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/state.py +0 -0
  69. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/migrations/table_filter.py +0 -0
  70. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/operations/MODULE_README.md +0 -0
  71. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/operations/__init__.py +0 -0
  72. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/operations/create.py +0 -0
  73. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/operations/delete.py +0 -0
  74. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/operations/read.py +0 -0
  75. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/operations/update.py +0 -0
  76. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/py.typed +0 -0
  77. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/python_sql/MODULE_README.md +0 -0
  78. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/python_sql/__init__.py +0 -0
  79. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/python_sql/db_objects.py +0 -0
  80. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
  81. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
  82. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/query/MODULE_README.md +0 -0
  83. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/query/__init__.py +0 -0
  84. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/query/builder.py +0 -0
  85. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/query/executor.py +0 -0
  86. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/MODULE_README.md +0 -0
  87. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/__init__.py +0 -0
  88. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/code_handler.py +0 -0
  89. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/columns.py +0 -0
  90. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/common.py +0 -0
  91. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/generator.py +0 -0
  92. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/helpers/__init__.py +0 -0
  93. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
  94. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
  95. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
  96. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/relationships.py +0 -0
  97. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/runner.py +0 -0
  98. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/schema.py +0 -0
  99. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/schema_manager.py +0 -0
  100. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/tables.py +0 -0
  101. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/schema_builder/views.py +0 -0
  102. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/sql_executor/MODULE_README.md +0 -0
  103. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/sql_executor/__init__.py +0 -0
  104. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/sql_executor/executor.py +0 -0
  105. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/sql_executor/queries.py +0 -0
  106. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/sql_executor/registry.py +0 -0
  107. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/sql_executor/types.py +0 -0
  108. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/sql_executor/utils.py +0 -0
  109. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/state.py +0 -0
  110. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/utils/__init__.py +0 -0
  111. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/utils/sql_utils.py +0 -0
  112. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/src/matrx_orm/utils/type_converters.py +0 -0
  113. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/MODULE_README.md +0 -0
  114. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/__init__.py +0 -0
  115. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/conftest.py +0 -0
  116. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/MODULE_README.md +0 -0
  117. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/__init__.py +0 -0
  118. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_config.py +0 -0
  119. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_ddl_generator.py +0 -0
  120. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_exceptions.py +0 -0
  121. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_migration_diff_types.py +0 -0
  122. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_migration_loader.py +0 -0
  123. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_model_instance.py +0 -0
  124. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_model_meta.py +0 -0
  125. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_query_builder.py +0 -0
  126. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_query_executor_sql.py +0 -0
  127. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_registry.py +0 -0
  128. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_relations.py +0 -0
  129. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level1/test_state_cache.py +0 -0
  130. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/MODULE_README.md +0 -0
  131. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/__init__.py +0 -0
  132. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/conftest.py +0 -0
  133. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_bulk_ops.py +0 -0
  134. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_cache_integration.py +0 -0
  135. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_crud.py +0 -0
  136. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_foreign_keys.py +0 -0
  137. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_m2m.py +0 -0
  138. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_manager.py +0 -0
  139. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_migrations_live.py +0 -0
  140. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_query_execution.py +0 -0
  141. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/level2/test_schema_diff.py +0 -0
  142. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/sample_project/.env.example +0 -0
  143. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/sample_project/README.md +0 -0
  144. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/sample_project/__init__.py +0 -0
  145. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/sample_project/generate.py +0 -0
  146. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/sample_project/generated/.gitkeep +0 -0
  147. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/sample_project/matrx_orm.yaml +0 -0
  148. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/sample_project/test_schema_generation.py +0 -0
  149. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/schema/entity_tests.py +0 -0
  150. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/schema/test_base_generation.py +0 -0
  151. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/schema/test_generate_schema.py +0 -0
  152. {matrx_orm-3.0.7 → matrx_orm-3.0.10}/tests/test_model_cls_refactor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matrx-orm
3
- Version: 3.0.7
3
+ Version: 3.0.10
4
4
  Summary: Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching. Works with any PostgreSQL database.
5
5
  Project-URL: Homepage, https://github.com/armanisadeghi/matrx-orm
6
6
  Project-URL: Repository, https://github.com/armanisadeghi/matrx-orm
@@ -1836,6 +1836,7 @@ When you run the schema builder against a database that has `vector(n)` columns,
1836
1836
 
1837
1837
  | Version | Highlights |
1838
1838
  |---|---|
1839
+ | **v3.0.10** | Patch release |
1839
1840
  | **v3.0.1** | Patch release |
1840
1841
  | **v3.0.0** | Major release |
1841
1842
  | **v2.0.35** | Patch release |
@@ -1795,6 +1795,7 @@ When you run the schema builder against a database that has `vector(n)` columns,
1795
1795
 
1796
1796
  | Version | Highlights |
1797
1797
  |---|---|
1798
+ | **v3.0.10** | Patch release |
1798
1799
  | **v3.0.1** | Patch release |
1799
1800
  | **v3.0.0** | Major release |
1800
1801
  | **v2.0.35** | Patch release |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "matrx-orm"
3
- version = "3.0.7"
3
+ version = "3.0.10"
4
4
  description = "Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching. Works with any PostgreSQL database."
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -560,13 +560,19 @@ class JSONField(Field, Generic[_JT]):
560
560
 
561
561
  def to_python(self, value):
562
562
  if isinstance(value, str):
563
+ if not value.strip():
564
+ return None
563
565
  return json.loads(value)
564
566
  return value
565
567
 
566
568
  def get_db_prep_value(self, value):
567
- if value is not None and not isinstance(value, str):
568
- return json.dumps(value)
569
- return value
569
+ if value is None:
570
+ return None
571
+ if isinstance(value, str):
572
+ if not value.strip():
573
+ return None
574
+ return value
575
+ return json.dumps(value)
570
576
 
571
577
 
572
578
  class ArrayField(Field):
@@ -1027,10 +1033,16 @@ class JSONBField(Field, Generic[_JT]):
1027
1033
  break
1028
1034
  if name is None:
1029
1035
  return # Cannot determine attribute name; bail rather than corrupt state.
1030
- if isinstance(value, Field):
1031
- object.__setattr__(obj, name, None)
1032
- return
1033
- object.__setattr__(obj, name, self.to_python(value))
1036
+ coerced = None if isinstance(value, Field) else self.to_python(value)
1037
+ # Model uses RuntimeMixin which routes all attribute writes through
1038
+ # self._data. We must write there to avoid triggering this __set__
1039
+ # again via object.__setattr__ (which re-invokes the data descriptor).
1040
+ _data = obj.__dict__.get("_data")
1041
+ if _data is not None:
1042
+ _data[name] = coerced
1043
+ else:
1044
+ # Fallback for non-Model objects or before _data is initialised.
1045
+ obj.__dict__[name] = coerced
1034
1046
 
1035
1047
  def to_python(self, value: Any) -> _JT | None:
1036
1048
  """Deserialise to a Python object.
@@ -1047,6 +1059,8 @@ class JSONBField(Field, Generic[_JT]):
1047
1059
  if isinstance(value, Field):
1048
1060
  return None # type: ignore[return-value]
1049
1061
  if isinstance(value, str):
1062
+ if not value.strip():
1063
+ return None
1050
1064
  value = json.loads(value)
1051
1065
  if self._pydantic_schema is not None and isinstance(value, dict):
1052
1066
  return self._pydantic_schema.model_validate(value) # type: ignore[return-value]
@@ -1083,6 +1097,8 @@ class JSONBField(Field, Generic[_JT]):
1083
1097
  if isinstance(value, str):
1084
1098
  # Re-validate: parse then re-encode so callers can't inject
1085
1099
  # malformed JSON strings directly into the wire value.
1100
+ if not value.strip():
1101
+ return None
1086
1102
  return json.dumps(json.loads(value))
1087
1103
  return json.dumps(value)
1088
1104
 
@@ -364,6 +364,14 @@ class TestJSONField:
364
364
  def test_get_db_prep_value_none(self):
365
365
  assert JSONField().get_db_prep_value(None) is None
366
366
 
367
+ def test_to_python_empty_string_returns_none(self):
368
+ assert JSONField().to_python("") is None
369
+ assert JSONField().to_python(" ") is None
370
+
371
+ def test_get_db_prep_value_empty_string_returns_none(self):
372
+ assert JSONField().get_db_prep_value("") is None
373
+ assert JSONField().get_db_prep_value(" ") is None
374
+
367
375
 
368
376
  # ---------------------------------------------------------------------------
369
377
  # ArrayField
@@ -667,7 +667,7 @@ wheels = [
667
667
 
668
668
  [[package]]
669
669
  name = "matrx-orm"
670
- version = "3.0.0"
670
+ version = "3.0.9"
671
671
  source = { editable = "." }
672
672
  dependencies = [
673
673
  { name = "asyncpg" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes