def serialize(cls, v, protocol_version): buf = io.BytesIO() bound_kind, bounds = None, () try: value = v.value except AttributeError: raise ValueError( '%s.serialize expects an object with a value attribute; got' '%r' % (cls.__name__, v) ) if value is None: try: lower_bound, upper_bound = v.lower_bound, v.upper_bound except AttributeError: raise ValueError( '%s.serialize expects an object with lower_bound and ' 'upper_bound attributes; got %r' % (cls.__name__, v) ) if lower_bound == util.OPEN_BOUND and upper_bound == util.OPEN_BOUND: bound_kind = BoundKind.BOTH_OPEN_RANGE elif lower_bound == util.OPEN_BOUND: bound_kind = BoundKind.OPEN_RANGE_LOW bounds = (upper_bound,) elif upper_bound == util.OPEN_BOUND: bound_kind = BoundKind.OPEN_RANGE_HIGH bounds = (lower_bound,) else: bound_kind = BoundKind.CLOSED_RANGE bounds = lower_bound, upper_bound else: # value is not None if value == util.OPEN_BOUND: bound_kind = BoundKind.SINGLE_DATE_OPEN else: bound_kind = BoundKind.SINGLE_DATE bounds = (value,) if bound_kind is None: raise ValueError( 'Cannot serialize %r; could not find bound kind' % (v,) ) buf.write(int8_pack(BoundKind.to_int(bound_kind))) for bound in bounds: buf.write(int64_pack(bound.milliseconds)) buf.write(int8_pack(cls._encode_precision(bound.precision))) return buf.getvalue()
def serialize(v, protocol_version): try: # v is datetime timestamp_seconds = calendar.timegm(v.utctimetuple()) timestamp = timestamp_seconds * 1e3 + getattr(v, 'microsecond', 0) / 1e3 except AttributeError: try: timestamp = calendar.timegm(v.timetuple()) * 1e3 except AttributeError: # Ints and floats are valid timestamps too if type(v) not in _number_types: raise TypeError('DateType arguments must be a datetime, date, or timestamp') timestamp = v return int64_pack(long(timestamp))
def serialize(val, protocol_version): try: nano = val.nanosecond_time except AttributeError: nano = util.Time(val).nanosecond_time return int64_pack(nano)
def serialize(byts, protocol_version): return int64_pack(byts)