def test_dehydration_2d(self): coordinates = (.1, 0) p = CartesianPoint(coordinates) dehydrator = DataDehydrator() buffer = io.BytesIO() packer = Packer(buffer) packer.pack(dehydrator.dehydrate((p, ))[0]) self.assertEqual( buffer.getvalue(), b"\xB3X" + b"\xC9" + struct.pack(">h", 7203) + b"".join( map(lambda c: b"\xC1" + struct.pack(">d", c), coordinates)))
def test_dehydration_3d(self): coordinates = (1, -2, 3.1) p = WGS84Point(coordinates) dehydrator = DataDehydrator() buffer = io.BytesIO() packer = Packer(buffer) packer.pack(dehydrator.dehydrate((p, ))[0]) self.assertEqual( buffer.getvalue(), b"\xB4Y" + b"\xC9" + struct.pack(">h", 4979) + b"".join( map(lambda c: b"\xC1" + struct.pack(">d", c), coordinates)))
def test_dehydration(self): MyPoint = point_type("MyPoint", ["x", "y"], {2: 1234}) coordinates = (.1, 0) p = MyPoint(coordinates) dehydrator = DataDehydrator() buffer = io.BytesIO() packer = Packer(buffer) packer.pack(dehydrator.dehydrate((p, ))[0]) self.assertEqual( buffer.getvalue(), b"\xB3X" + b"\xC9" + struct.pack(">h", 1234) + b"".join( map(lambda c: b"\xC1" + struct.pack(">d", c), coordinates)))
def assert_packable(cls, value, packed_value): stream_out = BytesIO() packer = Packer(stream_out) packer.pack(value) packed = stream_out.getvalue() try: assert packed == packed_value except AssertionError: raise AssertionError("Packed value %r is %r instead of expected %r" % (value, packed, packed_value)) unpacked = Unpacker(UnpackableBuffer(packed)).unpack() try: assert unpacked == value except AssertionError: raise AssertionError("Unpacked value %r is not equal to original %r" % (unpacked, value))
def test_list_stream(self): packed_value = b"\xD7\x01\x02\x03\xDF" unpacked_value = [1, 2, 3] stream_out = BytesIO() packer = Packer(stream_out) packer.pack_list_stream_header() packer.pack(1) packer.pack(2) packer.pack(3) packer.pack_end_of_stream() packed = stream_out.getvalue() try: assert packed == packed_value except AssertionError: raise AssertionError("Packed value is %r instead of expected %r" % (packed, packed_value)) unpacked = Unpacker(UnpackableBuffer(packed)).unpack() try: assert unpacked == unpacked_value except AssertionError: raise AssertionError("Unpacked value %r is not equal to expected %r" % (unpacked, unpacked_value))
def test_map_stream(self): packed_value = b"\xDB\x81A\x01\x81B\x02\xDF" unpacked_value = {u"A": 1, u"B": 2} stream_out = BytesIO() packer = Packer(stream_out) packer.pack_map_stream_header() packer.pack(u"A") packer.pack(1) packer.pack(u"B") packer.pack(2) packer.pack_end_of_stream() packed = stream_out.getvalue() try: assert packed == packed_value except AssertionError: raise AssertionError("Packed value is %r instead of expected %r" % (packed, packed_value)) unpacked = Unpacker(UnpackableBuffer(packed)).unpack() try: assert unpacked == unpacked_value except AssertionError: raise AssertionError("Unpacked value %r is not equal to expected %r" % (unpacked, unpacked_value))
def packb(cls, *values): stream = BytesIO() packer = Packer(stream) for value in values: packer.pack(value) return stream.getvalue()
def encode_message(cls, tag, *fields): b = BytesIO() packer = Packer(b) for field in fields: packer.pack(field) return bytearray([0xB0 + len(fields), tag]) + b.getvalue()