def build_class_attribute(cls, target: Class, name: str, value: Any): if isinstance(value, list): for val in value: cls.build_class_attribute(target, name, val) target.attrs[-1].restrictions.max_occurs = sys.maxsize else: if isinstance(value, dict): inner = cls.build_class(value, name) attr_type = AttrType(qname=inner.qname, forward=True) target.inner.append(inner) else: attr_type = ElementMapper.build_attribute_type(name, value) ElementMapper.build_attribute(target, name, attr_type)
def test_build_attribute_type(self): actual = ElementMapper.build_attribute_type(QNames.XSI_TYPE, "") self.assertEqual(str(DataType.QNAME), actual.qname) self.assertTrue(actual.native) actual = ElementMapper.build_attribute_type("name", "foo") self.assertEqual(str(DataType.STRING), actual.qname) self.assertTrue(actual.native) actual = ElementMapper.build_attribute_type("name", "") self.assertEqual(str(DataType.ANY_SIMPLE_TYPE), actual.qname) self.assertTrue(actual.native) actual = ElementMapper.build_attribute_type("name", None) self.assertEqual(str(DataType.ANY_SIMPLE_TYPE), actual.qname) self.assertTrue(actual.native) actual = ElementMapper.build_attribute_type("name", 1) self.assertEqual(str(DataType.SHORT), actual.qname) self.assertTrue(actual.native) actual = ElementMapper.build_attribute_type("name", "1.9") self.assertEqual(str(DataType.FLOAT), actual.qname) self.assertTrue(actual.native)