Skip to content

Commit b868fa8

Browse files
Remove pydantic v1 runtime compat layer (#3025)
* Extract shared pydantic base module for v2/dataclass/msgspec * fix: eliminate code duplication in pydantic v1 modules for coverage * Remove pydantic v1 runtime compat layer * docs: update CLI reference documentation and prompt data 🤖 Generated by GitHub Actions * Remove unnecessary pragma: no cover from process_const * Fix coverage: remove dead v1 guards and unused test * Remove pragma: no cover added by mistake during backup checkout * Trigger CI * Restore pragma: no cover for genuinely unreachable code paths * Add pragma: no cover to unused compat functions pending removal in PR3 * Fix coverage: add pragma to return statements of unused compat functions --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 06edfad commit b868fa8

24 files changed

Lines changed: 346 additions & 841 deletions

.github/workflows/test.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ jobs:
3939
name: py312-isort6
4040
- tox_env: py312-isort5-parallel
4141
name: py312-isort5
42-
- tox_env: py312-pydantic1-parallel
43-
name: py312-pydantic1
4442
runs-on: ${{ matrix.os == '' && 'ubuntu-24.04' || matrix.os }}
4543
env:
4644
OS: ${{ matrix.os == '' && 'ubuntu-24.04' || matrix.os}}

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,6 @@ skip = '.git,*.lock,tests,docs/cli-reference,CHANGELOG.md,docs/changelog.md,docs
216216
[tool.pytest.ini_options]
217217
filterwarnings = [
218218
"error",
219-
"ignore:^.*Pydantic v1 runtime support is deprecated.*:DeprecationWarning",
220219
"ignore:^.*No --output-model-type specified.*:DeprecationWarning",
221220
"ignore:^.*Pydantic v2 with --use-annotated is recommended.*:DeprecationWarning",
222221
"ignore:^.*`--validation` option is deprecated.*",

src/datamodel_code_generator/__init__.py

Lines changed: 11 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,9 @@
8080
T = TypeVar("T")
8181
_ConfigT = TypeVar("_ConfigT", bound="ParserConfig")
8282

83-
# Import is_pydantic_v2 here for module-level YamlValue type definition
84-
from datamodel_code_generator.util import is_pydantic_v2 # noqa: E402
85-
8683
if not TYPE_CHECKING: # pragma: no branch
8784
YamlScalar: TypeAlias = str | int | float | bool | None
88-
if is_pydantic_v2():
89-
YamlValue = TypeAliasType("YamlValue", "dict[str, YamlValue] | list[YamlValue] | YamlScalar")
90-
else:
91-
# Pydantic v1 cannot handle TypeAliasType, use Any for recursive parts
92-
YamlValue: TypeAlias = dict[str, Any] | list[Any] | YamlScalar
85+
YamlValue = TypeAliasType("YamlValue", "dict[str, YamlValue] | list[YamlValue] | YamlScalar")
9386

9487

9588
GeneratedModules: TypeAlias = dict[tuple[str, ...], str]
@@ -471,19 +464,13 @@ def _create_parser_config(
471464
Filters GenerateConfig fields to only those expected by the parser config class,
472465
then merges with additional_options.
473466
"""
474-
if is_pydantic_v2():
475-
parser_config_fields = set(config_class.model_fields.keys())
476-
all_options = {
477-
k: v
478-
for k, v in generate_config.model_dump().items()
479-
if k in parser_config_fields and k not in additional_options
480-
} | dict(additional_options)
481-
return config_class.model_validate(all_options)
482-
parser_config_fields = set(config_class.__fields__.keys())
467+
parser_config_fields = set(config_class.model_fields.keys())
483468
all_options = {
484-
k: v for k, v in generate_config.dict().items() if k in parser_config_fields and k not in additional_options
469+
k: v
470+
for k, v in generate_config.model_dump().items()
471+
if k in parser_config_fields and k not in additional_options
485472
} | dict(additional_options)
486-
return config_class.parse_obj(all_options)
473+
return config_class.model_validate(all_options)
487474

488475

489476
def generate( # noqa: PLR0912, PLR0914, PLR0915
@@ -518,18 +505,11 @@ def generate( # noqa: PLR0912, PLR0914, PLR0915
518505
raise ValueError(msg)
519506

520507
if config is None:
521-
if is_pydantic_v2():
522-
from datamodel_code_generator.model.pydantic_v2 import UnionMode # noqa: PLC0415
523-
from datamodel_code_generator.types import StrictTypes # noqa: PLC0415
508+
from datamodel_code_generator.model.pydantic_v2 import UnionMode # noqa: PLC0415
509+
from datamodel_code_generator.types import StrictTypes # noqa: PLC0415
524510

525-
GenerateConfig.model_rebuild(_types_namespace={"StrictTypes": StrictTypes, "UnionMode": UnionMode})
526-
config = GenerateConfig.model_validate(options)
527-
else:
528-
from datamodel_code_generator.enums import UnionMode # noqa: PLC0415
529-
from datamodel_code_generator.types import StrictTypes # noqa: PLC0415
530-
531-
GenerateConfig.update_forward_refs(StrictTypes=StrictTypes, UnionMode=UnionMode)
532-
config = GenerateConfig(**options)
511+
GenerateConfig.model_rebuild(_types_namespace={"StrictTypes": StrictTypes, "UnionMode": UnionMode})
512+
config = GenerateConfig.model_validate(options)
533513

534514
# Variables that may be modified during processing
535515
input_filename = config.input_filename
@@ -979,13 +959,6 @@ def __getattr__(name: str) -> Any:
979959
if name in _LAZY_IMPORTS:
980960
import importlib # noqa: PLC0415
981961

982-
if name == "GenerateConfig" and not is_pydantic_v2(): # pragma: no cover
983-
msg = (
984-
f"'{name}' is only available in Pydantic v2 environments. "
985-
"Use 'from datamodel_code_generator.config import GenerateConfig' instead."
986-
)
987-
raise ImportError(msg)
988-
989962
module = importlib.import_module(_LAZY_IMPORTS[name])
990963
return getattr(module, name)
991964
msg = f"module {__name__!r} has no attribute {name!r}"
@@ -1034,5 +1007,4 @@ def __getattr__(name: str) -> Any:
10341007
"generate_dynamic_models", # noqa: F822
10351008
]
10361009

1037-
if is_pydantic_v2(): # pragma: no cover
1038-
__all__ += ["GenerateConfig"]
1010+
__all__ += ["GenerateConfig"]

0 commit comments

Comments
 (0)