-
Notifications
You must be signed in to change notification settings - Fork 25
Description
from typing import Annotated
from pydantic import Field
from pydantic_xml import BaseXmlModel, attr
from pydantic.fields import FieldInfo
from pydantic_xml.fields import XmlEntityInfo
class Node(BaseXmlModel):
name1: Annotated[str, attr(serialization_alias="A"), Field(default="1")]
name2: Annotated[str, attr(serialization_alias="A"), attr(default="5")]
name3: Annotated[str, attr(serialization_alias="A")] = attr(default="3")
name4: Annotated[str, attr(serialization_alias="A")]
assert all(isinstance(Node.model_fields[f"name{i}"], FieldInfo) for i in range(1, 4))
assert isinstance(Node.model_fields["name4"], XmlEntityInfo)
...
pydantic==2.11.5
pydantic-xml==2.17.1
Hi @dapper91 , I've encountered an issue with Annotated metadata handling in pydantic-xml. Regardless of whether multiple metadata entries are FieldInfo, XmlEntityInfo, or a mix of both, the presence of more than one metadata annotation consistently causes XmlEntityInfo to be incorrectly overridden by FieldInfo in attribute field definitions.
When a field uses Annotated with a single attr metadata, Pydantic's merge_field_infos
correctly returns a copy of XmlEntityInfo.
However, when a field contains two or more metadata entries, merge_field_infos
erroneously returns Pydantic's standard FieldInfo type instead.
This causes XML attribute fields to be incorrectly typed when multiple metadata annotations are present.
https://github.com/pydantic/pydantic/blob/v2.11.5/pydantic/fields.py#L471