def test_ext_exceptions(self): with self.assertRaises(TypeError): _ = umsgpack.Ext(-1, b"") with self.assertRaises(TypeError): _ = umsgpack.Ext(128, b"") with self.assertRaises(TypeError): _ = umsgpack.Ext(0, u"unicode string")
def test_ext_exceptions(self): try: _ = umsgpack.Ext(-1, b"") except Exception as e: self.assertTrue(isinstance(e, TypeError)) try: _ = umsgpack.Ext(128, b"") except Exception as e: self.assertTrue(isinstance(e, TypeError)) try: _ = umsgpack.Ext(0, u"unicode string") except Exception as e: self.assertTrue(isinstance(e, TypeError))
def test_ext_exceptions(self): # Test invalid Ext type type with self.assertRaises(TypeError): _ = umsgpack.Ext(5.0, b"") # Test invalid data type with self.assertRaises(TypeError): _ = umsgpack.Ext(0, u"unicode string") # Test out of range Ext type value with self.assertRaises(ValueError): _ = umsgpack.Ext(-129, b"data") with self.assertRaises(ValueError): _ = umsgpack.Ext(128, b"data")
def pack_numpy_array(x): if x.dtype == np.float64: x = x.astype(np.float32) typename, extcode = threejs_type(x.dtype) return { u"itemSize": item_size(x), u"type": typename, u"array": umsgpack.Ext(extcode, x.tobytes('F')), u"normalized": False }
def _ext_encoder(self, obj, obj_encoded, ext_handlers): """ Classes metadata default encoder. """ encoded = {} # encode module and class name if no id encoded[self.MODULE_NAME] = obj.__class__.__module__ encoded[self.CLASS_NAME] = obj.__class__.__qualname__ encoded[self.CLASS_DATA] = obj_encoded return umsgpack.Ext(0, umsgpack.packb(encoded, ext_handlers=ext_handlers))
def from_stream(f): if isinstance(f, BytesIO): arr = np.frombuffer(f.read(), dtype=np.uint8) elif isinstance(f, StringIO): arr = np.frombuffer(bytes(f.read(), "utf-8"), dtype=np.uint8) else: raise ValueError( 'Stream must be instance of StringIO or BytesIO, not {}'. format(type(f))) _, extcode = threejs_type(np.uint8) encoded = umsgpack.Ext(extcode, arr.tobytes()) return MeshGeometry(encoded, u"stl")
def test_ext_handlers_subclass(self): class Rectangle: def __init__(self, length, width): self.length = length self.width = width def __eq__(self, other): return self.length == other.length and self.width == other.width class Square(Rectangle): def __init__(self, width): Rectangle.__init__(self, width, width) # Test pack (packs base class) packed = umsgpack.packb(Square(5), ext_handlers={ Rectangle: lambda obj: umsgpack.Ext(0x10, umsgpack.packb([obj.length, obj.width])), }) self.assertEqual(packed, b"\xc7\x03\x10\x92\x05\x05") # Test unpack (unpacks base class) unpacked = umsgpack.unpackb(packed, ext_handlers={ 0x10: lambda ext: Rectangle(*umsgpack.unpackb(ext.data)), }) self.assertEqual(unpacked, Rectangle(5, 5))
b"\xd9\x28\xd0\x9f\xd0\xbe\x20\xd0\xbe\xd0\xb6\xd0\xb8\xd0\xb2\xd0\xbb\xd1\x91\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xbc\x20\xd0\xb1\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb0\xd0\xbc" ], # 8-bit Binary ["8-bit binary", b"\x80" * 1, b"\xc4\x01" + b"\x80" * 1], ["8-bit binary", b"\x80" * 32, b"\xc4\x20" + b"\x80" * 32], ["8-bit binary", b"\x80" * 255, b"\xc4\xff" + b"\x80" * 255], # 16-bit Binary ["16-bit binary", b"\x80" * 256, b"\xc5\x01\x00" + b"\x80" * 256], # 32-bit Binary [ "32-bit binary", b"\x80" * 65536, b"\xc6\x00\x01\x00\x00" + b"\x80" * 65536 ], # Fixext 1 ["fixext 1", umsgpack.Ext(0x05, b"\x80" * 1), b"\xd4\x05" + b"\x80" * 1], # Fixext 2 ["fixext 2", umsgpack.Ext(0x05, b"\x80" * 2), b"\xd5\x05" + b"\x80" * 2], # Fixext 4 ["fixext 4", umsgpack.Ext(0x05, b"\x80" * 4), b"\xd6\x05" + b"\x80" * 4], # Fixext 8 ["fixext 8", umsgpack.Ext(0x05, b"\x80" * 8), b"\xd7\x05" + b"\x80" * 8], # Fixext 16 [ "fixext 16", umsgpack.Ext(0x05, b"\x80" * 16), b"\xd8\x05" + b"\x80" * 16 ], # 8-bit Ext
# 32-bit String ["32-bit string", u"b" * 65536, b"\xdb\x00\x01\x00\x00" + b"b" * 65536], # Wide character String ["wide char string", u"Allagbé", b"\xa8Allagb\xc3\xa9"], ["wide char string", u"По оживлённым берегам", b"\xd9\x28\xd0\x9f\xd0\xbe\x20\xd0\xbe\xd0\xb6\xd0\xb8\xd0\xb2\xd0\xbb\xd1\x91\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xbc\x20\xd0\xb1\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb0\xd0\xbc"], # 8-bit Binary ["8-bit binary", b"\x80" * 1, b"\xc4\x01" + b"\x80" * 1], ["8-bit binary", b"\x80" * 32, b"\xc4\x20" + b"\x80" * 32], ["8-bit binary", b"\x80" * 255, b"\xc4\xff" + b"\x80" * 255], # 16-bit Binary ["16-bit binary", b"\x80" * 256, b"\xc5\x01\x00" + b"\x80" * 256], # 32-bit Binary ["32-bit binary", b"\x80" * 65536, b"\xc6\x00\x01\x00\x00" + b"\x80" * 65536], # Fixext 1 ["fixext 1", umsgpack.Ext(0x05, b"\x80" * 1), b"\xd4\x05" + b"\x80" * 1], # Fixext 2 ["fixext 2", umsgpack.Ext(0x05, b"\x80" * 2), b"\xd5\x05" + b"\x80" * 2], # Fixext 4 ["fixext 4", umsgpack.Ext(0x05, b"\x80" * 4), b"\xd6\x05" + b"\x80" * 4], # Fixext 8 ["fixext 8", umsgpack.Ext(0x05, b"\x80" * 8), b"\xd7\x05" + b"\x80" * 8], # Fixext 16 ["fixext 16", umsgpack.Ext(0x05, b"\x80" * 16), b"\xd8\x05" + b"\x80" * 16], # 8-bit Ext ["8-bit ext", umsgpack.Ext(0x05, b"\x80" * 255), b"\xc7\xff\x05" + b"\x80" * 255], # 16-bit Ext ["16-bit ext", umsgpack.Ext(0x05, b"\x80" * 256), b"\xc8\x01\x00\x05" + b"\x80" * 256],
def from_file(fname): with open(fname, "rb") as f: arr = np.frombuffer(f.read(), dtype=np.uint8) _, extcode = threejs_type(np.uint8) encoded = umsgpack.Ext(extcode, arr.tobytes()) return MeshGeometry(encoded, u"stl")
def from_datetime(self, dt): return umsgpack.Ext(0x20, dt.strftime(self.datetime_fmt).encode())
def from_date(self, date): return umsgpack.Ext(0x10, date.isoformat().encode())
[ "16-bit string", u"c"*65535, b"\xda\xff\xff" + b"c"*65535 ], # 32-bit String [ "32-bit string", u"b"*65536, b"\xdb\x00\x01\x00\x00" + b"b"*65536 ], # Wide character String [ "wide char string", u"Allagbé", b"\xa8Allagb\xc3\xa9" ], [ "wide char string", u"По оживлённым берегам", b"\xd9\x28\xd0\x9f\xd0\xbe\x20\xd0\xbe\xd0\xb6\xd0\xb8\xd0\xb2\xd0\xbb\xd1\x91\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xbc\x20\xd0\xb1\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb0\xd0\xbc" ], # 8-bit Binary [ "8-bit binary", b"\x80"*1, b"\xc4\x01" + b"\x80"*1 ], [ "8-bit binary", b"\x80"*32, b"\xc4\x20" + b"\x80"*32 ], [ "8-bit binary", b"\x80"*255, b"\xc4\xff" + b"\x80"*255 ], # 16-bit Binary [ "16-bit binary", b"\x80"*256, b"\xc5\x01\x00" + b"\x80"*256 ], # 32-bit Binary [ "32-bit binary", b"\x80"*65536, b"\xc6\x00\x01\x00\x00" + b"\x80"*65536 ], # Fixext 1 [ "fixext 1", umsgpack.Ext(0x05, b"\x80"*1), b"\xd4\x05" + b"\x80"*1 ], # Fixext 2 [ "fixext 2", umsgpack.Ext(0x05, b"\x80"*2), b"\xd5\x05" + b"\x80"*2 ], # Fixext 4 [ "fixext 4", umsgpack.Ext(0x05, b"\x80"*4), b"\xd6\x05" + b"\x80"*4 ], # Fixext 8 [ "fixext 8", umsgpack.Ext(0x05, b"\x80"*8), b"\xd7\x05" + b"\x80"*8 ], # Fixext 16 [ "fixext 16", umsgpack.Ext(0x05, b"\x80"*16), b"\xd8\x05" + b"\x80"*16 ], # 8-bit Ext [ "8-bit ext", umsgpack.Ext(0x05, b"\x80"*255), b"\xc7\xff\x05" + b"\x80"*255 ], # 16-bit Ext [ "16-bit ext", umsgpack.Ext(0x05, b"\x80"*256), b"\xc8\x01\x00\x05" + b"\x80"*256 ], # 32-bit Ext [ "32-bit ext", umsgpack.Ext(0x05, b"\x80"*65536), b"\xc9\x00\x01\x00\x00\x05" + b"\x80"*65536 ], # Empty Array