def render_sub_node(self, parent: Element, value: Any, var: XmlVar, namespaces: Namespaces): if isinstance(value, AnyElement): self.render_wildcard_node(parent, value, var, namespaces) elif var.is_element or is_dataclass(value): self.render_element_node(parent, value, var, namespaces) elif not parent.text: SerializeUtils.set_text(parent, value, namespaces) else: SerializeUtils.set_tail(parent, value, namespaces)
def render_wildcard_node(self, parent: Element, value: Any, var: XmlVar, namespaces: Namespaces): if value.qname: sub_element = SubElement(parent, value.qname) else: sub_element = parent namespaces.add_all(value.ns_map) SerializeUtils.set_text(sub_element, value.text, namespaces) SerializeUtils.set_tail(sub_element, value.tail, namespaces) SerializeUtils.set_attributes(sub_element, value.attributes, namespaces) for child in value.children: self.render_sub_node(sub_element, child, var, namespaces) SerializeUtils.set_nil_attribute(sub_element, var.nillable, namespaces)
def render_wildcard_node(self, parent: Element, value: Any, var: XmlVar, namespaces: Namespaces): """Render a child element for the given parent according to the wildcard field metadata.""" if value.qname: sub_element = SubElement(parent, value.qname) else: sub_element = parent namespaces.add_all(value.ns_map) SerializeUtils.set_text(sub_element, value.text, namespaces) SerializeUtils.set_tail(sub_element, value.tail, namespaces) SerializeUtils.set_attributes(sub_element, value.attributes, namespaces) for child in value.children: self.render_sub_node(sub_element, child, var, namespaces) SerializeUtils.set_nil_attribute(sub_element, var.nillable, namespaces)
def test_set_tail(self): SerializeUtils.set_tail(self.element, 1, self.namespaces) self.assertEqual("1", self.element.tail) SerializeUtils.set_tail(self.element, "", self.namespaces) self.assertIsNone(self.element.tail)