def test_to_primitive(): dt = datetime(2015, 11, 8, 12, 34, 56, 36900, tzinfo=DateTimeType.offset_timezone(-7, -30)) assert DateTimeType().to_primitive(dt) == '2015-11-08T12:34:56.036900-0730' assert DateTimeType(serialized_format='%Y-%m-%d %H:%M:%S').to_primitive(dt) \ == '2015-11-08 12:34:56'
def test_validate_tz(): dt_naive = lambda: datetime(2015, 6, 1, 14, 00) dt_utc = lambda: datetime(2015, 6, 1, 14, 00, tzinfo=UTC) dt_plustwo = lambda: datetime( 2015, 6, 1, 16, 00, tzinfo=DateTimeType.offset_timezone(2)) dt_nyc = lambda: datetime(2015, 6, 1, 10, 00, tzinfo=NYC) all_values = [dt_naive, dt_utc, dt_plustwo, dt_nyc] def test_field(field, valid): for value in all_values: if value in valid: field.validate_tz(value()) else: with pytest.raises(ValidationError): field.validate_tz(value()) test_field(DateTimeType(tzd='allow'), [dt_naive, dt_utc, dt_plustwo, dt_nyc]) test_field(DateTimeType(convert_tz=True), [dt_naive, dt_utc]) test_field(DateTimeType(tzd='utc'), [dt_utc, dt_plustwo, dt_nyc]) test_field(DateTimeType(tzd='utc', convert_tz=True), [dt_utc]) test_field(DateTimeType(tzd='reject'), [dt_naive]) test_field(DateTimeType(tzd='require'), [dt_utc, dt_plustwo, dt_nyc]) test_field(DateTimeType(drop_tzinfo=True), [dt_naive])
def test_timestamp(): field = TimestampType() field_no_tz = TimestampType(drop_tzinfo=True) ts = field.to_primitive(datetime(2015, 11, 8, 14, 00)) assert ts == 1446991200.0 assert type(ts) == float ts = field_no_tz.to_primitive(datetime(2015, 11, 8, 14, 00)) assert ts == 1446991200.0 assert type(ts) == float ts = field.to_primitive( datetime(2014, 5, 8, 22, 40, 40, tzinfo=gettz('PST8PDT'))) assert ts == 1399614040.0 ts = field_no_tz.to_primitive( datetime(2014, 5, 8, 22, 40, 40, tzinfo=gettz('PST8PDT'))) assert ts == 1399614040.0 dt_with_tz = datetime(2015, 11, 8, 16, 00, tzinfo=DateTimeType.offset_timezone(2)) dt_no_tz = datetime(2015, 11, 8, 14, 00) dt_no_tz_usec = datetime(2015, 11, 8, 14, 00, microsecond=777700) assert field.to_primitive(dt_with_tz) == 1446991200.0 assert field_no_tz.to_primitive(dt_with_tz) == 1446991200.0 assert field.to_native(dt_with_tz) == dt_no_tz.replace(tzinfo=UTC) assert field_no_tz.to_native(dt_with_tz) == dt_no_tz assert field.to_native(1446991200.7777) == dt_no_tz_usec.replace( tzinfo=UTC) assert field_no_tz.to_native(1446991200.7777) == dt_no_tz_usec with pytest.raises(ConversionError): field.to_native(dt_no_tz) ts = field.to_primitive(dt_no_tz_usec) assert ts == 1446991200.7777 assert type(ts) == float ts = field.to_primitive(datetime(2014, 5, 8, 22, 40, 40, tzinfo=UTC)) assert ts == 1399588840.0 assert field.to_primitive(EPOCH) == 0 assert field.to_native(0) == EPOCH
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_timestamp(): field = TimestampType() field_no_tz = TimestampType(drop_tzinfo=True) ts = field.to_primitive(datetime(2015, 11, 8, 14, 00)) assert ts == 1446991200.0 assert type(ts) == float ts = field_no_tz.to_primitive(datetime(2015, 11, 8, 14, 00)) assert ts == 1446991200.0 assert type(ts) == float ts = field.to_primitive(datetime(2014, 5, 8, 22, 40, 40, tzinfo=gettz('PST8PDT'))) assert ts == 1399614040.0 ts = field_no_tz.to_primitive(datetime(2014, 5, 8, 22, 40, 40, tzinfo=gettz('PST8PDT'))) assert ts == 1399614040.0 dt_with_tz = datetime(2015, 11, 8, 16, 00, tzinfo=DateTimeType.offset_timezone(2)) dt_no_tz = datetime(2015, 11, 8, 14, 00) dt_no_tz_usec = datetime(2015, 11, 8, 14, 00, microsecond=777700) assert field.to_primitive(dt_with_tz) == 1446991200.0 assert field_no_tz.to_primitive(dt_with_tz) == 1446991200.0 assert field.to_native(dt_with_tz) == dt_no_tz.replace(tzinfo=UTC) assert field_no_tz.to_native(dt_with_tz) == dt_no_tz assert field.to_native(1446991200.7777) == dt_no_tz_usec.replace(tzinfo=UTC) assert field_no_tz.to_native(1446991200.7777) == dt_no_tz_usec with pytest.raises(ConversionError): field.to_native(dt_no_tz) ts = field.to_primitive(dt_no_tz_usec) assert ts == 1446991200.7777 assert type(ts) == float ts = field.to_primitive(datetime(2014, 5, 8, 22, 40, 40, tzinfo=UTC)) assert ts == 1399588840.0 assert field.to_primitive(EPOCH) == 0 assert field.to_native(0) == EPOCH
def test_validate_tz(): dt_naive = lambda: datetime(2015, 6, 1, 14, 00) dt_utc = lambda: datetime(2015, 6, 1, 14, 00, tzinfo=UTC) dt_plustwo = lambda: datetime(2015, 6, 1, 16, 00, tzinfo=DateTimeType.offset_timezone(2)) dt_nyc = lambda: datetime(2015, 6, 1, 10, 00, tzinfo=NYC) all_values = [dt_naive, dt_utc, dt_plustwo, dt_nyc] def test_field(field, valid): for value in all_values: if value in valid: field.validate_tz(value()) else: with pytest.raises(ValidationError): field.validate_tz(value()) test_field(DateTimeType(tzd='allow'), [dt_naive, dt_utc, dt_plustwo, dt_nyc]) test_field(DateTimeType(convert_tz=True), [dt_naive, dt_utc]) test_field(DateTimeType(tzd='utc'), [dt_utc, dt_plustwo, dt_nyc]) test_field(DateTimeType(tzd='utc', convert_tz=True), [dt_utc]) test_field(DateTimeType(tzd='reject'), [dt_naive]) test_field(DateTimeType(tzd='require'), [dt_utc, dt_plustwo, dt_nyc]) test_field(DateTimeType(drop_tzinfo=True), [dt_naive])