Skip to content

Inconsistent XmlEntityInfo Handling with Multiple Annotated Metadata #274

Description

@lclbm
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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions