def bind(self, qname: str, text: NoneStr, tail: NoneStr, objects: List) -> bool: params: Dict = {} wild_node = False text_node = False ParserUtils.bind_attrs(params, self.meta, self.attrs, self.ns_map) wild_var = self.meta.find_var(mode=FindMode.WILDCARD) if wild_var and wild_var.mixed: ParserUtils.bind_mixed_objects(params, wild_var, self.position, objects) else: ParserUtils.bind_objects(params, self.meta, self.position, objects) text_node = ParserUtils.bind_content(params, self.meta, text, self.ns_map) if not text_node and wild_var: ParserUtils.bind_wild_content(params, wild_var, text, tail, self.attrs, self.ns_map) obj = self.meta.clazz(**params) if self.derived: obj = DerivedElement(qname=qname, value=obj, substituted=self.substituted) objects.append((qname, obj)) if not wild_var and self.mixed and not wild_node: tail = ParserUtils.normalize_content(tail) if tail: objects.append((None, tail)) return True
def test_bind_wildcard_when_var_is_list(self): var = XmlVar(name="a", qname="a", default=list, list_element=True) params = {} attrs = {"a", "b"} ns_map = {"ns0", "a"} ParserUtils.bind_wild_content(params, var, "txt", "tail", attrs, ns_map) self.assertEqual(dict(a=["txt", "tail"]), params) ParserUtils.bind_wild_content(params, var, None, "tail", attrs, ns_map) self.assertEqual(dict(a=["txt", "tail", "tail"]), params) ParserUtils.bind_wild_content(params, var, "first", None, attrs, ns_map) self.assertEqual(dict(a=["first", "txt", "tail", "tail"]), params)
def test_bind_wild_content(self): var = XmlVar(name="a", qname="a") params = {} attrs = {} ns_map = {} ParserUtils.bind_wild_content(params, var, None, None, attrs, ns_map) self.assertEqual(0, len(params)) params = {} ParserUtils.bind_wild_content(params, var, "txt", "tail", attrs, ns_map) expected = AnyElement(text="txt", tail="tail") self.assertEqual(dict(a=expected), params) attrs = {"a": "b"} ns_map = {"ns0": "a"} ParserUtils.bind_wild_content(params, var, "txt", "tail", attrs, ns_map) expected = AnyElement( text="txt", tail="tail", children=[expected], attributes=attrs ) self.assertEqual(dict(a=expected), params)