sqlmodel-ext 0.3.0__tar.gz → 0.3.3__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 (176) hide show
  1. sqlmodel_ext-0.3.3/.github/workflows/ci.yml +100 -0
  2. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/PKG-INFO +1 -1
  3. sqlmodel_ext-0.3.3/docs/.vitepress/config.mts +57 -0
  4. sqlmodel_ext-0.3.3/docs/.vitepress/en.mts +88 -0
  5. sqlmodel_ext-0.3.3/docs/.vitepress/theme/index.ts +13 -0
  6. sqlmodel_ext-0.3.3/docs/.vitepress/zh.mts +88 -0
  7. {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/cached-table.md +244 -227
  8. sqlmodel_ext-0.3.3/docs/en/explanation/cascade-delete-semantics.md +153 -0
  9. sqlmodel_ext-0.3.0/docs/en/internals/crud.md → sqlmodel_ext-0.3.3/docs/en/explanation/crud-pipeline.md +288 -283
  10. sqlmodel_ext-0.3.3/docs/en/explanation/index.md +41 -0
  11. {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/metaclass.md +319 -315
  12. {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/optimistic-lock.md +120 -114
  13. sqlmodel_ext-0.3.0/docs/en/internals/polymorphic.md → sqlmodel_ext-0.3.3/docs/en/explanation/polymorphic-internals.md +210 -204
  14. {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/prerequisites.md +158 -154
  15. {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/relation-load-checker.md +116 -108
  16. {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/relation-preload.md +197 -191
  17. sqlmodel_ext-0.3.3/docs/en/guide/cached-table.md +17 -0
  18. sqlmodel_ext-0.3.3/docs/en/guide/crud.md +15 -0
  19. sqlmodel_ext-0.3.3/docs/en/guide/field-types.md +13 -0
  20. sqlmodel_ext-0.3.3/docs/en/guide/index.md +13 -0
  21. sqlmodel_ext-0.3.3/docs/en/guide/optimistic-lock.md +14 -0
  22. sqlmodel_ext-0.3.3/docs/en/guide/pagination.md +14 -0
  23. sqlmodel_ext-0.3.3/docs/en/guide/polymorphic.md +17 -0
  24. sqlmodel_ext-0.3.3/docs/en/guide/relation-load-checker.md +16 -0
  25. sqlmodel_ext-0.3.3/docs/en/guide/relation-preload.md +17 -0
  26. sqlmodel_ext-0.3.3/docs/en/how-to/cache-queries.md +142 -0
  27. sqlmodel_ext-0.3.3/docs/en/how-to/configure-cascade-delete.md +234 -0
  28. sqlmodel_ext-0.3.3/docs/en/how-to/define-jti-models.md +120 -0
  29. sqlmodel_ext-0.3.3/docs/en/how-to/define-sti-models.md +132 -0
  30. sqlmodel_ext-0.3.3/docs/en/how-to/handle-concurrent-updates.md +88 -0
  31. sqlmodel_ext-0.3.3/docs/en/how-to/index.md +41 -0
  32. sqlmodel_ext-0.3.3/docs/en/how-to/integrate-with-fastapi.md +116 -0
  33. sqlmodel_ext-0.3.3/docs/en/how-to/paginate-a-list-endpoint.md +79 -0
  34. sqlmodel_ext-0.3.3/docs/en/how-to/prevent-missing-greenlet.md +162 -0
  35. sqlmodel_ext-0.3.3/docs/en/how-to/release-connection-during-long-io.md +181 -0
  36. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/docs/en/index.md +10 -4
  37. sqlmodel_ext-0.3.3/docs/en/internals/cached-table.md +13 -0
  38. sqlmodel_ext-0.3.3/docs/en/internals/crud.md +15 -0
  39. sqlmodel_ext-0.3.3/docs/en/internals/index.md +13 -0
  40. sqlmodel_ext-0.3.3/docs/en/internals/metaclass.md +13 -0
  41. sqlmodel_ext-0.3.3/docs/en/internals/optimistic-lock.md +13 -0
  42. sqlmodel_ext-0.3.3/docs/en/internals/polymorphic.md +13 -0
  43. sqlmodel_ext-0.3.3/docs/en/internals/prerequisites.md +13 -0
  44. sqlmodel_ext-0.3.3/docs/en/internals/relation-load-checker.md +13 -0
  45. sqlmodel_ext-0.3.3/docs/en/internals/relation-preload.md +13 -0
  46. sqlmodel_ext-0.3.3/docs/en/reference/base-classes.md +121 -0
  47. sqlmodel_ext-0.3.3/docs/en/reference/crud-methods.md +275 -0
  48. sqlmodel_ext-0.3.3/docs/en/reference/decorators.md +162 -0
  49. sqlmodel_ext-0.3.3/docs/en/reference/field-types.md +218 -0
  50. sqlmodel_ext-0.3.3/docs/en/reference/index.md +54 -0
  51. sqlmodel_ext-0.3.3/docs/en/reference/mixins.md +222 -0
  52. sqlmodel_ext-0.3.3/docs/en/reference/pagination-types.md +113 -0
  53. sqlmodel_ext-0.3.3/docs/en/tutorials/01-getting-started.md +174 -0
  54. sqlmodel_ext-0.3.3/docs/en/tutorials/02-building-a-blog-api.md +388 -0
  55. sqlmodel_ext-0.3.3/docs/en/tutorials/03-adding-redis-cache.md +269 -0
  56. sqlmodel_ext-0.3.3/docs/en/tutorials/index.md +32 -0
  57. {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/cached-table.md +244 -227
  58. sqlmodel_ext-0.3.3/docs/explanation/cascade-delete-semantics.md +153 -0
  59. sqlmodel_ext-0.3.0/docs/internals/crud.md → sqlmodel_ext-0.3.3/docs/explanation/crud-pipeline.md +288 -283
  60. sqlmodel_ext-0.3.3/docs/explanation/index.md +41 -0
  61. {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/metaclass.md +319 -315
  62. {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/optimistic-lock.md +120 -114
  63. sqlmodel_ext-0.3.0/docs/internals/polymorphic.md → sqlmodel_ext-0.3.3/docs/explanation/polymorphic-internals.md +210 -204
  64. {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/prerequisites.md +158 -154
  65. {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/relation-load-checker.md +116 -108
  66. {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/relation-preload.md +197 -191
  67. sqlmodel_ext-0.3.3/docs/guide/cached-table.md +17 -0
  68. sqlmodel_ext-0.3.3/docs/guide/crud.md +15 -0
  69. sqlmodel_ext-0.3.3/docs/guide/field-types.md +13 -0
  70. sqlmodel_ext-0.3.3/docs/guide/index.md +13 -0
  71. sqlmodel_ext-0.3.3/docs/guide/optimistic-lock.md +14 -0
  72. sqlmodel_ext-0.3.3/docs/guide/pagination.md +14 -0
  73. sqlmodel_ext-0.3.3/docs/guide/polymorphic.md +17 -0
  74. sqlmodel_ext-0.3.3/docs/guide/relation-load-checker.md +16 -0
  75. sqlmodel_ext-0.3.3/docs/guide/relation-preload.md +17 -0
  76. sqlmodel_ext-0.3.3/docs/how-to/cache-queries.md +142 -0
  77. sqlmodel_ext-0.3.3/docs/how-to/configure-cascade-delete.md +234 -0
  78. sqlmodel_ext-0.3.3/docs/how-to/define-jti-models.md +120 -0
  79. sqlmodel_ext-0.3.3/docs/how-to/define-sti-models.md +132 -0
  80. sqlmodel_ext-0.3.3/docs/how-to/handle-concurrent-updates.md +87 -0
  81. sqlmodel_ext-0.3.3/docs/how-to/index.md +41 -0
  82. sqlmodel_ext-0.3.3/docs/how-to/integrate-with-fastapi.md +116 -0
  83. sqlmodel_ext-0.3.3/docs/how-to/paginate-a-list-endpoint.md +79 -0
  84. sqlmodel_ext-0.3.3/docs/how-to/prevent-missing-greenlet.md +162 -0
  85. sqlmodel_ext-0.3.3/docs/how-to/release-connection-during-long-io.md +181 -0
  86. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/docs/index.md +10 -4
  87. sqlmodel_ext-0.3.3/docs/internals/cached-table.md +13 -0
  88. sqlmodel_ext-0.3.3/docs/internals/crud.md +15 -0
  89. sqlmodel_ext-0.3.3/docs/internals/index.md +13 -0
  90. sqlmodel_ext-0.3.3/docs/internals/metaclass.md +13 -0
  91. sqlmodel_ext-0.3.3/docs/internals/optimistic-lock.md +13 -0
  92. sqlmodel_ext-0.3.3/docs/internals/polymorphic.md +13 -0
  93. sqlmodel_ext-0.3.3/docs/internals/prerequisites.md +13 -0
  94. sqlmodel_ext-0.3.3/docs/internals/relation-load-checker.md +13 -0
  95. sqlmodel_ext-0.3.3/docs/internals/relation-preload.md +13 -0
  96. sqlmodel_ext-0.3.3/docs/reference/base-classes.md +121 -0
  97. sqlmodel_ext-0.3.3/docs/reference/crud-methods.md +275 -0
  98. sqlmodel_ext-0.3.3/docs/reference/decorators.md +162 -0
  99. sqlmodel_ext-0.3.3/docs/reference/field-types.md +218 -0
  100. sqlmodel_ext-0.3.3/docs/reference/index.md +54 -0
  101. sqlmodel_ext-0.3.3/docs/reference/mixins.md +222 -0
  102. sqlmodel_ext-0.3.3/docs/reference/pagination-types.md +113 -0
  103. sqlmodel_ext-0.3.3/docs/tutorials/01-getting-started.md +174 -0
  104. sqlmodel_ext-0.3.3/docs/tutorials/02-building-a-blog-api.md +388 -0
  105. sqlmodel_ext-0.3.3/docs/tutorials/03-adding-redis-cache.md +269 -0
  106. sqlmodel_ext-0.3.3/docs/tutorials/index.md +32 -0
  107. sqlmodel_ext-0.3.3/examples/consumer_integration/run.py +148 -0
  108. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/package.json +2 -1
  109. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/pnpm-lock.yaml +1096 -390
  110. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/pyproject.toml +1 -1
  111. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/__init__.py +1 -1
  112. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_compat.py +43 -3
  113. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/base.py +123 -7
  114. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/__init__.py +23 -0
  115. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/cached_table.py +71 -36
  116. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/polymorphic.py +16 -0
  117. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/table.py +182 -33
  118. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/pagination.py +2 -2
  119. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/relation_load_checker.py +3825 -3645
  120. sqlmodel_ext-0.3.3/tests/__init__.py +0 -0
  121. sqlmodel_ext-0.3.3/tests/_models.py +45 -0
  122. sqlmodel_ext-0.3.3/tests/conftest.py +58 -0
  123. sqlmodel_ext-0.3.3/tests/test_annotated_default_factory_inheritance.py +194 -0
  124. sqlmodel_ext-0.3.3/tests/test_basic_crud.py +61 -0
  125. sqlmodel_ext-0.3.3/tests/test_smoke_imports.py +90 -0
  126. sqlmodel_ext-0.3.3/tests/test_sti_default_isolation.py +132 -0
  127. sqlmodel_ext-0.3.3/uv.lock +585 -0
  128. sqlmodel_ext-0.3.0/docs/.vitepress/config.mts +0 -27
  129. sqlmodel_ext-0.3.0/docs/.vitepress/en.mts +0 -59
  130. sqlmodel_ext-0.3.0/docs/.vitepress/theme/index.ts +0 -6
  131. sqlmodel_ext-0.3.0/docs/.vitepress/zh.mts +0 -59
  132. sqlmodel_ext-0.3.0/docs/en/guide/cached-table.md +0 -186
  133. sqlmodel_ext-0.3.0/docs/en/guide/crud.md +0 -264
  134. sqlmodel_ext-0.3.0/docs/en/guide/field-types.md +0 -129
  135. sqlmodel_ext-0.3.0/docs/en/guide/index.md +0 -175
  136. sqlmodel_ext-0.3.0/docs/en/guide/optimistic-lock.md +0 -102
  137. sqlmodel_ext-0.3.0/docs/en/guide/pagination.md +0 -136
  138. sqlmodel_ext-0.3.0/docs/en/guide/polymorphic.md +0 -141
  139. sqlmodel_ext-0.3.0/docs/en/guide/relation-load-checker.md +0 -134
  140. sqlmodel_ext-0.3.0/docs/en/guide/relation-preload.md +0 -118
  141. sqlmodel_ext-0.3.0/docs/en/internals/index.md +0 -78
  142. sqlmodel_ext-0.3.0/docs/guide/cached-table.md +0 -176
  143. sqlmodel_ext-0.3.0/docs/guide/crud.md +0 -264
  144. sqlmodel_ext-0.3.0/docs/guide/field-types.md +0 -125
  145. sqlmodel_ext-0.3.0/docs/guide/index.md +0 -175
  146. sqlmodel_ext-0.3.0/docs/guide/optimistic-lock.md +0 -102
  147. sqlmodel_ext-0.3.0/docs/guide/pagination.md +0 -136
  148. sqlmodel_ext-0.3.0/docs/guide/polymorphic.md +0 -141
  149. sqlmodel_ext-0.3.0/docs/guide/relation-load-checker.md +0 -124
  150. sqlmodel_ext-0.3.0/docs/guide/relation-preload.md +0 -118
  151. sqlmodel_ext-0.3.0/docs/internals/index.md +0 -78
  152. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/.gitignore +0 -0
  153. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/LICENSE +0 -0
  154. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/README.md +0 -0
  155. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/README_zh.md +0 -0
  156. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/docs/.vitepress/theme/style/custom.css +0 -0
  157. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_exceptions.py +0 -0
  158. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_sa_type.py +0 -0
  159. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_utils.py +0 -0
  160. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/_internal/__init__.py +0 -0
  161. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/_internal/path.py +0 -0
  162. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/_ssrf.py +0 -0
  163. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/__init__.py +0 -0
  164. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/__init__.py +0 -0
  165. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/array.py +0 -0
  166. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/exceptions.py +0 -0
  167. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/jsonb_types.py +0 -0
  168. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/numpy_vector.py +0 -0
  169. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/ip_address.py +0 -0
  170. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/mixins/__init__.py +0 -0
  171. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/mixins/module_name_mixin.py +0 -0
  172. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/url.py +0 -0
  173. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/__init__.py +0 -0
  174. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/info_response.py +0 -0
  175. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/optimistic_lock.py +0 -0
  176. {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/relation_preload.py +0 -0
@@ -0,0 +1,100 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ branches: [master]
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ concurrency:
14
+ group: ci-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ # -------------------------------------------------------------------
19
+ # Job 1: source-tree tests across supported Python versions.
20
+ # Uses uv sync so the lockfile is honoured and runs are reproducible.
21
+ # -------------------------------------------------------------------
22
+ test:
23
+ name: test (py${{ matrix.python-version }})
24
+ runs-on: ubuntu-latest
25
+ strategy:
26
+ fail-fast: false
27
+ matrix:
28
+ python-version: ["3.12", "3.13", "3.14"]
29
+ steps:
30
+ - name: Checkout
31
+ uses: actions/checkout@v4
32
+
33
+ - name: Install uv
34
+ uses: astral-sh/setup-uv@v5
35
+ with:
36
+ enable-cache: true
37
+ cache-dependency-glob: "uv.lock"
38
+
39
+ - name: Set up Python ${{ matrix.python-version }}
40
+ run: uv python install ${{ matrix.python-version }}
41
+
42
+ - name: Create venv and install project with dev extras
43
+ # Dev extras: pytest, pytest-asyncio, aiosqlite, ruff. Editable install
44
+ # keeps the wheel build separate for the consumer-integration job.
45
+ run: |
46
+ uv venv --python ${{ matrix.python-version }} .venv
47
+ uv pip install --python .venv/bin/python -e ".[dev]"
48
+
49
+ - name: Run pytest
50
+ run: .venv/bin/python -m pytest tests/ -v
51
+
52
+ # -------------------------------------------------------------------
53
+ # Job 2: build wheel + sdist, then install the wheel into a clean
54
+ # virtualenv with zero dev deps and run the consumer integration
55
+ # script. This simulates an external PyPI consumer.
56
+ # -------------------------------------------------------------------
57
+ consumer-integration:
58
+ name: consumer integration (py${{ matrix.python-version }})
59
+ runs-on: ubuntu-latest
60
+ needs: test
61
+ strategy:
62
+ fail-fast: false
63
+ matrix:
64
+ python-version: ["3.12", "3.13", "3.14"]
65
+ steps:
66
+ - name: Checkout
67
+ uses: actions/checkout@v4
68
+
69
+ - name: Install uv
70
+ uses: astral-sh/setup-uv@v5
71
+ with:
72
+ enable-cache: true
73
+
74
+ - name: Set up Python ${{ matrix.python-version }}
75
+ run: uv python install ${{ matrix.python-version }}
76
+
77
+ - name: Build wheel and sdist
78
+ run: uv tool run --from build python -m build
79
+
80
+ - name: Create isolated consumer venv
81
+ run: uv venv --python ${{ matrix.python-version }} /tmp/consumer-env
82
+
83
+ - name: Install built wheel (no dev deps, only the wheel + aiosqlite driver)
84
+ run: uv pip install --python /tmp/consumer-env/bin/python dist/*.whl aiosqlite
85
+
86
+ - name: Confirm installed version matches wheel
87
+ run: |
88
+ /tmp/consumer-env/bin/python -c "import sqlmodel_ext; print('installed:', sqlmodel_ext.__version__ if hasattr(sqlmodel_ext, '__version__') else '(no __version__)')"
89
+
90
+ - name: Run consumer integration scenario
91
+ run: /tmp/consumer-env/bin/python examples/consumer_integration/run.py
92
+
93
+ - name: Upload distribution artifacts
94
+ if: matrix.python-version == '3.12'
95
+ uses: actions/upload-artifact@v4
96
+ with:
97
+ name: dist
98
+ path: dist/
99
+ if-no-files-found: error
100
+ retention-days: 14
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmodel-ext
3
- Version: 0.3.0
3
+ Version: 0.3.3
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
@@ -0,0 +1,57 @@
1
+ import { withMermaid } from 'vitepress-plugin-mermaid'
2
+ import llmstxt from 'vitepress-plugin-llms'
3
+ import { copyOrDownloadAsMarkdownButtons } from 'vitepress-plugin-llms'
4
+ import { zh } from './zh.mts'
5
+ import { en } from './en.mts'
6
+
7
+ export default withMermaid({
8
+ title: 'sqlmodel-ext',
9
+
10
+ vite: {
11
+ plugins: [
12
+ llmstxt({
13
+ // Exclude legacy redirect placeholders. The old guide/internals trees were
14
+ // migrated to tutorials/how-to/reference/explanation under Diátaxis;
15
+ // the placeholders only carry meta-refresh stubs and would pollute llms-full.txt.
16
+ ignoreFiles: [
17
+ 'guide/*',
18
+ 'internals/*',
19
+ 'en/guide/*',
20
+ 'en/internals/*',
21
+ ],
22
+ }),
23
+ ],
24
+ optimizeDeps: {
25
+ include: ['mermaid', 'dayjs'],
26
+ },
27
+ ssr: {
28
+ noExternal: ['vitepress-plugin-mermaid', 'mermaid'],
29
+ },
30
+ },
31
+
32
+ markdown: {
33
+ config(md) {
34
+ md.use(copyOrDownloadAsMarkdownButtons)
35
+ },
36
+ },
37
+
38
+ locales: {
39
+ root: {
40
+ label: '简体中文',
41
+ ...zh,
42
+ },
43
+ en: {
44
+ label: 'English',
45
+ ...en,
46
+ },
47
+ },
48
+
49
+ themeConfig: {
50
+ socialLinks: [
51
+ { icon: 'github', link: 'https://github.com/Foxerine/sqlmodel-ext' },
52
+ ],
53
+ search: {
54
+ provider: 'local',
55
+ },
56
+ },
57
+ })
@@ -0,0 +1,88 @@
1
+ import type { DefaultTheme } from 'vitepress'
2
+
3
+ export const en = {
4
+ lang: 'en',
5
+ description: 'SQLModel Enhancement Library — Tutorials, How-to, Reference, Explanation',
6
+
7
+ themeConfig: {
8
+ nav: [
9
+ { text: 'Home', link: '/en/' },
10
+ { text: 'Tutorials', link: '/en/tutorials/' },
11
+ { text: 'How-to', link: '/en/how-to/' },
12
+ { text: 'Reference', link: '/en/reference/' },
13
+ { text: 'Explanation', link: '/en/explanation/' },
14
+ ],
15
+
16
+ sidebar: {
17
+ '/en/tutorials/': [
18
+ {
19
+ text: 'Tutorials',
20
+ items: [
21
+ { text: 'Overview', link: '/en/tutorials/' },
22
+ { text: '01 · Getting started', link: '/en/tutorials/01-getting-started' },
23
+ { text: '02 · Building a blog API', link: '/en/tutorials/02-building-a-blog-api' },
24
+ { text: '03 · Adding Redis caching', link: '/en/tutorials/03-adding-redis-cache' },
25
+ ],
26
+ },
27
+ ],
28
+ '/en/how-to/': [
29
+ {
30
+ text: 'How-to guides',
31
+ items: [
32
+ { text: 'Overview', link: '/en/how-to/' },
33
+ { text: 'Integrate with FastAPI', link: '/en/how-to/integrate-with-fastapi' },
34
+ { text: 'Paginate a list endpoint', link: '/en/how-to/paginate-a-list-endpoint' },
35
+ { text: 'Define JTI models', link: '/en/how-to/define-jti-models' },
36
+ { text: 'Define STI models', link: '/en/how-to/define-sti-models' },
37
+ { text: 'Handle concurrent updates', link: '/en/how-to/handle-concurrent-updates' },
38
+ { text: 'Prevent MissingGreenlet errors', link: '/en/how-to/prevent-missing-greenlet' },
39
+ { text: 'Release the DB connection during long I/O', link: '/en/how-to/release-connection-during-long-io' },
40
+ { text: 'Configure cascade delete', link: '/en/how-to/configure-cascade-delete' },
41
+ { text: 'Cache queries with Redis', link: '/en/how-to/cache-queries' },
42
+ ],
43
+ },
44
+ ],
45
+ '/en/reference/': [
46
+ {
47
+ text: 'Reference',
48
+ items: [
49
+ { text: 'Overview', link: '/en/reference/' },
50
+ { text: 'Base classes', link: '/en/reference/base-classes' },
51
+ { text: 'CRUD methods', link: '/en/reference/crud-methods' },
52
+ { text: 'Field types', link: '/en/reference/field-types' },
53
+ { text: 'Mixins', link: '/en/reference/mixins' },
54
+ { text: 'Decorators & helpers', link: '/en/reference/decorators' },
55
+ { text: 'Pagination types', link: '/en/reference/pagination-types' },
56
+ ],
57
+ },
58
+ ],
59
+ '/en/explanation/': [
60
+ {
61
+ text: 'Explanation',
62
+ items: [
63
+ { text: 'Overview', link: '/en/explanation/' },
64
+ { text: 'Prerequisites', link: '/en/explanation/prerequisites' },
65
+ { text: 'Metaclass & SQLModelBase', link: '/en/explanation/metaclass' },
66
+ { text: 'CRUD pipeline', link: '/en/explanation/crud-pipeline' },
67
+ { text: 'Polymorphic internals', link: '/en/explanation/polymorphic-internals' },
68
+ { text: 'Optimistic locking', link: '/en/explanation/optimistic-lock' },
69
+ { text: 'Relation preloading', link: '/en/explanation/relation-preload' },
70
+ { text: 'Cascade delete semantics', link: '/en/explanation/cascade-delete-semantics' },
71
+ { text: 'Redis caching', link: '/en/explanation/cached-table' },
72
+ { text: 'Static analyzer', link: '/en/explanation/relation-load-checker' },
73
+ ],
74
+ },
75
+ ],
76
+ },
77
+
78
+ outline: {
79
+ level: [2, 3],
80
+ label: 'On this page',
81
+ },
82
+
83
+ docFooter: {
84
+ prev: 'Previous',
85
+ next: 'Next',
86
+ },
87
+ } satisfies DefaultTheme.Config,
88
+ }
@@ -0,0 +1,13 @@
1
+ // .vitepress/theme/index.ts
2
+ import DefaultTheme from 'vitepress/theme'
3
+ import type { Theme } from 'vitepress'
4
+ import CopyOrDownloadAsMarkdownButtons from 'vitepress-plugin-llms/vitepress-components/CopyOrDownloadAsMarkdownButtons.vue'
5
+ import '@fontsource/maple-mono';
6
+ import './style/custom.css'
7
+
8
+ export default {
9
+ extends: DefaultTheme,
10
+ enhanceApp({ app }) {
11
+ app.component('CopyOrDownloadAsMarkdownButtons', CopyOrDownloadAsMarkdownButtons)
12
+ },
13
+ } satisfies Theme
@@ -0,0 +1,88 @@
1
+ import type { DefaultTheme } from 'vitepress'
2
+
3
+ export const zh = {
4
+ lang: 'zh-CN',
5
+ description: 'SQLModel 增强库 — 教程、操作指南、参考、讲解',
6
+
7
+ themeConfig: {
8
+ nav: [
9
+ { text: '首页', link: '/' },
10
+ { text: '教程', link: '/tutorials/' },
11
+ { text: '操作指南', link: '/how-to/' },
12
+ { text: '参考', link: '/reference/' },
13
+ { text: '讲解', link: '/explanation/' },
14
+ ],
15
+
16
+ sidebar: {
17
+ '/tutorials/': [
18
+ {
19
+ text: '教程',
20
+ items: [
21
+ { text: '总览', link: '/tutorials/' },
22
+ { text: '01 · 快速上手', link: '/tutorials/01-getting-started' },
23
+ { text: '02 · 构建博客 API', link: '/tutorials/02-building-a-blog-api' },
24
+ { text: '03 · 给博客加 Redis 缓存', link: '/tutorials/03-adding-redis-cache' },
25
+ ],
26
+ },
27
+ ],
28
+ '/how-to/': [
29
+ {
30
+ text: '操作指南',
31
+ items: [
32
+ { text: '总览', link: '/how-to/' },
33
+ { text: '集成 FastAPI', link: '/how-to/integrate-with-fastapi' },
34
+ { text: '给列表端点加分页', link: '/how-to/paginate-a-list-endpoint' },
35
+ { text: '定义 JTI 联表继承模型', link: '/how-to/define-jti-models' },
36
+ { text: '定义 STI 单表继承模型', link: '/how-to/define-sti-models' },
37
+ { text: '处理并发更新', link: '/how-to/handle-concurrent-updates' },
38
+ { text: '防止 MissingGreenlet 错误', link: '/how-to/prevent-missing-greenlet' },
39
+ { text: '长 I/O 期间释放数据库连接', link: '/how-to/release-connection-during-long-io' },
40
+ { text: '配置级联删除', link: '/how-to/configure-cascade-delete' },
41
+ { text: '给查询加 Redis 缓存', link: '/how-to/cache-queries' },
42
+ ],
43
+ },
44
+ ],
45
+ '/reference/': [
46
+ {
47
+ text: '参考',
48
+ items: [
49
+ { text: '总览', link: '/reference/' },
50
+ { text: '基础类', link: '/reference/base-classes' },
51
+ { text: 'CRUD 方法', link: '/reference/crud-methods' },
52
+ { text: '字段类型', link: '/reference/field-types' },
53
+ { text: 'Mixin 类', link: '/reference/mixins' },
54
+ { text: '装饰器与辅助函数', link: '/reference/decorators' },
55
+ { text: '分页类型', link: '/reference/pagination-types' },
56
+ ],
57
+ },
58
+ ],
59
+ '/explanation/': [
60
+ {
61
+ text: '讲解',
62
+ items: [
63
+ { text: '总览', link: '/explanation/' },
64
+ { text: '前置知识', link: '/explanation/prerequisites' },
65
+ { text: '元类与 SQLModelBase', link: '/explanation/metaclass' },
66
+ { text: 'CRUD 实现', link: '/explanation/crud-pipeline' },
67
+ { text: '多态继承机制', link: '/explanation/polymorphic-internals' },
68
+ { text: '乐观锁机制', link: '/explanation/optimistic-lock' },
69
+ { text: '关系预加载机制', link: '/explanation/relation-preload' },
70
+ { text: '级联删除语义', link: '/explanation/cascade-delete-semantics' },
71
+ { text: 'Redis 缓存机制', link: '/explanation/cached-table' },
72
+ { text: '静态分析器原理', link: '/explanation/relation-load-checker' },
73
+ ],
74
+ },
75
+ ],
76
+ },
77
+
78
+ outline: {
79
+ level: [2, 3],
80
+ label: '目录',
81
+ },
82
+
83
+ docFooter: {
84
+ prev: '上一页',
85
+ next: '下一页',
86
+ },
87
+ } satisfies DefaultTheme.Config,
88
+ }