コード例 #1
0
    def test_parse_value(self, mock_deserialize):
        self.assertEqual(1, ParserUtils.parse_value(None, [int], 1))
        self.assertIsNone(ParserUtils.parse_value(None, [int], lambda: 1))

        self.assertTrue(2, ParserUtils.parse_value("1", [int], None))
        mock_deserialize.assert_called_once_with("1", [int],
                                                 ns_map=None,
                                                 format=None)
コード例 #2
0
    def test_parse_value_with_tokens_true(self):
        actual = ParserUtils.parse_value(" 1 2 3", [int], list, None, True)
        self.assertEqual([1, 2, 3], actual)

        actual = ParserUtils.parse_value(["1", "2", "3"], [int], list, None, True)
        self.assertEqual([1, 2, 3], actual)

        actual = ParserUtils.parse_value(None, [int], lambda: [1, 2, 3], None, True)
        self.assertEqual([1, 2, 3], actual)
コード例 #3
0
    def test_parse_value_with_ns_map(self, mock_to_python):
        ns_map = dict(a=1)
        ParserUtils.parse_value(" 1 2 3", [int], list, ns_map, True)
        ParserUtils.parse_value(" 1 2 3", [str], None, ns_map, False)

        self.assertEqual(4, mock_to_python.call_count)
        mock_to_python.assert_has_calls([
            mock.call("1", [int], ns_map=ns_map, format=None),
            mock.call("2", [int], ns_map=ns_map, format=None),
            mock.call("3", [int], ns_map=ns_map, format=None),
            mock.call(" 1 2 3", [str], ns_map=ns_map, format=None),
        ])
コード例 #4
0
ファイル: json.py プロジェクト: igieon/xsdata
 def parse_value(cls, value: Any, var: XmlVar) -> Any:
     """Convert any value to one of the given var types."""
     return ParserUtils.parse_value(value,
                                    var.types,
                                    var.default,
                                    ns_map=EMPTY_MAP,
                                    tokens=var.tokens)
コード例 #5
0
    def bind_value(self, var: XmlVar, value: Any) -> Any:
        """
        Bind value according to the class var.

        The return value can be:
        - a dataclass instance
        - a dictionary with unknown attributes
        - a list of unknown elements
        - an enumeration
        - a primitive value
        """
        if var.dataclass and var.clazz:
            return self.parse_context(value, var.clazz)

        if var.is_attributes:
            return dict(value)

        if var.is_wildcard:
            return (value if isinstance(value, str) else self.parse_context(
                value, AnyElement))

        return ParserUtils.parse_value(var.types,
                                       value,
                                       var.default,
                                       tokens=var.is_tokens)
コード例 #6
0
    def bind(self, qname: str, text: NoneStr, tail: NoneStr, objects: List) -> bool:
        obj: Any = None
        if self.has_children:
            obj = AnyElement(
                qname=qname,
                text=ParserUtils.normalize_content(text),
                tail=ParserUtils.normalize_content(tail),
                attributes=ParserUtils.parse_any_attributes(self.attrs, self.ns_map),
                children=ParserUtils.fetch_any_children(self.position, objects),
            )
            objects.append((self.var.qname, obj))
        else:
            var = self.var
            ns_map = self.ns_map
            datatype = ParserUtils.data_type(self.attrs, self.ns_map)
            obj = ParserUtils.parse_value(text, [datatype.type], var.default, ns_map)

            if var.derived:
                obj = DerivedElement(qname=qname, value=obj)

            objects.append((qname, obj))

            if self.mixed:
                tail = ParserUtils.normalize_content(tail)
                if tail:
                    objects.append((None, tail))

        return True
コード例 #7
0
ファイル: nodes.py プロジェクト: nimish/xsdata
    def parse_element(self, element: Element, objects: List) -> Tuple:
        qname = QName(element.tag)
        value = element.text
        ns_map = element.nsmap
        obj = ParserUtils.parse_value(self.types, value, self.default, ns_map,
                                      self.tokens)

        return qname, obj
コード例 #8
0
 def parse_value(self, value: Any, types: List[Type]) -> Any:
     """Parse simple values, treat warnings as errors and return None."""
     try:
         with warnings.catch_warnings():
             warnings.filterwarnings("error", category=ConverterWarning)
             return ParserUtils.parse_value(value,
                                            types,
                                            ns_map=self.ns_map)
     except Exception:
         return None
コード例 #9
0
    def bind(self, qname: str, text: NoneStr, tail: NoneStr, objects: List) -> bool:
        var = self.var
        ns_map = self.ns_map
        obj = ParserUtils.parse_value(text, var.types, var.default, ns_map, var.tokens)

        if var.derived:
            obj = DerivedElement(qname=qname, value=obj)

        objects.append((qname, obj))
        return True
コード例 #10
0
ファイル: json.py プロジェクト: neriusmika/xsdata
 def parse_value(
     cls,
     value: Any,
     types: List[Type],
     default: Any,
     tokens: bool,
     fmt: Optional[str],
 ) -> Any:
     """Convert any value to one of the given var types."""
     return ParserUtils.parse_value(value, types, default, EMPTY_MAP,
                                    tokens, fmt)
コード例 #11
0
ファイル: nodes.py プロジェクト: rmr1154/xsdata
    def parse_element(self, element: Element, objects: List) -> Tuple:
        """
        Parse the given element text according to the node possible types.

        :return: A tuple of the object's qualified name and the new object.
        """
        qname = QName(element.tag)
        value = element.text
        ns_map = element.nsmap
        obj = ParserUtils.parse_value(self.var.types, value, self.var.default,
                                      ns_map, self.var.is_tokens)

        return qname, obj
コード例 #12
0
    def bind(self, qname: str, text: NoneStr, tail: NoneStr,
             objects: List) -> bool:
        obj = ParserUtils.parse_value(
            text,
            self.var.types,
            self.var.default,
            self.ns_map,
            self.var.tokens,
            self.var.format,
        )

        if obj is None and not self.var.nillable:
            obj = ""

        if self.var.derived:
            obj = DerivedElement(qname=qname, value=obj)

        objects.append((qname, obj))
        return True
コード例 #13
0
    def bind(self, qname: str, text: NoneStr, tail: NoneStr,
             objects: List) -> bool:
        obj = ParserUtils.parse_value(
            text,
            [self.datatype.type],
            None,
            self.ns_map,
            False,
            self.datatype.format,
        )

        if obj is None and not self.nillable:
            obj = ""

        if self.datatype.wrapper:
            obj = self.datatype.wrapper(obj)

        if self.derived:
            obj = DerivedElement(qname=qname, value=obj)

        objects.append((qname, obj))
        return True
コード例 #14
0
    def test_parse_value(self, mock_to_python):
        self.assertEqual(1, ParserUtils.parse_value([int], None, 1))
        self.assertIsNone(ParserUtils.parse_value([int], None, lambda: 1))

        self.assertTrue(2, ParserUtils.parse_value([int], "1", None))
        mock_to_python.assert_called_once_with([int], "1", None)
コード例 #15
0
 def test_parse_value_with_format(self, mock_to_python):
     ParserUtils.parse_value(" 1 2 3", [str], list, _format="Nope")
     self.assertEqual(1, mock_to_python.call_count)
     mock_to_python.assert_called_once_with(" 1 2 3", [str],
                                            ns_map=None,
                                            format="Nope")