From 3953c40bb84998e8efedbf4e89f1f4d764013e5d Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Thu, 5 Mar 2026 13:41:11 +0000 Subject: [PATCH 1/2] Remove pydantic v1 runtime compat shims and update dependencies --- pyproject.toml | 3 +- .../pydantic_patch.py | 29 ---- src/datamodel_code_generator/util.py | 147 +----------------- uv.lock | 4 +- 4 files changed, 9 insertions(+), 174 deletions(-) delete mode 100644 src/datamodel_code_generator/pydantic_patch.py diff --git a/pyproject.toml b/pyproject.toml index 2fab21427..243564493 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,8 +35,7 @@ dependencies = [ "inflect>=4.1,<8", "isort>=4.3.21,<9", "jinja2>=2.10.1,<4", - "packaging", - "pydantic>=1.5", + "pydantic>=2", "pyyaml>=6.0.1", "tomli>=2.2.1,<3; python_version<='3.11'", ] diff --git a/src/datamodel_code_generator/pydantic_patch.py b/src/datamodel_code_generator/pydantic_patch.py deleted file mode 100644 index ae091b1b6..000000000 --- a/src/datamodel_code_generator/pydantic_patch.py +++ /dev/null @@ -1,29 +0,0 @@ -"""Pydantic compatibility patches for Python 3.12+. - -Patches pydantic.typing.evaluate_forwardref for forward reference evaluation -compatibility with newer Python versions. -""" - -from __future__ import annotations - -import sys -from typing import Any - - -def patched_evaluate_forwardref( - forward_ref: Any, globalns: dict[str, Any], localns: dict[str, Any] | None = None -) -> None: # pragma: no cover - """Evaluate a forward reference with Python 3.12+ compatibility.""" - try: - return forward_ref._evaluate(globalns, localns or None, set()) # pragma: no cover # noqa: SLF001 - except TypeError: - # Fallback for Python 3.12 compatibility - return forward_ref._evaluate(globalns, localns or None, set(), recursive_guard=set()) # noqa: SLF001 - - -def apply_patch() -> None: - """Apply the pydantic patch for Python 3.12+ if needed.""" - if sys.version_info >= (3, 12): - import pydantic.typing # noqa: PLC0415 - - pydantic.typing.evaluate_forwardref = patched_evaluate_forwardref # ty: ignore diff --git a/src/datamodel_code_generator/util.py b/src/datamodel_code_generator/util.py index 29c540689..399a1a4ae 100644 --- a/src/datamodel_code_generator/util.py +++ b/src/datamodel_code_generator/util.py @@ -1,22 +1,16 @@ -"""Utility functions and Pydantic version compatibility helpers. - -Provides Pydantic version detection (PYDANTIC_V2), YAML/TOML loading, -and version-compatible decorators (model_validator, field_validator). -""" +"""Utility functions for YAML/TOML loading and lazy BaseModel access.""" from __future__ import annotations import re import warnings from functools import lru_cache -from typing import TYPE_CHECKING, Any, Literal, TypeVar, overload +from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from collections.abc import Callable from pathlib import Path - from pydantic import BaseModel as _BaseModel - try: from tomllib import load as load_tomllib # type: ignore[ignoreMissingImports] except ImportError: # pragma: no cover @@ -29,28 +23,6 @@ def load_toml(path: Path) -> dict[str, Any]: return load_tomllib(f) -@lru_cache(maxsize=1) -def get_pydantic_version() -> tuple[Any, bool, bool]: - """Get pydantic version info lazily. Returns (version, is_v2, is_v2_11).""" - # Apply pydantic patch before importing pydantic - from datamodel_code_generator.pydantic_patch import apply_patch # noqa: PLC0415 - - apply_patch() - - import pydantic # noqa: PLC0415 - from packaging import version # noqa: PLC0415 - - pydantic_version = version.parse(pydantic.VERSION if isinstance(pydantic.VERSION, str) else str(pydantic.VERSION)) - is_v2 = version.parse("2.0b3") <= pydantic_version - is_v2_11 = version.parse("2.11") <= pydantic_version - return pydantic_version, is_v2, is_v2_11 - - -def is_pydantic_v2() -> bool: - """Check if pydantic v2 is installed.""" - return get_pydantic_version()[1] - - _YAML_1_2_BOOL_PATTERN = re.compile(r"^(?:true|false|True|False|TRUE|FALSE)$") _YAML_DEPRECATED_BOOL_VALUES = {"True", "False", "TRUE", "FALSE"} # Pattern for scientific notation without decimal point (e.g., 1e-5, 1E+10) @@ -111,121 +83,16 @@ class CustomSafeLoader(_SafeLoader): # type: ignore[valid-type,misc] return CustomSafeLoader -Model = TypeVar("Model", bound="_BaseModel") # ty: ignore -T = TypeVar("T") - - -@overload -def model_validator( - mode: Literal["before"], -) -> ( - Callable[[Callable[[type[Model], T], T]], Callable[[type[Model], T], T]] - | Callable[[Callable[[Model, T], T]], Callable[[Model, T], T]] -): ... - - -@overload -def model_validator( - mode: Literal["after"], -) -> ( - Callable[[Callable[[type[Model], T], T]], Callable[[type[Model], T], T]] - | Callable[[Callable[[Model, T], T]], Callable[[Model, T], T]] - | Callable[[Callable[[Model], Model]], Callable[[Model], Model]] -): ... - - -@overload -def model_validator() -> ( - Callable[[Callable[[type[Model], T], T]], Callable[[type[Model], T], T]] - | Callable[[Callable[[Model, T], T]], Callable[[Model, T], T]] - | Callable[[Callable[[Model], Model]], Callable[[Model], Model]] -): ... - - -def model_validator( # ty: ignore - mode: Literal["before", "after"] = "after", -) -> ( - Callable[[Callable[[type[Model], T], T]], Callable[[type[Model], T], T]] - | Callable[[Callable[[Model, T], T]], Callable[[Model, T], T]] - | Callable[[Callable[[Model], Model]], Callable[[Model], Model]] -): - """Decorate model validators for both Pydantic v1 and v2.""" - - @overload - def inner(method: Callable[[type[Model], T], T]) -> Callable[[type[Model], T], T]: ... - - @overload - def inner(method: Callable[[Model, T], T]) -> Callable[[Model, T], T]: ... - - @overload - def inner(method: Callable[[Model], Model]) -> Callable[[Model], Model]: ... - - def inner( # pragma: no cover - method: Callable[[type[Model], T], T] | Callable[[Model, T], T] | Callable[[Model], Model], - ) -> Callable[[type[Model], T], T] | Callable[[Model, T], T] | Callable[[Model], Model]: - if is_pydantic_v2(): - from pydantic import model_validator as model_validator_v2 # noqa: PLC0415 - - if mode == "before": - return model_validator_v2(mode=mode)(classmethod(method)) # type: ignore[reportReturnType] - return model_validator_v2(mode=mode)(method) # type: ignore[reportReturnType] - from pydantic import root_validator # noqa: PLC0415 # pragma: no cover - - return root_validator(method, pre=mode == "before") # ty: ignore # pragma: no cover - - return inner # pragma: no cover - - -def field_validator( - field_name: str, - *fields: str, - mode: Literal["before", "after"] = "after", -) -> Callable[[Any], Callable[[Any, Any], Any]]: - """Decorate field validators for both Pydantic v1 and v2.""" - - def inner(method: Callable[[Model, Any], Any]) -> Callable[[Model, Any], Any]: # pragma: no cover - if is_pydantic_v2(): - from pydantic import field_validator as field_validator_v2 # noqa: PLC0415 - - return field_validator_v2(field_name, *fields, mode=mode)(method) # ty: ignore - from pydantic import validator # noqa: PLC0415 # pragma: no cover - - return validator(field_name, *fields, pre=mode == "before")(method) # ty: ignore # pragma: no cover - - return inner # pragma: no cover - - -@lru_cache(maxsize=1) -def _get_config_dict() -> type: # pragma: no cover - """Get ConfigDict type lazily. Only used with pydantic v2.""" - from pydantic import ConfigDict # noqa: PLC0415 - - return ConfigDict - - -class _ConfigDictProxy: - """Proxy for lazy ConfigDict access.""" - - def __call__(self, **kwargs: Any) -> Any: # pragma: no cover - return _get_config_dict()(**kwargs) - - -ConfigDict: type = _ConfigDictProxy() # type: ignore[assignment] - - @lru_cache(maxsize=1) def _get_base_model_class() -> type: - """Get version-compatible BaseModel class lazily.""" + """Get BaseModel class with strict=False config lazily.""" from pydantic import BaseModel as _PydanticBaseModel # noqa: PLC0415 + from pydantic import ConfigDict as _ConfigDict # noqa: PLC0415 - if is_pydantic_v2(): - from pydantic import ConfigDict as _ConfigDict # noqa: PLC0415 - - class _BaseModelV2(_PydanticBaseModel): - model_config = _ConfigDict(strict=False) + class _BaseModelV2(_PydanticBaseModel): + model_config = _ConfigDict(strict=False) - return _BaseModelV2 - return _PydanticBaseModel # pragma: no cover + return _BaseModelV2 _BaseModel: type | None = None diff --git a/uv.lock b/uv.lock index 80050125d..195ad9f4f 100644 --- a/uv.lock +++ b/uv.lock @@ -769,7 +769,6 @@ dependencies = [ { name = "isort", version = "7.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-24-datamodel-code-generator-isort7' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-dev' and extra != 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra != 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8')" }, { name = "isort", version = "8.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra != 'group-24-datamodel-code-generator-black24' and extra != 'group-24-datamodel-code-generator-isort5' and extra != 'group-24-datamodel-code-generator-isort6' and extra != 'group-24-datamodel-code-generator-isort7') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra != 'group-24-datamodel-code-generator-isort5' and extra != 'group-24-datamodel-code-generator-isort6' and extra != 'group-24-datamodel-code-generator-isort7')" }, { name = "jinja2" }, - { name = "packaging" }, { name = "pydantic" }, { name = "pyyaml" }, { name = "tomli", marker = "python_full_version < '3.12' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8')" }, @@ -916,10 +915,9 @@ requires-dist = [ { name = "jinja2", specifier = ">=2.10.1,<4" }, { name = "openapi-spec-validator", marker = "extra == 'all'", specifier = ">=0.2.8,<0.8" }, { name = "openapi-spec-validator", marker = "extra == 'validation'", specifier = ">=0.2.8,<0.8" }, - { name = "packaging" }, { name = "prance", marker = "extra == 'all'", specifier = ">=0.18.2" }, { name = "prance", marker = "extra == 'validation'", specifier = ">=0.18.2" }, - { name = "pydantic", specifier = ">=1.5" }, + { name = "pydantic", specifier = ">=2" }, { name = "pysnooper", marker = "extra == 'all'", specifier = ">=0.4.1,<2" }, { name = "pysnooper", marker = "extra == 'debug'", specifier = ">=0.4.1,<2" }, { name = "pyyaml", specifier = ">=6.0.1" }, From 983b94c573d5b15f636dc28603dd884488a2cef0 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Sun, 8 Mar 2026 08:20:23 +0000 Subject: [PATCH 2/2] build: constrain pydantic for Python 3.14 --- pyproject.toml | 3 ++- uv.lock | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 243564493..eb8a50cb3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,8 @@ dependencies = [ "inflect>=4.1,<8", "isort>=4.3.21,<9", "jinja2>=2.10.1,<4", - "pydantic>=2", + "pydantic>=2,<3; python_version<'3.14'", + "pydantic>=2.12,<3; python_version>='3.14'", "pyyaml>=6.0.1", "tomli>=2.2.1,<3; python_version<='3.11'", ] diff --git a/uv.lock b/uv.lock index 195ad9f4f..3ec4bbc98 100644 --- a/uv.lock +++ b/uv.lock @@ -1,6 +1,10 @@ version = 1 revision = 3 requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] conflicts = [[ { package = "datamodel-code-generator", group = "black22" }, { package = "datamodel-code-generator", group = "black23" }, @@ -228,6 +232,10 @@ wheels = [ name = "black" version = "22.1.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] dependencies = [ { name = "click", marker = "extra == 'group-24-datamodel-code-generator-black22' or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8')" }, { name = "mypy-extensions", marker = "extra == 'group-24-datamodel-code-generator-black22' or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8')" }, @@ -249,6 +257,10 @@ wheels = [ name = "black" version = "23.12.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] dependencies = [ { name = "aiohttp", marker = "(implementation_name != 'pypy' and extra == 'group-24-datamodel-code-generator-black23') or (sys_platform != 'win32' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8')" }, { name = "click", marker = "extra == 'group-24-datamodel-code-generator-black23' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8')" }, @@ -280,6 +292,10 @@ wheels = [ name = "black" version = "24.1.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] dependencies = [ { name = "click", marker = "extra == 'group-24-datamodel-code-generator-black24' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev')" }, { name = "mypy-extensions", marker = "extra == 'group-24-datamodel-code-generator-black24' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev')" }, @@ -310,6 +326,10 @@ wheels = [ name = "black" version = "26.1a1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] dependencies = [ { name = "click", marker = "extra == 'group-24-datamodel-code-generator-dev' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra != 'group-24-datamodel-code-generator-black24')" }, { name = "mypy-extensions", marker = "extra == 'group-24-datamodel-code-generator-dev' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8') or (extra != 'group-24-datamodel-code-generator-black22' and extra != 'group-24-datamodel-code-generator-black23' and extra != 'group-24-datamodel-code-generator-black24')" }, @@ -917,7 +937,8 @@ requires-dist = [ { name = "openapi-spec-validator", marker = "extra == 'validation'", specifier = ">=0.2.8,<0.8" }, { name = "prance", marker = "extra == 'all'", specifier = ">=0.18.2" }, { name = "prance", marker = "extra == 'validation'", specifier = ">=0.18.2" }, - { name = "pydantic", specifier = ">=2" }, + { name = "pydantic", marker = "python_full_version < '3.14'", specifier = ">=2,<3" }, + { name = "pydantic", marker = "python_full_version >= '3.14'", specifier = ">=2.12,<3" }, { name = "pysnooper", marker = "extra == 'all'", specifier = ">=0.4.1,<2" }, { name = "pysnooper", marker = "extra == 'debug'", specifier = ">=0.4.1,<2" }, { name = "pyyaml", specifier = ">=6.0.1" }, @@ -1279,7 +1300,7 @@ name = "importlib-metadata" version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp" }, + { name = "zipp", marker = "python_full_version < '3.14' or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black23') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black22' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-black24') or (extra == 'group-24-datamodel-code-generator-black23' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-black24' and extra == 'group-24-datamodel-code-generator-dev') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort5') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-dev' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort6') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort5' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort7') or (extra == 'group-24-datamodel-code-generator-isort6' and extra == 'group-24-datamodel-code-generator-isort8') or (extra == 'group-24-datamodel-code-generator-isort7' and extra == 'group-24-datamodel-code-generator-isort8')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ @@ -1328,6 +1349,10 @@ wheels = [ name = "isort" version = "5.13.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] sdist = { url = "https://files.pythonhosted.org/packages/87/f9/c1eb8635a24e87ade2efce21e3ce8cd6b8630bb685ddc9cdaca1349b2eb5/isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", size = 175303, upload-time = "2023-12-13T20:37:26.124Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6", size = 92310, upload-time = "2023-12-13T20:37:23.244Z" }, @@ -1337,6 +1362,10 @@ wheels = [ name = "isort" version = "6.1.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] sdist = { url = "https://files.pythonhosted.org/packages/1e/82/fa43935523efdfcce6abbae9da7f372b627b27142c3419fcf13bf5b0c397/isort-6.1.0.tar.gz", hash = "sha256:9b8f96a14cfee0677e78e941ff62f03769a06d412aabb9e2a90487b3b7e8d481", size = 824325, upload-time = "2025-10-01T16:26:45.027Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/7f/cc/9b681a170efab4868a032631dea1e8446d8ec718a7f657b94d49d1a12643/isort-6.1.0-py3-none-any.whl", hash = "sha256:58d8927ecce74e5087aef019f778d4081a3b6c98f15a80ba35782ca8a2097784", size = 94329, upload-time = "2025-10-01T16:26:43.291Z" }, @@ -1346,6 +1375,10 @@ wheels = [ name = "isort" version = "7.0.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] sdist = { url = "https://files.pythonhosted.org/packages/63/53/4f3c058e3bace40282876f9b553343376ee687f3c35a525dc79dbd450f88/isort-7.0.0.tar.gz", hash = "sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187", size = 805049, upload-time = "2025-10-11T13:30:59.107Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/7f/ed/e3705d6d02b4f7aea715a353c8ce193efd0b5db13e204df895d38734c244/isort-7.0.0-py3-none-any.whl", hash = "sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1", size = 94672, upload-time = "2025-10-11T13:30:57.665Z" }, @@ -1355,6 +1388,10 @@ wheels = [ name = "isort" version = "8.0.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version < '3.14'", +] sdist = { url = "https://files.pythonhosted.org/packages/ef/7c/ec4ab396d31b3b395e2e999c8f46dec78c5e29209fac49d1f4dace04041d/isort-8.0.1.tar.gz", hash = "sha256:171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d", size = 769592, upload-time = "2026-02-28T10:08:20.685Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl", hash = "sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75", size = 89733, upload-time = "2026-02-28T10:08:19.466Z" },