Skip to content

Commit 36b3315

Browse files
committed
Fix up tests to handle datetime scale and epoch
1 parent 2e06446 commit 36b3315

3 files changed

Lines changed: 22 additions & 19 deletions

File tree

structa/types.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,12 +1182,12 @@ def validate(self, value):
11821182
value = parse_bool(value, false, true)
11831183
elif isinstance(self.content, Int) or (
11841184
isinstance(self.content, NumRepr) and
1185-
self.content.pattern is Int
1185+
self.content.pattern[0] is Int
11861186
):
11871187
value = int(value, base=self.int_bases[self.pattern])
11881188
elif isinstance(self.content, Float) or (
11891189
isinstance(self.content, NumRepr) and
1190-
self.content.pattern is Float
1190+
self.content.pattern[0] is Float
11911191
):
11921192
assert self.pattern == 'f'
11931193
value = float(value)
@@ -1210,13 +1210,14 @@ def __str__(self):
12101210
type_, scale, offset = self.pattern
12111211
delta = timedelta(seconds=scale)
12121212
unit = ', '.join(
1213-
'{value}{prop}'.format(
1214-
value='{value}*' if value != 1 else '',
1213+
'{count}{prop}'.format(
1214+
count='{value}*'.format(value=value) if value != 1 else '',
12151215
prop=prop)
12161216
for prop in ('days', 'seconds', 'microseconds')
12171217
for value in (getattr(delta, prop),)
1218+
if value
12181219
)
1219-
if not epoch % 86400:
1220+
if not offset % 86400:
12201221
epoch = datetime.utcfromtimestamp(offset).date().isoformat()
12211222
else:
12221223
epoch = datetime.utcfromtimestamp(offset).isoformat()

tests/test_analyzer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ def test_analyze_datetime_float():
401401
sample=[data],
402402
content=[NumRepr(
403403
DateTime(Counter(dt.datetime.utcfromtimestamp(n) for n in data)),
404-
pattern=float)]
404+
pattern=(Float, 1, 0))]
405405
)
406406

407407

@@ -415,7 +415,7 @@ def test_analyze_datetime_float_str():
415415
sample=[data],
416416
content=[StrRepr(NumRepr(
417417
DateTime(Counter(dt.datetime.utcfromtimestamp(float(n)) for n in data)),
418-
pattern=float), pattern='f')]
418+
pattern=(Float, 1, 0)), pattern='f')]
419419
)
420420

421421

tests/test_types.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -663,15 +663,15 @@ def test_num_repr():
663663
dt.datetime.utcfromtimestamp(0),
664664
dt.datetime.utcfromtimestamp(1),
665665
dt.datetime.utcfromtimestamp(86400),
666-
))), pattern=Int)
667-
assert str(pattern) == 'int of datetime range=1970-01-01 00:00:00..1970-01-02 00:00:00'
666+
))), pattern=(Int, 1, 0))
667+
assert str(pattern) == 'int seconds after 1970-01-01 of datetime range=1970-01-01 00:00:00..1970-01-02 00:00:00'
668668
assert xml(pattern).tag == 'intof'
669669
pattern = NumRepr(DateTime(Counter((
670670
dt.datetime.utcfromtimestamp(0.0),
671671
dt.datetime.utcfromtimestamp(1.0),
672672
dt.datetime.utcfromtimestamp(86400.0),
673-
))), pattern=Float)
674-
assert str(pattern) == 'float of datetime range=1970-01-01 00:00:00..1970-01-02 00:00:00'
673+
))), pattern=(Float, 1, 0))
674+
assert str(pattern) == 'float seconds after 1970-01-01 of datetime range=1970-01-01 00:00:00..1970-01-02 00:00:00'
675675
assert xml(pattern).tag == 'floatof'
676676
assert pattern == pattern + pattern
677677
assert pattern + pattern == pattern
@@ -808,7 +808,7 @@ def test_datetime_numrepr():
808808
}
809809
numbers = Int(Counter(d.timestamp() for d in data))
810810
pattern = DateTime.from_numbers(numbers)
811-
assert pattern == NumRepr(DateTime(Counter(data)), pattern=Int)
811+
assert pattern == NumRepr(DateTime(Counter(data)), pattern=(Int, 1, 0))
812812
pattern.validate(1000)
813813
with pytest.raises(TypeError):
814814
pattern.validate('1000')
@@ -833,14 +833,14 @@ def test_datetime_numrepr_epoch():
833833
pattern = DateTime.from_numbers(numbers, epoch=excel_epoch,
834834
unit=dt.timedelta(days=1))
835835
assert pattern == NumRepr(DateTime(Counter(data)),
836-
pattern=(Int, offset, 86400))
837-
pattern.validate(1000)
836+
pattern=(Int, 86400, offset))
837+
pattern.validate(20000)
838838
with pytest.raises(TypeError):
839-
pattern.validate('1000')
839+
pattern.validate('20000')
840840
with pytest.raises(ValueError):
841-
pattern.validate(200000000)
841+
pattern.validate(100)
842842
with pytest.raises(ValueError):
843-
pattern.validate(2000000000000)
843+
pattern.validate(20000000)
844844

845845

846846
@pytest.mark.skipif(sys.maxsize <= 2**32, reason="requires 64-bit arch")
@@ -853,7 +853,8 @@ def test_datetime_strrepr_numrepr():
853853
}
854854
numbers = StrRepr(Int(Counter(d.timestamp() for d in data)), pattern='d')
855855
pattern = DateTime.from_numbers(numbers)
856-
assert pattern == StrRepr(NumRepr(DateTime(Counter(data)), pattern=Int), pattern='d')
856+
assert pattern == StrRepr(NumRepr(DateTime(Counter(data)),
857+
pattern=(Int, 1, 0)), pattern='d')
857858
pattern.validate('1000')
858859
with pytest.raises(ValueError):
859860
pattern.validate('2000000000')
@@ -862,7 +863,8 @@ def test_datetime_strrepr_numrepr():
862863

863864
numbers = StrRepr(Float(Counter(d.timestamp() for d in data)), pattern='f')
864865
pattern = DateTime.from_numbers(numbers)
865-
assert pattern == StrRepr(NumRepr(DateTime(Counter(data)), pattern=Float), pattern='f')
866+
assert pattern == StrRepr(NumRepr(DateTime(Counter(data)),
867+
pattern=(Float, 1, 0)), pattern='f')
866868
pattern.validate('1000')
867869
pattern.validate('1000.0')
868870
with pytest.raises(ValueError):

0 commit comments

Comments
 (0)