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.
- sqlmodel_ext-0.3.3/.github/workflows/ci.yml +100 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/PKG-INFO +1 -1
- sqlmodel_ext-0.3.3/docs/.vitepress/config.mts +57 -0
- sqlmodel_ext-0.3.3/docs/.vitepress/en.mts +88 -0
- sqlmodel_ext-0.3.3/docs/.vitepress/theme/index.ts +13 -0
- sqlmodel_ext-0.3.3/docs/.vitepress/zh.mts +88 -0
- {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/cached-table.md +244 -227
- sqlmodel_ext-0.3.3/docs/en/explanation/cascade-delete-semantics.md +153 -0
- sqlmodel_ext-0.3.0/docs/en/internals/crud.md → sqlmodel_ext-0.3.3/docs/en/explanation/crud-pipeline.md +288 -283
- sqlmodel_ext-0.3.3/docs/en/explanation/index.md +41 -0
- {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/metaclass.md +319 -315
- {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/optimistic-lock.md +120 -114
- sqlmodel_ext-0.3.0/docs/en/internals/polymorphic.md → sqlmodel_ext-0.3.3/docs/en/explanation/polymorphic-internals.md +210 -204
- {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/prerequisites.md +158 -154
- {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/relation-load-checker.md +116 -108
- {sqlmodel_ext-0.3.0/docs/en/internals → sqlmodel_ext-0.3.3/docs/en/explanation}/relation-preload.md +197 -191
- sqlmodel_ext-0.3.3/docs/en/guide/cached-table.md +17 -0
- sqlmodel_ext-0.3.3/docs/en/guide/crud.md +15 -0
- sqlmodel_ext-0.3.3/docs/en/guide/field-types.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/guide/index.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/guide/optimistic-lock.md +14 -0
- sqlmodel_ext-0.3.3/docs/en/guide/pagination.md +14 -0
- sqlmodel_ext-0.3.3/docs/en/guide/polymorphic.md +17 -0
- sqlmodel_ext-0.3.3/docs/en/guide/relation-load-checker.md +16 -0
- sqlmodel_ext-0.3.3/docs/en/guide/relation-preload.md +17 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/cache-queries.md +142 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/configure-cascade-delete.md +234 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/define-jti-models.md +120 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/define-sti-models.md +132 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/handle-concurrent-updates.md +88 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/index.md +41 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/integrate-with-fastapi.md +116 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/paginate-a-list-endpoint.md +79 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/prevent-missing-greenlet.md +162 -0
- sqlmodel_ext-0.3.3/docs/en/how-to/release-connection-during-long-io.md +181 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/docs/en/index.md +10 -4
- sqlmodel_ext-0.3.3/docs/en/internals/cached-table.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/internals/crud.md +15 -0
- sqlmodel_ext-0.3.3/docs/en/internals/index.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/internals/metaclass.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/internals/optimistic-lock.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/internals/polymorphic.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/internals/prerequisites.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/internals/relation-load-checker.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/internals/relation-preload.md +13 -0
- sqlmodel_ext-0.3.3/docs/en/reference/base-classes.md +121 -0
- sqlmodel_ext-0.3.3/docs/en/reference/crud-methods.md +275 -0
- sqlmodel_ext-0.3.3/docs/en/reference/decorators.md +162 -0
- sqlmodel_ext-0.3.3/docs/en/reference/field-types.md +218 -0
- sqlmodel_ext-0.3.3/docs/en/reference/index.md +54 -0
- sqlmodel_ext-0.3.3/docs/en/reference/mixins.md +222 -0
- sqlmodel_ext-0.3.3/docs/en/reference/pagination-types.md +113 -0
- sqlmodel_ext-0.3.3/docs/en/tutorials/01-getting-started.md +174 -0
- sqlmodel_ext-0.3.3/docs/en/tutorials/02-building-a-blog-api.md +388 -0
- sqlmodel_ext-0.3.3/docs/en/tutorials/03-adding-redis-cache.md +269 -0
- sqlmodel_ext-0.3.3/docs/en/tutorials/index.md +32 -0
- {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/cached-table.md +244 -227
- sqlmodel_ext-0.3.3/docs/explanation/cascade-delete-semantics.md +153 -0
- sqlmodel_ext-0.3.0/docs/internals/crud.md → sqlmodel_ext-0.3.3/docs/explanation/crud-pipeline.md +288 -283
- sqlmodel_ext-0.3.3/docs/explanation/index.md +41 -0
- {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/metaclass.md +319 -315
- {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/optimistic-lock.md +120 -114
- sqlmodel_ext-0.3.0/docs/internals/polymorphic.md → sqlmodel_ext-0.3.3/docs/explanation/polymorphic-internals.md +210 -204
- {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/prerequisites.md +158 -154
- {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/relation-load-checker.md +116 -108
- {sqlmodel_ext-0.3.0/docs/internals → sqlmodel_ext-0.3.3/docs/explanation}/relation-preload.md +197 -191
- sqlmodel_ext-0.3.3/docs/guide/cached-table.md +17 -0
- sqlmodel_ext-0.3.3/docs/guide/crud.md +15 -0
- sqlmodel_ext-0.3.3/docs/guide/field-types.md +13 -0
- sqlmodel_ext-0.3.3/docs/guide/index.md +13 -0
- sqlmodel_ext-0.3.3/docs/guide/optimistic-lock.md +14 -0
- sqlmodel_ext-0.3.3/docs/guide/pagination.md +14 -0
- sqlmodel_ext-0.3.3/docs/guide/polymorphic.md +17 -0
- sqlmodel_ext-0.3.3/docs/guide/relation-load-checker.md +16 -0
- sqlmodel_ext-0.3.3/docs/guide/relation-preload.md +17 -0
- sqlmodel_ext-0.3.3/docs/how-to/cache-queries.md +142 -0
- sqlmodel_ext-0.3.3/docs/how-to/configure-cascade-delete.md +234 -0
- sqlmodel_ext-0.3.3/docs/how-to/define-jti-models.md +120 -0
- sqlmodel_ext-0.3.3/docs/how-to/define-sti-models.md +132 -0
- sqlmodel_ext-0.3.3/docs/how-to/handle-concurrent-updates.md +87 -0
- sqlmodel_ext-0.3.3/docs/how-to/index.md +41 -0
- sqlmodel_ext-0.3.3/docs/how-to/integrate-with-fastapi.md +116 -0
- sqlmodel_ext-0.3.3/docs/how-to/paginate-a-list-endpoint.md +79 -0
- sqlmodel_ext-0.3.3/docs/how-to/prevent-missing-greenlet.md +162 -0
- sqlmodel_ext-0.3.3/docs/how-to/release-connection-during-long-io.md +181 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/docs/index.md +10 -4
- sqlmodel_ext-0.3.3/docs/internals/cached-table.md +13 -0
- sqlmodel_ext-0.3.3/docs/internals/crud.md +15 -0
- sqlmodel_ext-0.3.3/docs/internals/index.md +13 -0
- sqlmodel_ext-0.3.3/docs/internals/metaclass.md +13 -0
- sqlmodel_ext-0.3.3/docs/internals/optimistic-lock.md +13 -0
- sqlmodel_ext-0.3.3/docs/internals/polymorphic.md +13 -0
- sqlmodel_ext-0.3.3/docs/internals/prerequisites.md +13 -0
- sqlmodel_ext-0.3.3/docs/internals/relation-load-checker.md +13 -0
- sqlmodel_ext-0.3.3/docs/internals/relation-preload.md +13 -0
- sqlmodel_ext-0.3.3/docs/reference/base-classes.md +121 -0
- sqlmodel_ext-0.3.3/docs/reference/crud-methods.md +275 -0
- sqlmodel_ext-0.3.3/docs/reference/decorators.md +162 -0
- sqlmodel_ext-0.3.3/docs/reference/field-types.md +218 -0
- sqlmodel_ext-0.3.3/docs/reference/index.md +54 -0
- sqlmodel_ext-0.3.3/docs/reference/mixins.md +222 -0
- sqlmodel_ext-0.3.3/docs/reference/pagination-types.md +113 -0
- sqlmodel_ext-0.3.3/docs/tutorials/01-getting-started.md +174 -0
- sqlmodel_ext-0.3.3/docs/tutorials/02-building-a-blog-api.md +388 -0
- sqlmodel_ext-0.3.3/docs/tutorials/03-adding-redis-cache.md +269 -0
- sqlmodel_ext-0.3.3/docs/tutorials/index.md +32 -0
- sqlmodel_ext-0.3.3/examples/consumer_integration/run.py +148 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/package.json +2 -1
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/pnpm-lock.yaml +1096 -390
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/pyproject.toml +1 -1
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/__init__.py +1 -1
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_compat.py +43 -3
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/base.py +123 -7
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/__init__.py +23 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/cached_table.py +71 -36
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/polymorphic.py +16 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/table.py +182 -33
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/pagination.py +2 -2
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/relation_load_checker.py +3825 -3645
- sqlmodel_ext-0.3.3/tests/__init__.py +0 -0
- sqlmodel_ext-0.3.3/tests/_models.py +45 -0
- sqlmodel_ext-0.3.3/tests/conftest.py +58 -0
- sqlmodel_ext-0.3.3/tests/test_annotated_default_factory_inheritance.py +194 -0
- sqlmodel_ext-0.3.3/tests/test_basic_crud.py +61 -0
- sqlmodel_ext-0.3.3/tests/test_smoke_imports.py +90 -0
- sqlmodel_ext-0.3.3/tests/test_sti_default_isolation.py +132 -0
- sqlmodel_ext-0.3.3/uv.lock +585 -0
- sqlmodel_ext-0.3.0/docs/.vitepress/config.mts +0 -27
- sqlmodel_ext-0.3.0/docs/.vitepress/en.mts +0 -59
- sqlmodel_ext-0.3.0/docs/.vitepress/theme/index.ts +0 -6
- sqlmodel_ext-0.3.0/docs/.vitepress/zh.mts +0 -59
- sqlmodel_ext-0.3.0/docs/en/guide/cached-table.md +0 -186
- sqlmodel_ext-0.3.0/docs/en/guide/crud.md +0 -264
- sqlmodel_ext-0.3.0/docs/en/guide/field-types.md +0 -129
- sqlmodel_ext-0.3.0/docs/en/guide/index.md +0 -175
- sqlmodel_ext-0.3.0/docs/en/guide/optimistic-lock.md +0 -102
- sqlmodel_ext-0.3.0/docs/en/guide/pagination.md +0 -136
- sqlmodel_ext-0.3.0/docs/en/guide/polymorphic.md +0 -141
- sqlmodel_ext-0.3.0/docs/en/guide/relation-load-checker.md +0 -134
- sqlmodel_ext-0.3.0/docs/en/guide/relation-preload.md +0 -118
- sqlmodel_ext-0.3.0/docs/en/internals/index.md +0 -78
- sqlmodel_ext-0.3.0/docs/guide/cached-table.md +0 -176
- sqlmodel_ext-0.3.0/docs/guide/crud.md +0 -264
- sqlmodel_ext-0.3.0/docs/guide/field-types.md +0 -125
- sqlmodel_ext-0.3.0/docs/guide/index.md +0 -175
- sqlmodel_ext-0.3.0/docs/guide/optimistic-lock.md +0 -102
- sqlmodel_ext-0.3.0/docs/guide/pagination.md +0 -136
- sqlmodel_ext-0.3.0/docs/guide/polymorphic.md +0 -141
- sqlmodel_ext-0.3.0/docs/guide/relation-load-checker.md +0 -124
- sqlmodel_ext-0.3.0/docs/guide/relation-preload.md +0 -118
- sqlmodel_ext-0.3.0/docs/internals/index.md +0 -78
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/.gitignore +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/LICENSE +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/README.md +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/README_zh.md +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/docs/.vitepress/theme/style/custom.css +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_exceptions.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_sa_type.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/_utils.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/_internal/__init__.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/_internal/path.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/_ssrf.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/__init__.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/__init__.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/array.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/exceptions.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/jsonb_types.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/dialects/postgresql/numpy_vector.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/ip_address.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/mixins/__init__.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/mixins/module_name_mixin.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/field_types/url.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/__init__.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/info_response.py +0 -0
- {sqlmodel_ext-0.3.0 → sqlmodel_ext-0.3.3}/src/sqlmodel_ext/mixins/optimistic_lock.py +0 -0
- {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.
|
|
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
|
+
}
|