diff --git a/xmlschema/tests/test_validators.py b/xmlschema/tests/test_validators.py index 11367138..b20a2458 100644 --- a/xmlschema/tests/test_validators.py +++ b/xmlschema/tests/test_validators.py @@ -1159,6 +1159,47 @@ def test_complex_elements(self): expected=XMLSchemaValidationError, indent=0, cdata_prefix='#' ) + def test_encode_datetime(self): + xs = self.get_schema('') + + dt = xs.decode('2019-01-01T13:40:00', datetime_types=True) + self.assertEqual( + etree_tostring(xs.encode(dt)), + '2019-01-01T13:40:00' + ) + + def test_encode_date(self): + xs = self.get_schema('') + date = xs.decode('2001-04-15', datetime_types=True) + self.assertEqual( + etree_tostring(xs.encode(date)), + '2001-04-15' + ) + + def test_duration(self): + xs = self.get_schema('') + duration = xs.decode('P5Y3MT60H30.001S', datetime_types=True) + self.assertEqual( + etree_tostring(xs.encode(duration)), + 'P5Y3M2DT12H30.001S' + ) + + def test_gregorian_year(self): + xs = self.get_schema('') + gyear = xs.decode('2000', datetime_types=True) + self.assertEqual( + etree_tostring(xs.encode(gyear)), + '2000' + ) + + def test_gregorian_yearmonth(self): + xs = self.get_schema('') + gyear_month = xs.decode('2000-12', datetime_types=True) + self.assertEqual( + etree_tostring(xs.encode(gyear_month)), + '2000-12' + ) + class TestEncoding11(TestEncoding): schema_class = XMLSchema11 diff --git a/xmlschema/validators/builtins.py b/xmlschema/validators/builtins.py index 216f7512..aec3d440 100644 --- a/xmlschema/validators/builtins.py +++ b/xmlschema/validators/builtins.py @@ -416,28 +416,28 @@ def python_to_boolean(obj): # --- Year related primitive types (year 0 not allowed) --- { 'name': XSD_DATETIME, - 'python_type': (unicode_type, str, datatypes.DateTime), + 'python_type': (unicode_type, str, datatypes.DateTime10), 'admitted_facets': DATETIME_FACETS, 'facets': [COLLAPSE_WHITE_SPACE_ELEMENT], 'to_python': datatypes.DateTime10.fromstring, }, # [-][Y*]YYYY-MM-DD[Thh:mm:ss] { 'name': XSD_DATE, - 'python_type': (unicode_type, str, datatypes.Date), + 'python_type': (unicode_type, str, datatypes.Date10), 'admitted_facets': DATETIME_FACETS, 'facets': [COLLAPSE_WHITE_SPACE_ELEMENT], 'to_python': datatypes.Date10.fromstring, }, # [-][Y*]YYYY-MM-DD { 'name': XSD_GYEAR, - 'python_type': (unicode_type, str, datatypes.GregorianYear), + 'python_type': (unicode_type, str, datatypes.GregorianYear10), 'admitted_facets': DATETIME_FACETS, 'facets': [COLLAPSE_WHITE_SPACE_ELEMENT], 'to_python': datatypes.GregorianYear10.fromstring, }, # [-][Y*]YYYY { 'name': XSD_GYEAR_MONTH, - 'python_type': (unicode_type, str, datatypes.GregorianYearMonth), + 'python_type': (unicode_type, str, datatypes.GregorianYearMonth10), 'admitted_facets': DATETIME_FACETS, 'facets': [COLLAPSE_WHITE_SPACE_ELEMENT], 'to_python': datatypes.GregorianYearMonth10.fromstring,