def test_parse_require_tz(): field = DateTimeType(tzd='require') with pytest.raises(ConversionError): dt = field.to_native('2015-11-08 12:34:56.00') dt = field.to_native('2015-11-08 12:34:56.00Z') assert dt == datetime(2015, 11, 8, 12, 34, 56, tzinfo=UTC)
def test_parse_convert_drop_tzinfo(): field = DateTimeType(tzd='require', convert_tz=True, drop_tzinfo=True) dt = field.to_native('2015-11-08T12:34:56.0369-0730') assert dt == datetime(2015, 11, 8, 20, 4, 56, 36900) dt = field.to_native('2015-11-08 12:34:56.00Z') assert dt == datetime(2015, 11, 8, 12, 34, 56, 0)
def test_parse_from_timestamp(): field = DateTimeType() dt = field.to_native('1446991200.7777') assert dt == datetime(2015, 11, 8, 14, 00, microsecond=777700, tzinfo=UTC) field = DateTimeType(convert_tz=True, drop_tzinfo=True) dt = field.to_native('1446991200.7777') assert dt == datetime(2015, 11, 8, 14, 00, microsecond=777700)
def test_parse_reject_tzd(): field = DateTimeType(tzd='reject') with pytest.raises(ConversionError): field.to_native('2015-11-08T12:34+0200') with pytest.raises(ConversionError): field.to_native('2015-11-08T12:34Z') dt = field.to_native('2015-11-08T12:34') assert dt == datetime(2015, 11, 8, 12, 34)
def test_parse_convert(): field = DateTimeType(convert_tz=True) dt = field.to_native('2015-11-08T12:34') assert dt == datetime(2015, 11, 8, 12, 34) dt = field.to_native('2015-11-08T12:34:56.0369-0730') assert dt == datetime(2015, 11, 8, 20, 4, 56, 36900, tzinfo=UTC) dt = field.to_native('2015-11-08 12:34:56,00Z') assert dt == datetime(2015, 11, 8, 12, 34, 56, 0, tzinfo=UTC)
def test_parse_using_formats(): formats = ('%Y-%m-%dT%H:%M:%S.%fZ', '%Y-%m-%dT%H:%M:%S.%f%z') field = DateTimeType(formats=formats) dt = field.to_native('2015-11-08T12:34:56.99Z') assert dt == datetime(2015, 11, 8, 12, 34, 56, 990000) if sys.version_info[0] >= 3: # strptime() supports the '%z' directive starting with Python 3.2. dt = field.to_native('2015-11-08T12:34:56.099-0700') assert dt.utcoffset() == timedelta(hours=-7) assert dt.replace(tzinfo=None) == datetime(2015, 11, 8, 12, 34, 56, 99000)
def conversion2(): print("=== conversion2 ===") dt_t = DateTimeType() dt = dt_t.to_native('2013-08-31T02:21:21.486072') print("type: {}, value: {}".format(type(dt), dt)) print("type: {}, value: {}".format(type(dt_t.to_primitive(dt)), dt_t.to_primitive(dt)))
def test_parse_with_defaults(): field = DateTimeType() dt = field.to_native('2015-11-08T12:34') assert dt == datetime(2015, 11, 8, 12, 34) dt = field.to_native('2015-11-08T12:34:00.1') assert dt == datetime(2015, 11, 8, 12, 34, 0, 100000) dt = field.to_native('2015-11-08T12:34:56,0369-0730') assert dt.utcoffset() == timedelta(hours=-7, minutes=-30) assert dt.replace(tzinfo=None) == datetime(2015, 11, 8, 12, 34, 56, 36900) assert dt == field.to_native(u'2015-11-08T12:34:56,0369−0730') # minus U+2212 dt = field.to_native('2015-11-08 12:34:56.00200+02:00') assert dt.utcoffset() == timedelta(hours=2) assert dt.replace(tzinfo=None) == datetime(2015, 11, 8, 12, 34, 56, 2000) dt = field.to_native('2015-11-08 12:34:56.00Z') assert dt.utcoffset() == timedelta(0) assert dt.replace(tzinfo=None) == datetime(2015, 11, 8, 12, 34, 56, 0)
def coercion(): dt_t = DateTimeType() dt = dt_t.to_native('2013-08-31T02:21:21.486072') print(dt, '\n', dt_t.to_primitive(dt))
def test_parse_reject_invalid_type(): field = DateTimeType() with pytest.raises(ConversionError): field.to_native(['2017-04-30'])
def test_to_native_from_datetime(): dt_naive_utc = datetime(2015, 6, 1, 14, 00) dt_utc = datetime(2015, 6, 1, 14, 00, tzinfo=UTC) dt_plustwo = datetime(2015, 6, 1, 16, 00, tzinfo=DateTimeType.offset_timezone(2)) dt_nyc = datetime(2015, 6, 1, 10, 00, tzinfo=NYC) field = DateTimeType(tzd='allow') assert field.to_native(dt_naive_utc) == dt_naive_utc assert field.to_native(dt_utc) == dt_utc assert field.to_native(dt_plustwo) == dt_plustwo assert field.to_native(dt_nyc) == dt_nyc field = DateTimeType(tzd='utc') assert field.to_native(dt_naive_utc) == dt_utc field = DateTimeType(tzd='reject') assert field.to_native(dt_naive_utc) == dt_naive_utc with pytest.raises(ConversionError): field.to_native(dt_utc) field = DateTimeType(tzd='require') assert field.to_native(dt_utc) == dt_utc with pytest.raises(ConversionError): field.to_native(dt_naive_utc) field = DateTimeType(tzd='require', convert_tz=True, drop_tzinfo=True) assert field.to_native(dt_naive_utc) == dt_naive_utc field = DateTimeType(convert_tz=True) assert field.to_native(dt_naive_utc) == dt_naive_utc assert field.to_native(dt_utc) == dt_utc assert field.to_native(dt_plustwo) == dt_utc assert field.to_native(dt_nyc) == dt_utc field = DateTimeType(convert_tz=True, drop_tzinfo=True) assert field.to_native(dt_naive_utc) == dt_naive_utc assert field.to_native(dt_utc) == dt_naive_utc assert field.to_native(dt_plustwo) == dt_naive_utc assert field.to_native(dt_nyc) == dt_naive_utc
def test_parse_utc(): field = DateTimeType(tzd='utc') dt = field.to_native('2015-11-08 12:34:56.00') assert dt == datetime(2015, 11, 8, 12, 34, 56, tzinfo=UTC)