sqlmodel-ext 0.3.3__tar.gz → 0.3.4__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. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/PKG-INFO +1 -1
  2. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/index.md +9 -0
  3. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/field-types.md +3 -1
  4. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/01-getting-started.md +1 -1
  5. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/index.md +1 -1
  6. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/index.md +9 -0
  7. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/field-types.md +3 -1
  8. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/01-getting-started.md +1 -1
  9. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/index.md +1 -1
  10. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/pyproject.toml +1 -1
  11. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/__init__.py +3 -1
  12. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_smoke_imports.py +27 -0
  13. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/uv.lock +1 -1
  14. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/.github/workflows/ci.yml +0 -0
  15. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/.gitignore +0 -0
  16. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/LICENSE +0 -0
  17. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/README.md +0 -0
  18. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/README_zh.md +0 -0
  19. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/config.mts +0 -0
  20. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/en.mts +0 -0
  21. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/theme/index.ts +0 -0
  22. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/theme/style/custom.css +0 -0
  23. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/zh.mts +0 -0
  24. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/cached-table.md +0 -0
  25. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/cascade-delete-semantics.md +0 -0
  26. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/crud-pipeline.md +0 -0
  27. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/index.md +0 -0
  28. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/metaclass.md +0 -0
  29. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/optimistic-lock.md +0 -0
  30. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/polymorphic-internals.md +0 -0
  31. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/prerequisites.md +0 -0
  32. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/relation-load-checker.md +0 -0
  33. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/relation-preload.md +0 -0
  34. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/cached-table.md +0 -0
  35. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/crud.md +0 -0
  36. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/field-types.md +0 -0
  37. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/index.md +0 -0
  38. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/optimistic-lock.md +0 -0
  39. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/pagination.md +0 -0
  40. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/polymorphic.md +0 -0
  41. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/relation-load-checker.md +0 -0
  42. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/relation-preload.md +0 -0
  43. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/cache-queries.md +0 -0
  44. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/configure-cascade-delete.md +0 -0
  45. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/define-jti-models.md +0 -0
  46. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/define-sti-models.md +0 -0
  47. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/handle-concurrent-updates.md +0 -0
  48. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/index.md +0 -0
  49. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/integrate-with-fastapi.md +0 -0
  50. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/paginate-a-list-endpoint.md +0 -0
  51. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/prevent-missing-greenlet.md +0 -0
  52. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/release-connection-during-long-io.md +0 -0
  53. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/cached-table.md +0 -0
  54. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/crud.md +0 -0
  55. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/index.md +0 -0
  56. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/metaclass.md +0 -0
  57. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/optimistic-lock.md +0 -0
  58. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/polymorphic.md +0 -0
  59. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/prerequisites.md +0 -0
  60. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/relation-load-checker.md +0 -0
  61. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/relation-preload.md +0 -0
  62. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/base-classes.md +0 -0
  63. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/crud-methods.md +0 -0
  64. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/decorators.md +0 -0
  65. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/index.md +0 -0
  66. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/mixins.md +0 -0
  67. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/pagination-types.md +0 -0
  68. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/02-building-a-blog-api.md +0 -0
  69. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/03-adding-redis-cache.md +0 -0
  70. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/cached-table.md +0 -0
  71. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/cascade-delete-semantics.md +0 -0
  72. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/crud-pipeline.md +0 -0
  73. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/index.md +0 -0
  74. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/metaclass.md +0 -0
  75. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/optimistic-lock.md +0 -0
  76. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/polymorphic-internals.md +0 -0
  77. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/prerequisites.md +0 -0
  78. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/relation-load-checker.md +0 -0
  79. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/relation-preload.md +0 -0
  80. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/cached-table.md +0 -0
  81. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/crud.md +0 -0
  82. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/field-types.md +0 -0
  83. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/index.md +0 -0
  84. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/optimistic-lock.md +0 -0
  85. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/pagination.md +0 -0
  86. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/polymorphic.md +0 -0
  87. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/relation-load-checker.md +0 -0
  88. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/relation-preload.md +0 -0
  89. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/cache-queries.md +0 -0
  90. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/configure-cascade-delete.md +0 -0
  91. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/define-jti-models.md +0 -0
  92. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/define-sti-models.md +0 -0
  93. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/handle-concurrent-updates.md +0 -0
  94. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/index.md +0 -0
  95. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/integrate-with-fastapi.md +0 -0
  96. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/paginate-a-list-endpoint.md +0 -0
  97. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/prevent-missing-greenlet.md +0 -0
  98. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/release-connection-during-long-io.md +0 -0
  99. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/cached-table.md +0 -0
  100. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/crud.md +0 -0
  101. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/index.md +0 -0
  102. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/metaclass.md +0 -0
  103. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/optimistic-lock.md +0 -0
  104. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/polymorphic.md +0 -0
  105. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/prerequisites.md +0 -0
  106. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/relation-load-checker.md +0 -0
  107. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/relation-preload.md +0 -0
  108. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/base-classes.md +0 -0
  109. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/crud-methods.md +0 -0
  110. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/decorators.md +0 -0
  111. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/index.md +0 -0
  112. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/mixins.md +0 -0
  113. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/pagination-types.md +0 -0
  114. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/02-building-a-blog-api.md +0 -0
  115. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/03-adding-redis-cache.md +0 -0
  116. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/examples/consumer_integration/run.py +0 -0
  117. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/package.json +0 -0
  118. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/pnpm-lock.yaml +0 -0
  119. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_compat.py +0 -0
  120. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_exceptions.py +0 -0
  121. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_sa_type.py +0 -0
  122. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_utils.py +0 -0
  123. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/base.py +0 -0
  124. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/__init__.py +0 -0
  125. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/_internal/__init__.py +0 -0
  126. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/_internal/path.py +0 -0
  127. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/_ssrf.py +0 -0
  128. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/__init__.py +0 -0
  129. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/__init__.py +0 -0
  130. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/array.py +0 -0
  131. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/exceptions.py +0 -0
  132. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/jsonb_types.py +0 -0
  133. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/numpy_vector.py +0 -0
  134. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/ip_address.py +0 -0
  135. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/mixins/__init__.py +0 -0
  136. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/mixins/module_name_mixin.py +0 -0
  137. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/url.py +0 -0
  138. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/__init__.py +0 -0
  139. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/cached_table.py +0 -0
  140. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/info_response.py +0 -0
  141. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/optimistic_lock.py +0 -0
  142. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/polymorphic.py +0 -0
  143. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/relation_preload.py +0 -0
  144. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/table.py +0 -0
  145. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/pagination.py +0 -0
  146. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/relation_load_checker.py +0 -0
  147. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/__init__.py +0 -0
  148. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/_models.py +0 -0
  149. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/conftest.py +0 -0
  150. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_annotated_default_factory_inheritance.py +0 -0
  151. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_basic_crud.py +0 -0
  152. {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_sti_default_isolation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmodel-ext
3
- Version: 0.3.3
3
+ Version: 0.3.4
4
4
  Summary: Extended SQLModel infrastructure: smart metaclass, async CRUD mixins, polymorphic inheritance, optimistic locking, relation preloading, and reusable field types.
5
5
  Project-URL: Homepage, https://github.com/Foxerine/sqlmodel-ext
6
6
  Project-URL: Repository, https://github.com/Foxerine/sqlmodel-ext
@@ -34,3 +34,12 @@ features:
34
34
  - title: Safe & Reliable
35
35
  details: Optimistic locking for concurrency control, @requires_relations to prevent MissingGreenlet, and AST static analysis at startup
36
36
  ---
37
+
38
+ ## Design orientation
39
+
40
+ sqlmodel-ext is not a new ORM. It is a set of **opt-in Mixins** layered on top of SQLModel / Pydantic v2 / SQLAlchemy 2.0. The library only introduces two kinds of machinery:
41
+
42
+ - **Metaclass enhancements** — automatic SQLAlchemy column setup driven by `Annotated` type hints, `mapper_args` merging, on-demand `*UpdateRequest` DTO generation, attribute-docstring inheritance, and a Python 3.14 (PEP 649) compatibility patch.
43
+ - **Composable Mixins** — `TableBaseMixin` (async CRUD), `PolymorphicBaseMixin` (JTI/STI), `OptimisticLockMixin` (version-column concurrency), `RelationPreloadMixin` (eager loading), `CachedTableBaseMixin` (Redis two-tier cache). Each Mixin stands alone and has no hard dependency on the others.
44
+
45
+ The underlying `Session`, `select()`, query construction, and migration tooling remain native SQLAlchemy — there is no custom DSL, and the library does not take over `engine` / `session` lifecycle. In practice that means you can drop a single Mixin into an existing SQLModel/SQLAlchemy project without rewriting your data-access layer.
@@ -33,7 +33,7 @@ from sqlmodel_ext import Str16, Str24, Str32, Str36, Str48, Str64, Str100, Str12
33
33
  ## Text constraints
34
34
 
35
35
  ```python
36
- from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text32K, Text60K, Text64K, Text100K, Text1M
36
+ from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text16K, Text32K, Text60K, Text64K, Text100K, Text128K, Text1M
37
37
  ```
38
38
 
39
39
  | Type | `max_length` |
@@ -45,10 +45,12 @@ from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Tex
45
45
  | `Text3K` | 3000 |
46
46
  | `Text5K` | 5000 |
47
47
  | `Text10K` | 10000 |
48
+ | `Text16K` | 16000 |
48
49
  | `Text32K` | 32000 |
49
50
  | `Text60K` | 60000 |
50
51
  | `Text64K` | 65536 |
51
52
  | `Text100K` | 100000 |
53
+ | `Text128K` | 131072 (= 128 × 1024) |
52
54
  | `Text1M` | 1000000 |
53
55
 
54
56
  ## Numeric constraints
@@ -8,7 +8,7 @@ This is your first conversation with sqlmodel-ext. In 15 minutes you'll have:
8
8
  - A clear mental model for "model + Mixin = table"
9
9
 
10
10
  ::: tip You don't need prior SQLAlchemy or SQLModel experience
11
- This tutorial introduces those concepts on demand. You only need Python 3.10+ and basic `async` / `await` knowledge. If you've never touched an ORM, skim [Prerequisites](/en/explanation/prerequisites) first.
11
+ This tutorial introduces those concepts on demand. You only need Python 3.12+ and basic `async` / `await` knowledge. If you've never touched an ORM, skim [Prerequisites](/en/explanation/prerequisites) first.
12
12
  :::
13
13
 
14
14
  ## 0. Set up the environment
@@ -25,7 +25,7 @@ Tutorials don't **exhaustively cover the API**. If a feature you need is missing
25
25
 
26
26
  All tutorials assume you know:
27
27
 
28
- - Python 3.10+
28
+ - Python 3.12+ (3.12 / 3.13 / 3.14 are all exercised in CI)
29
29
  - Basic `async` / `await` syntax
30
30
  - What SELECT / INSERT / UPDATE / DELETE do in SQL
31
31
 
@@ -34,3 +34,12 @@ features:
34
34
  - title: 安全与可靠
35
35
  details: 乐观锁并发控制、@requires_relations 防止 MissingGreenlet、启动时 AST 静态分析
36
36
  ---
37
+
38
+ ## 设计取向
39
+
40
+ sqlmodel-ext 不是新的 ORM,而是构建在 SQLModel / Pydantic v2 / SQLAlchemy 2.0 之上的一组**可单独取用的 Mixin**。库本身只引入两类东西:
41
+
42
+ - **元类增强**——根据 `Annotated` 类型注解自动设置 SQLAlchemy 列、合并 `mapper_args`、按需生成 `*UpdateRequest` DTO、保留属性 docstring,并打上 Python 3.14 (PEP 649) 兼容补丁。
43
+ - **可插拔 Mixin**——`TableBaseMixin`(异步 CRUD)、`PolymorphicBaseMixin`(JTI/STI)、`OptimisticLockMixin`(版本号并发)、`RelationPreloadMixin`(关系预加载)、`CachedTableBaseMixin`(Redis 双层缓存)。每个 Mixin 都可以独立使用,不互相依赖。
44
+
45
+ 底层 `Session`、`select()`、查询构造、迁移工具仍是原生 SQLAlchemy,没有自创 DSL,也不接管 `engine`/`session` 的生命周期。换句话说:在已有 SQLModel/SQLAlchemy 项目里,可以单独引入需要的 Mixin,而不必重写既有数据访问层。
@@ -33,7 +33,7 @@ from sqlmodel_ext import Str16, Str24, Str32, Str36, Str48, Str64, Str100, Str12
33
33
  ## 文本约束
34
34
 
35
35
  ```python
36
- from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text32K, Text60K, Text64K, Text100K, Text1M
36
+ from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text16K, Text32K, Text60K, Text64K, Text100K, Text128K, Text1M
37
37
  ```
38
38
 
39
39
  | 类型 | `max_length` |
@@ -45,10 +45,12 @@ from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Tex
45
45
  | `Text3K` | 3000 |
46
46
  | `Text5K` | 5000 |
47
47
  | `Text10K` | 10000 |
48
+ | `Text16K` | 16000 |
48
49
  | `Text32K` | 32000 |
49
50
  | `Text60K` | 60000 |
50
51
  | `Text64K` | 65536 |
51
52
  | `Text100K` | 100000 |
53
+ | `Text128K` | 131072(= 128 × 1024) |
52
54
  | `Text1M` | 1000000 |
53
55
 
54
56
  ## 数值约束
@@ -8,7 +8,7 @@
8
8
  - 理解"模型 + Mixin = 表"这个核心范式
9
9
 
10
10
  ::: tip 不需要事先懂 SQLAlchemy 或 SQLModel
11
- 本教程会按需引入这些概念。你只需要 Python 3.10+ 和基本的 `async` / `await` 知识。如果你完全没接触过 ORM,建议在开始之前先扫一眼 [前置知识](/explanation/prerequisites)。
11
+ 本教程会按需引入这些概念。你只需要 Python 3.12+ 和基本的 `async` / `await` 知识。如果你完全没接触过 ORM,建议在开始之前先扫一眼 [前置知识](/explanation/prerequisites)。
12
12
  :::
13
13
 
14
14
  ## 0. 准备环境
@@ -25,7 +25,7 @@
25
25
 
26
26
  所有教程假设你具备:
27
27
 
28
- - Python 3.10+
28
+ - Python 3.12+(3.12 / 3.13 / 3.14 均在 CI 中受测)
29
29
  - 基本的 `async` / `await` 语法
30
30
  - 知道 SQL 的 SELECT / INSERT / UPDATE / DELETE 是什么
31
31
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sqlmodel-ext"
7
- version = "0.3.3"
7
+ version = "0.3.4"
8
8
  description = "Extended SQLModel infrastructure: smart metaclass, async CRUD mixins, polymorphic inheritance, optimistic locking, relation preloading, and reusable field types."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -20,7 +20,7 @@ Quick start::
20
20
  user = await user.save(session)
21
21
  users = await User.get(session, fetch_mode="all")
22
22
  """
23
- __version__ = "0.3.3"
23
+ __version__ = "0.3.4"
24
24
 
25
25
  # Base
26
26
  from sqlmodel_ext.base import SQLModelBase, ExtraIgnoreModelBase
@@ -94,10 +94,12 @@ from sqlmodel_ext.field_types import (
94
94
  Text3K,
95
95
  Text5K,
96
96
  Text10K,
97
+ Text16K,
97
98
  Text32K,
98
99
  Text60K,
99
100
  Text64K,
100
101
  Text100K,
102
+ Text128K,
101
103
  Text1M,
102
104
  # Numeric constraints
103
105
  INT32_MAX,
@@ -59,8 +59,35 @@ def test_toplevel_import() -> None:
59
59
  # Field types - path/string/numeric/custom
60
60
  "DirectoryPathType",
61
61
  "FilePathType",
62
+ # Str ladder (whole range — guards against export drift)
63
+ "Str16",
64
+ "Str24",
65
+ "Str32",
66
+ "Str36",
67
+ "Str48",
68
+ "Str64",
69
+ "Str100",
70
+ "Str128",
71
+ "Str255",
62
72
  "Str256",
73
+ "Str500",
74
+ "Str512",
75
+ "Str2048",
76
+ # Text ladder (whole range — guards against export drift)
63
77
  "Text1K",
78
+ "Text1024",
79
+ "Text2K",
80
+ "Text2500",
81
+ "Text3K",
82
+ "Text5K",
83
+ "Text10K",
84
+ "Text16K",
85
+ "Text32K",
86
+ "Text60K",
87
+ "Text64K",
88
+ "Text100K",
89
+ "Text128K",
90
+ "Text1M",
64
91
  "Port",
65
92
  "Percentage",
66
93
  "PositiveInt",
@@ -500,7 +500,7 @@ wheels = [
500
500
 
501
501
  [[package]]
502
502
  name = "sqlmodel-ext"
503
- version = "0.3.2"
503
+ version = "0.3.4"
504
504
  source = { editable = "." }
505
505
  dependencies = [
506
506
  { name = "pydantic" },
File without changes
File without changes
File without changes
File without changes
File without changes