fix: pydantic extra keywords deprecated (#753)

Pydantic deprecates using extra keyword arguments on Field.
Used json_schema_extra instead.

Deprecated in Pydantic V2.0 to be removed in V3.0.

Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
Bobby Noelte
2025-11-10 16:57:44 +01:00
committed by GitHub
parent 54b0622a96
commit e7b43782a4
44 changed files with 1956 additions and 1194 deletions

View File

@@ -17,10 +17,40 @@ from akkudoktoreos.utils.datetimeutil import DateTime, compare_datetimes, to_dat
class PydanticTestModel(PydanticBaseModel):
"""Minimal test model for exercising PydanticBaseModel helpers."""
datetime_field: DateTime = Field(
..., description="A datetime field with pendulum support."
...,
description="A datetime field with pendulum support.",
json_schema_extra={"description": "A datetime field with pendulum support."},
)
optional_field: Optional[str] = Field(
default=None,
# optional field with no description
)
# ---------------------------------------------------------------------
# Additional fields to support metadata-based testing
# ---------------------------------------------------------------------
described_field: str = Field(
default="x",
description="A described string",
json_schema_extra={"description": "A described string"},
)
deprecated_field: str = Field(
default="y",
description="A deprecated string field",
json_schema_extra={"deprecated": "Use new_field instead"},
)
example_field: str = Field(
default="z",
description="An example-backed string field",
json_schema_extra={"examples": ["a", "b", "c"]},
)
optional_field: Optional[str] = Field(default=None, description="An optional field.")
class Address(PydanticBaseModel):
@@ -377,6 +407,36 @@ class TestPydanticBaseModel:
restored_model = PydanticTestModel.from_json(json_data)
assert restored_model.datetime_field == dt
def test_field_extra_dict(self):
field = PydanticTestModel.model_fields["described_field"]
extra = PydanticTestModel._field_extra_dict(field)
assert isinstance(extra, dict)
assert extra.get("description") == "A described string"
def test_field_description(self):
result = PydanticTestModel.field_description("described_field")
assert result == "A described string"
def test_field_description_missing(self):
result = PydanticTestModel.field_description("optional_field")
assert result is None
def test_field_deprecated(self):
result = PydanticTestModel.field_deprecated("deprecated_field")
assert result == "Use new_field instead"
def test_field_deprecated_missing(self):
result = PydanticTestModel.field_deprecated("described_field")
assert result is None
def test_field_examples(self):
result = PydanticTestModel.field_examples("example_field")
assert result == ["a", "b", "c"]
def test_field_examples_missing(self):
result = PydanticTestModel.field_examples("optional_field")
assert result is None
class TestPydanticDateTimeData:
def test_valid_list_lengths(self):