def test_deserialize_closed_range(self): serialized = (int8_pack(1) + int64_pack(self.timestamp) + int8_pack(2) + int64_pack(self.timestamp) + int8_pack(6)) self.assertEqual( DateRangeType.deserialize(serialized, 5), util.DateRange(lower_bound=util.DateRangeBound( value=datetime.datetime(2017, 2, 1, 0, 0), precision='DAY'), upper_bound=util.DateRangeBound( value=datetime.datetime(2017, 2, 1, 15, 42, 12, 404000), precision='MILLISECOND')))
def test_serialize_closed_range(self): serialized = (int8_pack(1) + int64_pack(self.timestamp) + int8_pack(5) + int64_pack(self.timestamp) + int8_pack(0)) deserialized = DateRangeType.deserialize(serialized, 5) self.assertEqual( deserialized, util.DateRange(lower_bound=util.DateRangeBound( value=datetime.datetime(2017, 2, 1, 15, 42, 12), precision='SECOND'), upper_bound=util.DateRangeBound( value=datetime.datetime(2017, 12, 31), precision='YEAR')))
def test_deserialize_single_value(self): serialized = (int8_pack(0) + int64_pack(self.timestamp) + int8_pack(3)) self.assertEqual( DateRangeType.deserialize(serialized, 5), util.DateRange(value=util.DateRangeBound(value=datetime.datetime( 2017, 2, 1, 15, 42, 12, 404000), precision='HOUR')))
def test_serialize_open_low(self): serialized = (int8_pack(2) + int64_pack(self.timestamp) + int8_pack(3)) deserialized = DateRangeType.deserialize(serialized, 5) self.assertEqual( deserialized, util.DateRange(lower_bound=util.DateRangeBound( value=datetime.datetime(2017, 2, 1, 15), precision='HOUR'), upper_bound=util.OPEN_BOUND))
def test_serialize_single_value(self): serialized = (int8_pack(0) + int64_pack(self.timestamp) + int8_pack(5)) deserialized = DateRangeType.deserialize(serialized, 5) self.assertEqual( deserialized, util.DateRange(value=util.DateRangeBound(value=datetime.datetime( 2017, 2, 1, 15, 42, 12), precision='SECOND')))
def test_deserialize_open_low(self): serialized = (int8_pack(3) + int64_pack(self.timestamp) + int8_pack(4)) deserialized = DateRangeType.deserialize(serialized, 5) self.assertEqual( deserialized, util.DateRange(lower_bound=util.OPEN_BOUND, upper_bound=util.DateRangeBound( value=datetime.datetime(2017, 2, 1, 15, 42, 20, 1000), precision='MINUTE')))
def deserialize(cls, byts, protocol_version): # <type>[<time0><precision0>[<time1><precision1>]] type_ = int8_unpack(byts[0:1]) if type_ in (BoundKind.to_int(BoundKind.BOTH_OPEN_RANGE), BoundKind.to_int(BoundKind.SINGLE_DATE_OPEN)): time0 = precision0 = None else: time0 = int64_unpack(byts[1:9]) precision0 = int8_unpack(byts[9:10]) if type_ == BoundKind.to_int(BoundKind.CLOSED_RANGE): time1 = int64_unpack(byts[10:18]) precision1 = int8_unpack(byts[18:19]) else: time1 = precision1 = None if time0 is not None: date_range_bound0 = util.DateRangeBound( time0, cls._decode_precision(precision0)) if time1 is not None: date_range_bound1 = util.DateRangeBound( time1, cls._decode_precision(precision1)) if type_ == BoundKind.to_int(BoundKind.SINGLE_DATE): return util.DateRange(value=date_range_bound0) if type_ == BoundKind.to_int(BoundKind.CLOSED_RANGE): return util.DateRange(lower_bound=date_range_bound0, upper_bound=date_range_bound1) if type_ == BoundKind.to_int(BoundKind.OPEN_RANGE_HIGH): return util.DateRange(lower_bound=date_range_bound0, upper_bound=util.OPEN_BOUND) if type_ == BoundKind.to_int(BoundKind.OPEN_RANGE_LOW): return util.DateRange(lower_bound=util.OPEN_BOUND, upper_bound=date_range_bound0) if type_ == BoundKind.to_int(BoundKind.BOTH_OPEN_RANGE): return util.DateRange(lower_bound=util.OPEN_BOUND, upper_bound=util.OPEN_BOUND) if type_ == BoundKind.to_int(BoundKind.SINGLE_DATE_OPEN): return util.DateRange(value=util.OPEN_BOUND) raise ValueError('Could not deserialize %r' % (byts, ))