def test_manualreset(sizes=[0, 5, 50, 1000]): packer = Packer(autoreset=False) for size in sizes: packer.pack_array_header(size) for i in range(size): packer.pack(i) bio = BytesIO(packer.bytes()) unpacker = Unpacker(bio, use_list=1) for size in sizes: assert unpacker.unpack() == list(range(size)) packer.reset() assert packer.bytes() == b''
def test_manualreset(sizes=[0, 5, 50, 1000]): packer = Packer(autoreset=False) for size in sizes: packer.pack_array_header(size) for i in range(size): packer.pack(i) bio = BytesIO(packer.bytes()) unpacker = Unpacker(bio, use_list=1) for size in sizes: assert unpacker.unpack() == list(range(size)) packer.reset() assert packer.bytes() == b''
def testArraySize(sizes=[0, 5, 50, 1000]): bio = BytesIO() packer = Packer() for size in sizes: bio.write(packer.pack_array_header(size)) for i in range(size): bio.write(packer.pack(i)) bio.seek(0) unpacker = Unpacker(bio, use_list=1) for size in sizes: assert unpacker.unpack() == list(range(size))
def testArraySize(sizes=[0, 5, 50, 1000]): bio = BytesIO() packer = Packer() for size in sizes: bio.write(packer.pack_array_header(size)) for i in range(size): bio.write(packer.pack(i)) bio.seek(0) unpacker = Unpacker(bio, use_list=1) for size in sizes: assert unpacker.unpack() == list(range(size))
def test_map_header(): packer = Packer() packer.pack_map_header(2**32 - 1) with pytest.raises(PackValueError): packer.pack_array_header(2**32)
def test_map_header(): packer = Packer() packer.pack_map_header(2**32-1) with pytest.raises((OverflowError, ValueError)): packer.pack_array_header(2**32)
def test_map_header(): packer = Packer() packer.pack_map_header(2**32 - 1) with pytest.raises((OverflowError, ValueError)): packer.pack_array_header(2**32)
def test_map_header(): packer = Packer() packer.pack_map_header(2**32-1) with pytest.raises(PackValueError): packer.pack_array_header(2**32)
class MsgpackWriter(object): def __init__(self, f): self.f = f self.packer = Packer() def pack(self, obj): self.f.write(self.packer.pack(obj)) def write_document(self, doc): """ Writes a complete EXML document :param doc Document: the document to write """ packer = self.packer self.f.write( packer.pack_array_header(3) + packer.pack('exml1')) self.write_schema(doc) self.write_chunks(doc) def write_schema(self, doc): """ Writes the schema part of an EXML document :param doc: the document to write :type doc Document: """ d = {} d['word'] = schema_to_dict(doc.t_schema) for schema in doc.schemas: d[schema.name] = schema_to_dict(schema) self.pack(d) def write_chunks(self, doc): self.f.write(self.packer.pack_array_header(1)) self.write_chunk(doc, 0, None) def write_chunk(self, doc, start, end): if end is None: end = len(doc.words) self.f.write(self.packer.pack_array_header(2)) # write terminals self.pack(objects_to_packed(doc, doc.w_objs, doc.t_schema, False)) self.write_markables(doc) def write_markables(self, doc): markables_by_layer = defaultdict(list) for posn in sorted(doc.markables_by_start): for (mlevel, obj) in doc.markables_by_start[posn]: markables_by_layer[mlevel.name].append(obj) ne_levels = [] for schema in doc.schemas: if schema.name not in markables_by_layer: continue ne_levels.append(schema.name) self.f.write(self.packer.pack_map_header(len(ne_levels))) for schema in doc.schemas: if schema.name not in markables_by_layer: continue objs = markables_by_layer[schema.name] self.pack(schema.name) self.pack(objects_to_packed(doc, objs, schema, True))