Skip to content

Commit

Permalink
interval: display weeks in str and repr
Browse files Browse the repository at this point in the history
  • Loading branch information
DifferentialOrange committed Jul 17, 2023
1 parent 4ad76aa commit a668059
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed
- `tarantool.Interval` arithmetic with weeks
- `tarantool.Interval` weeks display in `str()` and `repr()`

## 1.1.0 - 2023-06-30

Expand Down
4 changes: 2 additions & 2 deletions tarantool/msgpack_ext/types/interval.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,8 @@ def __eq__(self, other):
return True

def __repr__(self):
return f'tarantool.Interval(year={self.year}, month={self.month}, day={self.day}, ' + \
f'hour={self.hour}, minute={self.minute}, sec={self.sec}, ' + \
return f'tarantool.Interval(year={self.year}, month={self.month}, week={self.week}, ' + \
f'day={self.day}, hour={self.hour}, minute={self.minute}, sec={self.sec}, ' + \
f'nsec={self.nsec}, adjust={self.adjust})'

__str__ = __repr__
38 changes: 38 additions & 0 deletions test/suites/test_interval.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,42 +71,58 @@ def test_interval_positional_init(self):
'python': tarantool.Interval(year=1),
'msgpack': (b'\x02\x00\x01\x08\x01'),
'tarantool': r"datetime.interval.new({year=1})",
'str': 'tarantool.Interval(year=1, month=0, week=0, day=0, hour=0, '
'minute=0, sec=0, nsec=0, adjust=Adjust.NONE)',
},
'big_year': {
'python': tarantool.Interval(year=1000),
'msgpack': (b'\x02\x00\xcd\x03\xe8\x08\x01'),
'tarantool': r"datetime.interval.new({year=1000})",
'str': 'tarantool.Interval(year=1000, month=0, week=0, day=0, hour=0, '
'minute=0, sec=0, nsec=0, adjust=Adjust.NONE)',
},
'date': {
'python': tarantool.Interval(year=1, month=2, day=3),
'msgpack': (b'\x04\x00\x01\x01\x02\x03\x03\x08\x01'),
'tarantool': r"datetime.interval.new({year=1, month=2, day=3})",
'str': 'tarantool.Interval(year=1, month=2, week=0, day=3, hour=0, '
'minute=0, sec=0, nsec=0, adjust=Adjust.NONE)',
},
'big_month_date': {
'python': tarantool.Interval(year=1, month=100000, day=3),
'msgpack': (b'\x04\x00\x01\x01\xce\x00\x01\x86\xa0\x03\x03\x08\x01'),
'tarantool': r"datetime.interval.new({year=1, month=100000, day=3})",
'str': 'tarantool.Interval(year=1, month=100000, week=0, day=3, hour=0, '
'minute=0, sec=0, nsec=0, adjust=Adjust.NONE)',
},
'time': {
'python': tarantool.Interval(hour=1, minute=2, sec=3),
'msgpack': (b'\x04\x04\x01\x05\x02\x06\x03\x08\x01'),
'tarantool': r"datetime.interval.new({hour=1, min=2, sec=3})",
'str': 'tarantool.Interval(year=0, month=0, week=0, day=0, hour=1, '
'minute=2, sec=3, nsec=0, adjust=Adjust.NONE)',
},
'big_seconds_time': {
'python': tarantool.Interval(hour=1, minute=2, sec=3000),
'msgpack': (b'\x04\x04\x01\x05\x02\x06\xcd\x0b\xb8\x08\x01'),
'tarantool': r"datetime.interval.new({hour=1, min=2, sec=3000})",
'str': 'tarantool.Interval(year=0, month=0, week=0, day=0, hour=1, '
'minute=2, sec=3000, nsec=0, adjust=Adjust.NONE)',
},
'datetime': {
'python': tarantool.Interval(year=1, month=2, day=3, hour=1, minute=2, sec=3000),
'msgpack': (b'\x07\x00\x01\x01\x02\x03\x03\x04\x01\x05\x02\x06\xcd\x0b\xb8\x08\x01'),
'tarantool': r"datetime.interval.new({year=1, month=2, day=3, hour=1, "
r"min=2, sec=3000})",
'str': 'tarantool.Interval(year=1, month=2, week=0, day=3, hour=1, '
'minute=2, sec=3000, nsec=0, adjust=Adjust.NONE)',
},
'nanoseconds': {
'python': tarantool.Interval(nsec=10000000),
'msgpack': (b'\x02\x07\xce\x00\x98\x96\x80\x08\x01'),
'tarantool': r"datetime.interval.new({nsec=10000000})",
'str': 'tarantool.Interval(year=0, month=0, week=0, day=0, hour=0, '
'minute=0, sec=0, nsec=10000000, adjust=Adjust.NONE)',
},
'datetime_with_nanoseconds': {
'python': tarantool.Interval(year=1, month=2, day=3, hour=1, minute=2,
Expand All @@ -115,6 +131,8 @@ def test_interval_positional_init(self):
b'\x00\x98\x96\x80\x08\x01'),
'tarantool': r"datetime.interval.new({year=1, month=2, day=3, hour=1, "
r"min=2, sec=3000, nsec=10000000})",
'str': 'tarantool.Interval(year=1, month=2, week=0, day=3, hour=1, '
'minute=2, sec=3000, nsec=10000000, adjust=Adjust.NONE)',
},
'datetime_none_adjust': {
'python': tarantool.Interval(year=1, month=2, day=3, hour=1, minute=2,
Expand All @@ -124,6 +142,8 @@ def test_interval_positional_init(self):
b'\x00\x98\x96\x80\x08\x01'),
'tarantool': r"datetime.interval.new({year=1, month=2, day=3, hour=1, "
r"min=2, sec=3000, nsec=10000000, adjust='none'})",
'str': 'tarantool.Interval(year=1, month=2, week=0, day=3, hour=1, '
'minute=2, sec=3000, nsec=10000000, adjust=Adjust.NONE)',
},
'datetime_excess_adjust': {
'python': tarantool.Interval(year=1, month=2, day=3, hour=1, minute=2,
Expand All @@ -133,6 +153,8 @@ def test_interval_positional_init(self):
b'\x00\x98\x96\x80'),
'tarantool': r"datetime.interval.new({year=1, month=2, day=3, hour=1, "
r"min=2, sec=3000, nsec=10000000, adjust='excess'})",
'str': 'tarantool.Interval(year=1, month=2, week=0, day=3, hour=1, '
'minute=2, sec=3000, nsec=10000000, adjust=Adjust.EXCESS)',
},
'datetime_last_adjust': {
'python': tarantool.Interval(year=1, month=2, day=3, hour=1, minute=2,
Expand All @@ -142,21 +164,29 @@ def test_interval_positional_init(self):
b'\x00\x98\x96\x80\x08\x02'),
'tarantool': r"datetime.interval.new({year=1, month=2, day=3, hour=1, "
r"min=2, sec=3000, nsec=10000000, adjust='last'})",
'str': 'tarantool.Interval(year=1, month=2, week=0, day=3, hour=1, '
'minute=2, sec=3000, nsec=10000000, adjust=Adjust.LAST)',
},
'all_zeroes': {
'python': tarantool.Interval(adjust=tarantool.IntervalAdjust.EXCESS),
'msgpack': (b'\x00'),
'tarantool': r"datetime.interval.new({adjust='excess'})",
'str': 'tarantool.Interval(year=0, month=0, week=0, day=0, hour=0, '
'minute=0, sec=0, nsec=0, adjust=Adjust.EXCESS)',
},
'weeks': {
'python': tarantool.Interval(week=3),
'msgpack': (b'\x02\x02\x03\x08\x01'),
'tarantool': r"datetime.interval.new({week=3})",
'str': 'tarantool.Interval(year=0, month=0, week=3, day=0, hour=0, '
'minute=0, sec=0, nsec=0, adjust=Adjust.NONE)',
},
'date_with_week': {
'python': tarantool.Interval(year=1, month=2, week=3, day=4),
'msgpack': (b'\x05\x00\x01\x01\x02\x02\x03\x03\x04\x08\x01'),
'tarantool': r"datetime.interval.new({year=1, month=2, week=3, day=4})",
'str': 'tarantool.Interval(year=1, month=2, week=3, day=4, hour=0, '
'minute=0, sec=0, nsec=0, adjust=Adjust.NONE)',
},
'datetime_with_week': {
'python': tarantool.Interval(year=1, month=2, week=3, day=4, hour=1, minute=2,
Expand All @@ -165,6 +195,8 @@ def test_interval_positional_init(self):
b'\x07\xce\x00\x98\x96\x80\x08\x01'),
'tarantool': r"datetime.interval.new({year=1, month=2, week=3, day=4, hour=1, "
r"min=2, sec=3000, nsec=10000000})",
'str': 'tarantool.Interval(year=1, month=2, week=3, day=4, hour=1, '
'minute=2, sec=3000, nsec=10000000, adjust=Adjust.NONE)',
},
}

Expand Down Expand Up @@ -216,6 +248,12 @@ def test_tarantool_encode(self):

self.assertSequenceEqual(self.adm(lua_eval), [True])

def test_class_string(self):
for name, case in self.cases.items():
with self.subTest(msg=name):
self.assertEqual(str(case['python']), case['str'])
self.assertEqual(repr(case['python']), case['str'])

def test_unknown_field_decode(self):
case = b'\x01\x09\xce\x00\x98\x96\x80'
self.assertRaisesRegex(
Expand Down

0 comments on commit a668059

Please sign in to comment.