From cce46e6be5b2a3223ea6df7c897bc6d1ce2e354d Mon Sep 17 00:00:00 2001 From: Joran van Apeldoorn Date: Mon, 16 Jun 2025 16:33:22 +0200 Subject: [PATCH] Allow attributes to be collections --- pydantic_xml/serializers/factories/heterogeneous.py | 3 ++- pydantic_xml/serializers/factories/homogeneous.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pydantic_xml/serializers/factories/heterogeneous.py b/pydantic_xml/serializers/factories/heterogeneous.py index 6c7241e..56b43f7 100644 --- a/pydantic_xml/serializers/factories/heterogeneous.py +++ b/pydantic_xml/serializers/factories/heterogeneous.py @@ -5,6 +5,7 @@ from pydantic_xml import errors, utils from pydantic_xml.element import XmlElementReader, XmlElementWriter +from pydantic_xml.serializers.factories import primitive from pydantic_xml.serializers.serializer import TYPE_FAMILY, SchemaTypeFamily, Serializer from pydantic_xml.typedefs import EntityLocation, Location @@ -109,6 +110,6 @@ def from_core_schema(schema: pcs.TupleSchema, ctx: Serializer.Context) -> Serial elif ctx.entity_location is None: return ElementSerializer.from_core_schema(schema, ctx) elif ctx.entity_location is EntityLocation.ATTRIBUTE: - raise errors.ModelFieldError(ctx.model_name, ctx.field_name, "attributes of collection types are not supported") + return primitive.from_core_schema(pcs.StringSchema(type="str"), ctx) else: raise AssertionError("unreachable") diff --git a/pydantic_xml/serializers/factories/homogeneous.py b/pydantic_xml/serializers/factories/homogeneous.py index 9855ef3..d2dbc7e 100644 --- a/pydantic_xml/serializers/factories/homogeneous.py +++ b/pydantic_xml/serializers/factories/homogeneous.py @@ -6,6 +6,7 @@ from pydantic_xml import errors, utils from pydantic_xml.element import XmlElementReader, XmlElementWriter +from pydantic_xml.serializers.factories import primitive from pydantic_xml.serializers.serializer import TYPE_FAMILY, SchemaTypeFamily, Serializer from pydantic_xml.typedefs import EntityLocation, Location @@ -27,7 +28,6 @@ def from_core_schema(cls, schema: HomogeneousCollectionTypeSchema, ctx: Serializ if isinstance(items_schema, list): assert len(items_schema) == 1, "unexpected items schema type" items_schema = items_schema[0] - inner_serializer = Serializer.parse_core_schema(items_schema, ctx) return cls(model_name, computed, inner_serializer) @@ -134,6 +134,6 @@ def from_core_schema(schema: HomogeneousCollectionTypeSchema, ctx: Serializer.Co elif ctx.entity_location is None: return ElementSerializer.from_core_schema(schema, ctx) elif ctx.entity_location is EntityLocation.ATTRIBUTE: - raise errors.ModelFieldError(ctx.model_name, ctx.field_name, "attributes of collection types are not supported") + return primitive.from_core_schema(pcs.StringSchema(type="str"), ctx) else: raise AssertionError("unreachable")