Source code for xsdata.formats.dataclass.parsers.nodes.primitive

from typing import Dict
from typing import List
from typing import Optional
from typing import Type

from xsdata.exceptions import XmlContextError
from xsdata.formats.dataclass.models.elements import XmlVar
from xsdata.formats.dataclass.parsers.mixins import XmlNode
from xsdata.formats.dataclass.parsers.utils import ParserUtils


[docs]class PrimitiveNode(XmlNode): """ XmlNode for text elements with primitive values like str, int, float. :param var: Class field xml var instance :param ns_map: Namespace prefix-URI map :param derived_factory: Derived element factory """ __slots__ = "var", "ns_map", "derived_factory" def __init__(self, var: XmlVar, ns_map: Dict, derived_factory: Type): self.var = var self.ns_map = ns_map self.derived_factory = derived_factory
[docs] def bind( self, qname: str, text: Optional[str], tail: Optional[str], objects: List ) -> bool: obj = ParserUtils.parse_value( value=text, types=self.var.types, default=self.var.default, ns_map=self.ns_map, tokens_factory=self.var.tokens_factory, format=self.var.format, ) if obj is None and not self.var.nillable: obj = "" if self.var.derived: obj = self.derived_factory(qname=qname, value=obj) objects.append((qname, obj)) return True
[docs] def child(self, qname: str, attrs: Dict, ns_map: Dict, position: int) -> XmlNode: raise XmlContextError("Primitive node doesn't support child nodes!")