pydantic-xml icon indicating copy to clipboard operation
pydantic-xml copied to clipboard

Internal error when using pydantic.PlainValidator

Open eltoder opened this issue 11 months ago • 0 comments

pydantic_xml seems to have an issue with PlainValidator:

import datetime as dt
import pydantic
import pydantic_xml as pxml
from typing import Annotated

Date = Annotated[
    dt.date,
    pydantic.PlainValidator(
        lambda v: dt.datetime.strptime(v, "%Y%m%d").date() if isinstance(v, str) else v
    ),
]

class Model(pxml.BaseXmlModel):
    date: Date = pxml.element()

This generates an error at import time when building the model

Traceback (most recent call last):
  File "/home/eltoder/dev/scratch/xml_plain_validator.py", line 13, in <module>
    class Model(pxml.BaseXmlModel):
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/model.py", line 375, in __new__
    cls.__build_serializer__()
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/model.py", line 461, in __build_serializer__
    serializer = Serializer.parse_core_schema(
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/serializers/serializer.py", line 184, in parse_core_schema
    return cls.select_serializer(schema, ctx)
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/serializers/serializer.py", line 241, in select_serializer
    return factories.model.from_core_schema(schema, ctx)
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/serializers/factories/model.py", line 453, in from_core_schema
    return ModelSerializer.from_core_schema(schema, ctx)
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/serializers/factories/model.py", line 91, in from_core_schema
    fields_serializers[field_name] = Serializer.parse_core_schema(model_field['schema'], field_ctx)
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/serializers/serializer.py", line 183, in parse_core_schema
    schema, ctx = cls.preprocess_schema(schema, ctx)
  File "/home/eltoder/dev/scratch/.venv/lib/python3.10/site-packages/pydantic_xml/serializers/serializer.py", line 198, in preprocess_schema
    inner_schema = schema['schema']
KeyError: 'schema'

eltoder avatar Nov 22 '24 18:11 eltoder