def test_rfc3339_w_nanos_w_leading_zero_and_no_trailing_zeros(): stamp = datetime_helpers.DatetimeWithNanoseconds(2016, 12, 20, 21, 13, 47, nanosecond=1234500) assert stamp.rfc3339() == "2016-12-20T21:13:47.0012345Z"
def test_timestamp_pb_wo_nanos_naive(): stamp = datetime_helpers.DatetimeWithNanoseconds(2016, 12, 20, 21, 13, 47, 123456) delta = stamp.replace( tzinfo=datetime.timezone.utc) - datetime_helpers._UTC_EPOCH seconds = int(delta.total_seconds()) nanos = 123456000 timestamp = timestamp_pb2.Timestamp(seconds=seconds, nanos=nanos) assert stamp.timestamp_pb() == timestamp
def test_rfc3339_w_nanos_no_trailing_zeroes(): stamp = datetime_helpers.DatetimeWithNanoseconds(2016, 12, 20, 21, 13, 47, nanosecond=100000000) assert stamp.rfc3339() == "2016-12-20T21:13:47.1Z"
def test_rfc3339_w_nanos(): stamp = datetime_helpers.DatetimeWithNanoseconds(2016, 12, 20, 21, 13, 47, nanosecond=123456789) assert stamp.rfc3339() == "2016-12-20T21:13:47.123456789Z"
def test_ctor_w_micros_keyword_and_nanos(): with pytest.raises(TypeError): datetime_helpers.DatetimeWithNanoseconds(2016, 12, 20, 21, 13, 47, microsecond=123456, nanosecond=123456789)
def test_ctor_wo_nanos(): stamp = datetime_helpers.DatetimeWithNanoseconds(2016, 12, 20, 21, 13, 47, 123456) assert stamp.year == 2016 assert stamp.month == 12 assert stamp.day == 20 assert stamp.hour == 21 assert stamp.minute == 13 assert stamp.second == 47 assert stamp.microsecond == 123456 assert stamp.nanosecond == 123456000
def test_from_rfc3339_w_full_precision(): timestamp = "2016-12-20T21:13:47.123456789Z" expected = datetime_helpers.DatetimeWithNanoseconds( 2016, 12, 20, 21, 13, 47, nanosecond=123456789, tzinfo=datetime.timezone.utc) stamp = datetime_helpers.DatetimeWithNanoseconds.from_rfc3339(timestamp) assert stamp == expected
def test_from_rfc3339_w_partial_precision(): timestamp = "2016-12-20T21:13:47.1Z" expected = datetime_helpers.DatetimeWithNanoseconds( 2016, 12, 20, 21, 13, 47, microsecond=100000, tzinfo=datetime.timezone.utc) stamp = datetime_helpers.DatetimeWithNanoseconds.from_rfc3339(timestamp) assert stamp == expected
def test_timestamp_pb_w_nanos(): stamp = datetime_helpers.DatetimeWithNanoseconds( 2016, 12, 20, 21, 13, 47, nanosecond=123456789, tzinfo=datetime.timezone.utc) delta = stamp - datetime_helpers._UTC_EPOCH timestamp = timestamp_pb2.Timestamp(seconds=int(delta.total_seconds()), nanos=123456789) assert stamp.timestamp_pb() == timestamp
def test_replace(): stamp = datetime_helpers.DatetimeWithNanoseconds( 2016, 12, 20, 21, 13, 47, 123456, tzinfo=datetime.timezone.utc) # ns and ms provided raises with pytest.raises(TypeError): stamp.replace(microsecond=1, nanosecond=0) # No Nanoseconds or Microseconds new_stamp = stamp.replace(year=2015) assert new_stamp.year == 2015 assert new_stamp.microsecond == 123456 assert new_stamp.nanosecond == 123456000 # Nanos new_stamp = stamp.replace(nanosecond=789123) assert new_stamp.microsecond == 789 assert new_stamp.nanosecond == 789123 # Micros new_stamp = stamp.replace(microsecond=456) assert new_stamp.microsecond == 456 assert new_stamp.nanosecond == 456000
def test_from_rfc3339_wo_fraction(): timestamp = "2016-12-20T21:13:47Z" expected = datetime_helpers.DatetimeWithNanoseconds( 2016, 12, 20, 21, 13, 47, tzinfo=datetime.timezone.utc) stamp = datetime_helpers.DatetimeWithNanoseconds.from_rfc3339(timestamp) assert stamp == expected
def test_rfc3339_wo_nanos_w_leading_zero(): stamp = datetime_helpers.DatetimeWithNanoseconds(2016, 12, 20, 21, 13, 47, 1234) assert stamp.rfc3339() == "2016-12-20T21:13:47.001234Z"