Source code for xsdata.codegen.handlers.attribute_enum_union

from dataclasses import dataclass
from typing import Any
from typing import List

from xsdata.codegen.mixins import ContainerInterface
from xsdata.codegen.mixins import HandlerInterface
from xsdata.codegen.models import Class
from xsdata.models.enums import Tag


[docs]@dataclass class AttributeEnumUnionHandler(HandlerInterface): """Convert simple types with a single field which is a union of enums to a standalone enumeration.""" container: ContainerInterface
[docs] def process(self, target: Class): if len(target.attrs) == 1 and target.attrs[0].tag == Tag.UNION: enums: List[Any] = [] attr = target.attrs[0] for attr_type in attr.types: if attr_type.forward: enums.extend(target.inner) elif not attr_type.native: qname = target.source_qname(attr_type.name) enums.append(self.container.find(qname)) else: enums.append(None) merge = all(isinstance(x, Class) and x.is_enumeration for x in enums) if merge: target.attrs.clear() target.inner.clear() for enum in enums: target.attrs.extend(x.clone() for x in enum.attrs)