def test_bind_element_attrs_doesnt_overwrite_values(self): metadata = self.ctx.build(ProductType) element = Element("foo") element.set("effDate", "2020-03-01") params = dict(eff_date="foo") ParserUtils.bind_element_attrs(params, metadata, element) expected = {"eff_date": "foo", "other_attributes": {"effDate": "2020-03-01"}} self.assertEqual(expected, params)
def parse_element(self, element: Element, objects: List[Any]) -> Tuple: params: Dict = dict() ParserUtils.bind_element_attrs(params, self.meta, element) ParserUtils.bind_element_text(params, self.meta, element) ParserUtils.bind_element_children(params, self.meta, self.position, objects) ParserUtils.bind_element_wild_text(params, self.meta, element) qname = QName(element.tag) obj = self.meta.clazz(**params) return qname, obj
def test_bind_elements_attrs_ignore_init_false_vars(self): metadata = self.ctx.build(ProductType) eff_date = metadata.find_var("effDate") metadata.vars.remove(eff_date) metadata.vars.append(replace(eff_date, init=False)) element = Element("foo") element.set("effDate", "2020-03-01") params = {} ParserUtils.bind_element_attrs(params, metadata, element) self.assertEqual({}, params)
def parse_element(self, element: Element, objects: List[Any]) -> Tuple: """ Parse the given element attributes/text, find all child objects and mixed content and initialize a new dataclass instance. :return: A tuple of the object's qualified name and the new object. """ params: Dict = {} ParserUtils.bind_element_attrs(params, self.meta, element) ParserUtils.bind_element_text(params, self.meta, element) ParserUtils.bind_element_children(params, self.meta, self.position, objects) ParserUtils.bind_element_wild_text(params, self.meta, element) qname = QName(element.tag) obj = self.meta.clazz(**params) return qname, obj
def test_bind_element_attrs(self, mock_parse_value): mock_parse_value.return_value = "2020-03-02" metadata = self.ctx.build(ProductType) eff_date = metadata.find_var("effDate") element = Element("foo") element.set("effDate", "2020-03-01") element.set("whatever", "foo") params = {} ParserUtils.bind_element_attrs(params, metadata, element) expected = {"eff_date": "2020-03-02", "other_attributes": {"whatever": "foo"}} self.assertEqual(expected, params) mock_parse_value.assert_called_once_with( eff_date.types, "2020-03-01", eff_date.default, element.nsmap, eff_date.is_list, )