Пример #1
0
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''
Пример #2
0
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''
Пример #3
0
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))
Пример #4
0
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))
Пример #5
0
def test_map_header():
    packer = Packer()
    packer.pack_map_header(2**32 - 1)
    with pytest.raises(PackValueError):
        packer.pack_array_header(2**32)
Пример #6
0
def test_map_header():
    packer = Packer()
    packer.pack_map_header(2**32-1)
    with pytest.raises((OverflowError, ValueError)):
        packer.pack_array_header(2**32)
Пример #7
0
def test_map_header():
    packer = Packer()
    packer.pack_map_header(2**32 - 1)
    with pytest.raises((OverflowError, ValueError)):
        packer.pack_array_header(2**32)
Пример #8
0
def test_map_header():
    packer = Packer()
    packer.pack_map_header(2**32-1)
    with pytest.raises(PackValueError):
        packer.pack_array_header(2**32)
Пример #9
0
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))