Skip to content

Commit 163969d

Browse files
committed
Address easy review comments.
1 parent 3aabf92 commit 163969d

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

pydantic_xml/serializers.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from decimal import Decimal
77
from enum import Enum, IntEnum
88
from inspect import isclass
9-
from typing import Any, Dict, List, Mapping, Optional, Sized, Type
9+
from typing import Any, Dict, List, Mapping, Optional, Sized, Type, Collection
1010

1111
import pydantic as pd
1212

@@ -563,13 +563,13 @@ def __init__(
563563
self, model: Type['pxml.BaseXmlModel'], model_field: pd.fields.ModelField, ctx: Serializer.Context,
564564
):
565565
assert len(model_field.sub_fields) == 1
566-
if issubclass(model_field.type_, pxml.BaseXmlModel):
566+
if isclass(model_field.type_) and issubclass(model_field.type_, pxml.BaseXmlModel):
567567
raise errors.ModelFieldError(
568568
model.__name__, model_field.name, "Inline list value should be of scalar type",
569569
)
570570

571571
def serialize(
572-
self, element: etree.Element, value: Any, *, encoder: XmlEncoder, skip_empty: bool = False,
572+
self, element: etree.Element, value: Collection[Any], *, encoder: XmlEncoder, skip_empty: bool = False,
573573
) -> Optional[etree.Element]:
574574
if value is None or skip_empty and len(value) == 0:
575575
return element
@@ -579,6 +579,9 @@ def serialize(
579579
return element
580580

581581
def deserialize(self, element: etree.Element) -> Optional[List[Any]]:
582+
if element.text is None:
583+
return []
584+
582585
return [value for value in element.text.split()]
583586

584587
class AttributeSerializer(Serializer):
@@ -600,7 +603,7 @@ def __init__(
600603

601604

602605
def serialize(
603-
self, element: etree.Element, value: Any, *, encoder: XmlEncoder, skip_empty: bool = False,
606+
self, element: etree.Element, value: Collection[Any], *, encoder: XmlEncoder, skip_empty: bool = False,
604607
) -> Optional[etree.Element]:
605608
if value is None or skip_empty and len(value) == 0:
606609
return element
@@ -610,7 +613,7 @@ def serialize(
610613
return element
611614

612615
def deserialize(self, element: etree.Element) -> Optional[List[Any]]:
613-
return [value for value in element.get(self.attr_name).split()]
616+
return [value for value in element.get(self.attr_name, default="").split()]
614617

615618
class ElementSerializer(Serializer):
616619
def __init__(
@@ -690,9 +693,6 @@ def build(
690693
return cls.TextSerializer(model, model_field, ctx)
691694
elif field_location is Location.ATTRIBUTE:
692695
return cls.AttributeSerializer(model, model_field, ctx)
693-
# raise errors.ModelFieldError(
694-
# model.__name__, model_field.name, "attributes of collection type are not supported",
695-
# )
696696
else:
697697
raise AssertionError("unreachable")
698698

0 commit comments

Comments
 (0)