def test_from_value_period(self): g_day = XmlPeriod("---20-02:44") self.assertEqual(DataType.G_DAY, DataType.from_value(g_day)) g_month_day = XmlPeriod("--12-20-02:44") self.assertEqual(DataType.G_MONTH_DAY, DataType.from_value(g_month_day)) g_month = XmlPeriod("--12") self.assertEqual(DataType.G_MONTH, DataType.from_value(g_month)) g_year_month = XmlPeriod("2021-01") self.assertEqual(DataType.G_YEAR_MONTH, DataType.from_value(g_year_month)) g_year = XmlPeriod("2021") self.assertEqual(DataType.G_YEAR, DataType.from_value(g_year))
def match_type(val: Any) -> DataType: if not isinstance(val, str): return DataType.from_value(val) for tp in converter.explicit_types(): if converter.test(val, [tp]): return DataType.from_type(tp) return DataType.STRING
def test_from_value_simple(self): self.assertEqual(DataType.BOOLEAN, DataType.from_value(True)) self.assertEqual(DataType.DECIMAL, DataType.from_value(Decimal(1.1))) self.assertEqual(DataType.QNAME, DataType.from_value(QName("a"))) self.assertEqual(DataType.STRING, DataType.from_value("a")) self.assertEqual(DataType.DATE, DataType.from_value(XmlDate(2021, 1, 1))) self.assertEqual(DataType.TIME, DataType.from_value(XmlTime(12, 1, 1))) self.assertEqual( DataType.DATE_TIME, DataType.from_value(XmlDateTime(2002, 1, 1, 12, 1, 1)) ) self.assertEqual(DataType.STRING, DataType.from_value(self))
def test_from_value(self): self.assertEqual(DataType.BOOLEAN, DataType.from_value(True)) self.assertEqual(DataType.INT, DataType.from_value(1)) self.assertEqual(DataType.FLOAT, DataType.from_value(1.1)) self.assertEqual(DataType.DECIMAL, DataType.from_value(Decimal(1.1))) self.assertEqual(DataType.QNAME, DataType.from_value(QName("a"))) self.assertEqual(DataType.STRING, DataType.from_value("a"))
def write_element(cls, value: Any, var: XmlVar, namespace: NoneStr) -> Generator: """Produce an element events stream for the given simple type value.""" yield XmlWriterEvent.START, var.qname if var.nillable: yield XmlWriterEvent.ATTR, QNames.XSI_NIL, "true" if value is not None and var.any_type: datatype = DataType.from_value(value) if datatype != DataType.STRING: yield XmlWriterEvent.ATTR, QNames.XSI_TYPE, QName(str(datatype)) yield XmlWriterEvent.DATA, value yield XmlWriterEvent.END, var.qname
def write_derived_element(self, value: DerivedElement, var: XmlVar, namespace: NoneStr) -> Generator: if is_dataclass(value.value): xsi_type = None if value.substituted: meta = self.context.build(value.value.__class__) xsi_type = QName(meta.source_qname) yield from self.write_dataclass(value.value, namespace, qname=value.qname, xsi_type=xsi_type) else: datatype = DataType.from_value(value.value) yield XmlWriterEvent.START, value.qname yield XmlWriterEvent.ATTR, QNames.XSI_TYPE, QName(str(datatype)) yield XmlWriterEvent.DATA, value.value yield XmlWriterEvent.END, value.qname
def test_from_value_float(self): self.assertEqual(DataType.FLOAT, DataType.from_value(-1.175494351e-38)) self.assertEqual(DataType.FLOAT, DataType.from_value(3.402823466e38)) self.assertEqual(DataType.DOUBLE, DataType.from_value(-1.175494352e-38)) self.assertEqual(DataType.DOUBLE, DataType.from_value(3.402823467e38))
def test_from_value_int(self): self.assertEqual(DataType.SHORT, DataType.from_value(-32768)) self.assertEqual(DataType.SHORT, DataType.from_value(32767)) self.assertEqual(DataType.INT, DataType.from_value(-32769)) self.assertEqual(DataType.INT, DataType.from_value(32768)) self.assertEqual(DataType.INT, DataType.from_value(-2147483648)) self.assertEqual(DataType.INT, DataType.from_value(2147483647)) self.assertEqual(DataType.LONG, DataType.from_value(-2147483649)) self.assertEqual(DataType.LONG, DataType.from_value(2147483648)) self.assertEqual(DataType.LONG, DataType.from_value(-9223372036854775808)) self.assertEqual(DataType.LONG, DataType.from_value(9223372036854775807)) self.assertEqual(DataType.INTEGER, DataType.from_value(-9223372036854775809)) self.assertEqual(DataType.INTEGER, DataType.from_value(9223372036854775808))