schemez 0.2.4__tar.gz → 0.3.0__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 (32) hide show
  1. {schemez-0.2.4 → schemez-0.3.0}/PKG-INFO +34 -39
  2. {schemez-0.2.4 → schemez-0.3.0}/README.md +0 -6
  3. schemez-0.3.0/pyproject.toml +266 -0
  4. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/__init__.py +18 -1
  5. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/pydantic_types.py +6 -2
  6. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/schemadef/schemadef.py +164 -13
  7. schemez-0.2.4/.copier-answers.yml +0 -21
  8. schemez-0.2.4/.github/FUNDING.yml +0 -3
  9. schemez-0.2.4/.github/copilot-instructions.md +0 -19
  10. schemez-0.2.4/.github/dependabot.yml +0 -9
  11. schemez-0.2.4/.github/workflows/build.yml +0 -88
  12. schemez-0.2.4/.github/workflows/documentation.yml +0 -57
  13. schemez-0.2.4/.gitignore +0 -32
  14. schemez-0.2.4/.pre-commit-config.yaml +0 -48
  15. schemez-0.2.4/docs/.empty +0 -0
  16. schemez-0.2.4/duties.py +0 -60
  17. schemez-0.2.4/mkdocs.yml +0 -92
  18. schemez-0.2.4/overrides/_dummy.txt +0 -1
  19. schemez-0.2.4/pyproject.toml +0 -252
  20. schemez-0.2.4/tests/__init__.py +0 -3
  21. schemez-0.2.4/tests/conftest.py +0 -1
  22. schemez-0.2.4/tests/test_enum_support.py +0 -192
  23. schemez-0.2.4/tests/test_schema.py +0 -5
  24. schemez-0.2.4/tests/test_schema_field.py +0 -467
  25. {schemez-0.2.4 → schemez-0.3.0}/LICENSE +0 -0
  26. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/code.py +0 -0
  27. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/convert.py +0 -0
  28. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/docstrings.py +0 -0
  29. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/helpers.py +0 -0
  30. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/py.typed +0 -0
  31. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/schema.py +0 -0
  32. {schemez-0.2.4 → schemez-0.3.0}/src/schemez/schemadef/__init__.py +0 -0
@@ -1,36 +1,32 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.3
2
2
  Name: schemez
3
- Version: 0.2.4
3
+ Version: 0.3.0
4
4
  Summary: Pydantic shim for config stuff
5
- Project-URL: Documentation, https://phil65.github.io/schemez/
6
- Project-URL: Source, https://github.com/phil65/schemez
7
- Project-URL: Issues, https://github.com/phil65/schemez/issues
8
- Project-URL: Discussions, https://github.com/phil65/schemez/discussions
9
- Project-URL: Code coverage, https://app.codecov.io/gh/phil65/schemez
5
+ Keywords:
6
+ Author: Philipp Temminghoff
10
7
  Author-email: Philipp Temminghoff <philipptemminghoff@googlemail.com>
11
8
  License: MIT License
12
-
13
- Copyright (c) 2024, Philipp Temminghoff
14
-
15
- Permission is hereby granted, free of charge, to any person obtaining a copy
16
- of this software and associated documentation files (the "Software"), to deal
17
- in the Software without restriction, including without limitation the rights
18
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
- copies of the Software, and to permit persons to whom the Software is
20
- furnished to do so, subject to the following conditions:
21
-
22
- The above copyright notice and this permission notice shall be included in all
23
- copies or substantial portions of the Software.
24
-
25
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
- SOFTWARE.
32
-
33
- License-File: LICENSE
9
+
10
+ Copyright (c) 2024, Philipp Temminghoff
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+
34
30
  Classifier: Development Status :: 4 - Beta
35
31
  Classifier: Framework :: Pydantic
36
32
  Classifier: Framework :: Pydantic :: 2
@@ -45,23 +41,26 @@ Classifier: Topic :: Documentation
45
41
  Classifier: Topic :: Software Development
46
42
  Classifier: Topic :: Utilities
47
43
  Classifier: Typing :: Typed
48
- Requires-Python: >=3.12
49
44
  Requires-Dist: griffe>=1.7.3
50
45
  Requires-Dist: pydantic
51
46
  Requires-Dist: universal-pathlib>=0.2.6
47
+ Requires-Dist: llmling-agent ; extra == 'ai'
48
+ Requires-Dist: anyenv>=0.4.14 ; extra == 'ai'
49
+ Requires-Dist: yamling ; extra == 'yaml'
50
+ Requires-Python: >=3.12
51
+ Project-URL: Code coverage, https://app.codecov.io/gh/phil65/schemez
52
+ Project-URL: Discussions, https://github.com/phil65/schemez/discussions
53
+ Project-URL: Documentation, https://phil65.github.io/schemez/
54
+ Project-URL: Issues, https://github.com/phil65/schemez/issues
55
+ Project-URL: Source, https://github.com/phil65/schemez
52
56
  Provides-Extra: ai
53
- Requires-Dist: anyenv>=0.4.14; extra == 'ai'
54
- Requires-Dist: llmling-agent; extra == 'ai'
55
57
  Provides-Extra: yaml
56
- Requires-Dist: yamling; extra == 'yaml'
57
58
  Description-Content-Type: text/markdown
58
59
 
59
60
  # Schemez
60
61
 
61
62
  [![PyPI License](https://img.shields.io/pypi/l/schemez.svg)](https://pypi.org/project/schemez/)
62
63
  [![Package status](https://img.shields.io/pypi/status/schemez.svg)](https://pypi.org/project/schemez/)
63
- [![Daily downloads](https://img.shields.io/pypi/dd/schemez.svg)](https://pypi.org/project/schemez/)
64
- [![Weekly downloads](https://img.shields.io/pypi/dw/schemez.svg)](https://pypi.org/project/schemez/)
65
64
  [![Monthly downloads](https://img.shields.io/pypi/dm/schemez.svg)](https://pypi.org/project/schemez/)
66
65
  [![Distribution format](https://img.shields.io/pypi/format/schemez.svg)](https://pypi.org/project/schemez/)
67
66
  [![Wheel availability](https://img.shields.io/pypi/wheel/schemez.svg)](https://pypi.org/project/schemez/)
@@ -79,12 +78,8 @@ Description-Content-Type: text/markdown
79
78
  [![Github last commit](https://img.shields.io/github/last-commit/phil65/schemez)](https://github.com/phil65/schemez/commits)
80
79
  [![Github release date](https://img.shields.io/github/release-date/phil65/schemez)](https://github.com/phil65/schemez/releases)
81
80
  [![Github language count](https://img.shields.io/github/languages/count/phil65/schemez)](https://github.com/phil65/schemez)
82
- [![Github commits this week](https://img.shields.io/github/commit-activity/w/phil65/schemez)](https://github.com/phil65/schemez)
83
81
  [![Github commits this month](https://img.shields.io/github/commit-activity/m/phil65/schemez)](https://github.com/phil65/schemez)
84
- [![Github commits this year](https://img.shields.io/github/commit-activity/y/phil65/schemez)](https://github.com/phil65/schemez)
85
82
  [![Package status](https://codecov.io/gh/phil65/schemez/branch/main/graph/badge.svg)](https://codecov.io/gh/phil65/schemez/)
86
- [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
87
83
  [![PyUp](https://pyup.io/repos/github/phil65/schemez/shield.svg)](https://pyup.io/repos/github/phil65/schemez/)
88
84
 
89
85
  [Read the documentation!](https://phil65.github.io/schemez/)
90
-
@@ -2,8 +2,6 @@
2
2
 
3
3
  [![PyPI License](https://img.shields.io/pypi/l/schemez.svg)](https://pypi.org/project/schemez/)
4
4
  [![Package status](https://img.shields.io/pypi/status/schemez.svg)](https://pypi.org/project/schemez/)
5
- [![Daily downloads](https://img.shields.io/pypi/dd/schemez.svg)](https://pypi.org/project/schemez/)
6
- [![Weekly downloads](https://img.shields.io/pypi/dw/schemez.svg)](https://pypi.org/project/schemez/)
7
5
  [![Monthly downloads](https://img.shields.io/pypi/dm/schemez.svg)](https://pypi.org/project/schemez/)
8
6
  [![Distribution format](https://img.shields.io/pypi/format/schemez.svg)](https://pypi.org/project/schemez/)
9
7
  [![Wheel availability](https://img.shields.io/pypi/wheel/schemez.svg)](https://pypi.org/project/schemez/)
@@ -21,12 +19,8 @@
21
19
  [![Github last commit](https://img.shields.io/github/last-commit/phil65/schemez)](https://github.com/phil65/schemez/commits)
22
20
  [![Github release date](https://img.shields.io/github/release-date/phil65/schemez)](https://github.com/phil65/schemez/releases)
23
21
  [![Github language count](https://img.shields.io/github/languages/count/phil65/schemez)](https://github.com/phil65/schemez)
24
- [![Github commits this week](https://img.shields.io/github/commit-activity/w/phil65/schemez)](https://github.com/phil65/schemez)
25
22
  [![Github commits this month](https://img.shields.io/github/commit-activity/m/phil65/schemez)](https://github.com/phil65/schemez)
26
- [![Github commits this year](https://img.shields.io/github/commit-activity/y/phil65/schemez)](https://github.com/phil65/schemez)
27
23
  [![Package status](https://codecov.io/gh/phil65/schemez/branch/main/graph/badge.svg)](https://codecov.io/gh/phil65/schemez/)
28
- [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
29
24
  [![PyUp](https://pyup.io/repos/github/phil65/schemez/shield.svg)](https://pyup.io/repos/github/phil65/schemez/)
30
25
 
31
26
  [Read the documentation!](https://phil65.github.io/schemez/)
32
-
@@ -0,0 +1,266 @@
1
+ [project]
2
+ name = "schemez"
3
+ version = "0.3.0"
4
+ description = "Pydantic shim for config stuff"
5
+ readme = "README.md"
6
+ requires-python = ">=3.12"
7
+ license = { file = "LICENSE" }
8
+ authors = [
9
+ { name = "Philipp Temminghoff", email = "philipptemminghoff@googlemail.com" },
10
+ ]
11
+ keywords = []
12
+ classifiers = [
13
+ "Development Status :: 4 - Beta",
14
+ "Framework :: Pydantic",
15
+ "Framework :: Pydantic :: 2",
16
+ "Intended Audience :: Developers",
17
+ "Operating System :: OS Independent",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3 :: Only",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Programming Language :: Python :: 3.14",
23
+ "Topic :: Documentation",
24
+ "Topic :: Software Development",
25
+ "Topic :: Utilities",
26
+ "Typing :: Typed",
27
+ ]
28
+ dependencies = [
29
+ "griffe>=1.7.3",
30
+ "pydantic",
31
+ # Only add below (Copier)
32
+ "universal-pathlib>=0.2.6",
33
+ ]
34
+
35
+ [project.urls]
36
+ "Code coverage" = "https://app.codecov.io/gh/phil65/schemez"
37
+ Discussions = "https://github.com/phil65/schemez/discussions"
38
+ Documentation = "https://phil65.github.io/schemez/"
39
+ Issues = "https://github.com/phil65/schemez/issues"
40
+ Source = "https://github.com/phil65/schemez"
41
+
42
+ [project.optional-dependencies]
43
+ ai = ["llmling-agent", "anyenv>=0.4.14"]
44
+ yaml = ["yamling"]
45
+
46
+ [dependency-groups]
47
+ dev = [
48
+ "devtools",
49
+ "pyreadline3",
50
+ "pytest",
51
+ "pytest-cov",
52
+ # Only add below (Copier)
53
+ ]
54
+ benchmark = ["pyinstrument"]
55
+ docs = [
56
+ "mkdocs-material",
57
+ "mkdocs-mknodes",
58
+ # Only add below (Copier)
59
+ ]
60
+ lint = [
61
+ "mypy; python_version >= '3.14'",
62
+ "mypy[faster-cache]; python_version < '3.14'",
63
+ "ruff",
64
+ # Only add below (Copier)
65
+ ]
66
+
67
+ [build-system]
68
+ requires = ["uv_build>=0.8.22"]
69
+ build-backend = "uv_build"
70
+
71
+ [tool.coverage.report]
72
+ exclude_lines = [
73
+ "pragma: no cover",
74
+ "if TYPE_CHECKING:",
75
+ "@overload",
76
+ "except ImportError",
77
+ 'if __name__ == "__main__":',
78
+ ]
79
+
80
+ [tool.mknodes]
81
+ allowed-commit-types = [
82
+ "fix",
83
+ "feat",
84
+ "refactor",
85
+ "docs",
86
+ "test",
87
+ "build",
88
+ "chore",
89
+ ]
90
+ docstring-style = "google"
91
+
92
+ [tool.mypy]
93
+ python_version = "3.12"
94
+ disable_error_code = ["misc", "import"]
95
+ pretty = true
96
+ check_untyped_defs = true
97
+ exclude = ["venv/", ".venv/", "tests/"]
98
+ plugins = ["pydantic.mypy"]
99
+
100
+ [tool.pyright]
101
+ venvPath = "."
102
+ venv = ".venv"
103
+ pythonVersion = "3.12"
104
+ pythonPlatform = "All"
105
+ typeCheckingMode = "basic"
106
+ deprecateTypingAliases = true
107
+ reportMissingTypeStubs = false
108
+ reportUnusedCallResult = false
109
+ reportUnknownVariableType = false
110
+ reportAny = false
111
+ reportImplicitOverride = false
112
+ reportUnusedFunction = false
113
+ reportImplicitStringConcatenation = false
114
+ reportIgnoreCommentWithoutRule = false
115
+ reportUnannotatedClassAttribute = false
116
+ reportSelfClsParameterName = false
117
+ reportPrivateImportUsage = false
118
+
119
+ [tool.pytest.ini_options]
120
+ log_cli = true
121
+ log_date_format = "%Y-%m-%d %H:%M:%S"
122
+ log_format = "%(asctime)s %(levelname)s %(message)s"
123
+ testpaths = "tests/"
124
+
125
+ [tool.ruff]
126
+ line-length = 90
127
+ extend-exclude = ["docs"]
128
+ target-version = "py312"
129
+
130
+ [tool.ruff.lint]
131
+ future-annotations = true
132
+ select = [
133
+ "A", # Flake8-builtins
134
+ # "ANN", # Flake8-Annotations
135
+ # "ASYNC", # Flake8-Async
136
+ # "ARG", # # Flake8-Unused-Arguments
137
+ "B", # flake8-bugbear
138
+ "BLE", # Flake8-blind-except
139
+ "C",
140
+ "C4", # flake8-comprehensions
141
+ # "C90", # MCCabe
142
+ "COM", # Flake8-commas
143
+ # "CPY", # Copyright-related rules
144
+ "D", # PyDocStyle
145
+ # "DTZ", # Flake8- Datetimez
146
+ "E", # PyCodeStyle Error
147
+ "EM", # flake8-errmsg
148
+ # "ERA", # Eradicate
149
+ "EXE", # flake8-executable
150
+ "F", # PyFlakes
151
+ "FA", # flake8-future-annotations
152
+ # "FBT", # flake8-boolean-trap
153
+ # "FIX", # flake8-fixme
154
+ "FLY", # flynt
155
+ "G", # flake8-logging-format
156
+ "I", # ISort
157
+ "ICN", # Flake8-import-conventions
158
+ "INP", # flake8-no-pep420
159
+ "INT", # flake8-gettext
160
+ "ISC", # flake8-implicit-str-concat
161
+ "N", # pep8-naming
162
+ # "NPY", # numpy-specific rules
163
+ # "PD", # pandas-vet
164
+ "PERF", # perflint
165
+ # "PGH", # pygrep-hooks
166
+ "PIE", # flake8-pie
167
+ "PLE", # PyLint Error
168
+ "PLC", # PyLint convention
169
+ # "PLW", # PyLint Warning
170
+ "PLR", # PyLint refactor
171
+ "PT", # flake8-pytest-style
172
+ "PTH", # flake8-use-pathlib
173
+ "PYI", # flake8-pyi
174
+ "Q", # flake8-quotes
175
+ "RET", # flake8-return
176
+ "RSE", # flake8-raise
177
+ "RUF", # ruff-specific rules
178
+ # "S", # flake8-bandit
179
+ "SIM", # flake8-simplify
180
+ "SLF", # flake8-self
181
+ "SLOT", # flake8-slots
182
+ # "T",
183
+ # "TD", # flake8-todos
184
+ "T10", # flake8-debugger
185
+ # "T20", # flake8-print
186
+ "TC", # flake8-type-checking
187
+ "TID", # flake8-tidy-imports
188
+ "TRY", # tryceratops
189
+ "UP", # PyUpgrade
190
+ "W", # PyCodeStyle warning
191
+ "YTT", # flake8-2020
192
+ ]
193
+ ignore = [
194
+ "C408", # Unnecessary {obj_type} call (rewrite as a literal)
195
+ "B905", # zip() without an explicit strict= parameter
196
+ "C901", # {name} is too complex ({complexity} > {max_complexity})
197
+ "COM812",
198
+ # "CPY001", # Missing copyright notice at top of file
199
+ "D100", # Missing docstring in public module
200
+ "D101", # Missing docstring in public class
201
+ "D102", # Missing docstring in public method
202
+ "D103", # Missing docstring in public function
203
+ "D104", # Missing docstring in public package
204
+ "D105", # Missing docstring in magic method
205
+ "D106", # Missing docstring in public nested class
206
+ "D107", # Missing docstring in __init__
207
+ "D203", # 1 blank line required before class docstring
208
+ "D204", # 1 blank line required after class docstring
209
+ "D213", # Multi-line docstring summary should start at the second line
210
+ "D215", # Section underline is over-indented ("{name}")
211
+ "D400", # First line should end with a period
212
+ "D401", # First line of docstring should be in imperative mood: "{first_line}"
213
+ "D404", # First word of the docstring should not be "This"
214
+ "D406", # Section name should end with a newline ("{name}")
215
+ "D407", # Missing dashed underline after section ("{name}")
216
+ "D408", # Section underline should be in the line following the section's name ("{name}")
217
+ "D409", # Section underline should match the length of its name ("{name}")
218
+ "D413", # Missing blank line after last section ("{name}")
219
+ "ISC001",
220
+ "PLC0415",
221
+ "PLR0912", # Too many branches
222
+ "PLR0913", # Too many arguments to function call
223
+ "PLR0915", # Too many statements
224
+ # "PLR2004", # Magic values instead of named consts
225
+ "SLF001", # Private member accessed
226
+ "TRY003", # Avoid specifying long messages outside the exception class
227
+ "TC006", # runtime-cast-value
228
+ ]
229
+
230
+ [tool.ruff.lint.flake8-quotes]
231
+ docstring-quotes = "double"
232
+
233
+ [tool.ruff.lint.flake8-type-checking]
234
+ runtime-evaluated-base-classes = [
235
+ "pydantic.BaseModel",
236
+ "sqlalchemy.orm.DeclarativeBase",
237
+ "schemez.Schema",
238
+ ]
239
+ runtime-evaluated-decorators = [
240
+ "pydantic.validate_call",
241
+ "attrs.define",
242
+ "fastapi.FastAPI.get",
243
+ "fastapi.FastAPI.post",
244
+ "fastmcp.FastMCP.tool",
245
+ ]
246
+
247
+ [tool.ruff.lint.isort]
248
+ lines-after-imports = 2
249
+ # lines-between-types = 1
250
+ # atomic = true
251
+ force-sort-within-sections = true
252
+ combine-as-imports = true
253
+
254
+ [tool.ruff.lint.per-file-ignores]
255
+ "__init__.py" = ["E402", "I001"]
256
+ "scripts/*" = ["INP001"]
257
+
258
+ [tool.ruff.format]
259
+ # Enable preview style formatting.
260
+ preview = true
261
+
262
+ [tool.ty.environment]
263
+ python-version = "3.12"
264
+
265
+ [tool.uv]
266
+ default-groups = ["dev", "lint", "docs"]
@@ -1,5 +1,20 @@
1
- __version__ = "0.2.4"
1
+ """Schemez: main package.
2
2
 
3
+ Pydantic shim for config stuff.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from importlib.metadata import version
9
+
10
+ __version__ = version("schemez")
11
+ __title__ = "Schemez"
12
+
13
+ __author__ = "Philipp Temminghoff"
14
+ __author_email__ = "philipptemminghoff@googlemail.com"
15
+ __copyright__ = "Copyright (c) 2025 Philipp Temminghoff"
16
+ __license__ = "MIT"
17
+ __url__ = "https://github.com/phil65/schemez"
3
18
 
4
19
  from schemez.schema import Schema
5
20
  from schemez.code import PythonCode, JSONCode, TOMLCode, YAMLCode
@@ -11,6 +26,8 @@ from schemez.schemadef.schemadef import (
11
26
  )
12
27
  from schemez.pydantic_types import ModelIdentifier, ModelTemperature, MimeType
13
28
 
29
+ __version__ = version("schemez")
30
+
14
31
  __all__ = [
15
32
  "ImportedSchemaDef",
16
33
  "InlineSchemaDef",
@@ -2,9 +2,13 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Annotated, Any
5
+ from typing import TYPE_CHECKING, Annotated, Any
6
6
 
7
- from pydantic import BaseModel, Field
7
+ from pydantic import Field
8
+
9
+
10
+ if TYPE_CHECKING:
11
+ from pydantic import BaseModel
8
12
 
9
13
 
10
14
  ModelIdentifier = Annotated[