Exemple #1
0
    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
Exemple #2
0
    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)
Exemple #3
0
    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)