Exemplo n.º 1
0
 def _afc_length_prefixed(self, file_handle, approx_block_size,
                          length_prefixed):
     records = []
     this_block_size = 0
     for record in read_length_prefixed(file_handle, length_prefixed):
         records.append(record)
         this_block_size += len(record)
         if this_block_size >= approx_block_size:
             self.add_data_block(records)
             records = []
             this_block_size = 0
     if records:
         self.add_data_block(records)
Exemplo n.º 2
0
def check_letters_zs(z, codec_shorthand):
    assert isinstance(z.root_index_offset, integer_types)
    assert isinstance(z.root_index_length, integer_types)
    assert isinstance(z.total_file_length, integer_types)
    assert z.codec == codec_shorthands[codec_shorthand]
    assert z.data_sha256 == letters_sha256
    assert z.metadata == {
        u"test-data": u"letters",
        u"build-info": {
            u"user": u"test-user",
            u"host": u"test-host",
            u"time": u"2000-01-01T00:00:00.000000Z",
            u"version": u"zs test",
            },
        }
    assert isinstance(z.root_index_level, integer_types)

    assert list(z) == letters_records
    assert list(z.search()) == letters_records

    if "ZS_QUICK_TEST" in os.environ:
        chars = "m"
    else:
        chars = "abcdefghijklmnopqrstuvwxyz"
    for char in chars:
        byte = char.encode("ascii")
        for (start, stop, prefix) in [
                (None, None, None),
                (byte, None, None),
                (None, byte, None),
                (None, None, byte),
                (byte, byte, None),
                (byte, int2byte(byte2int(byte) + 1), None),
                (byte, int2byte(byte2int(byte) + 2), None),
                (byte, int2byte(byte2int(byte) + 3), None),
                (byte, b"q", None),
                (None, 2 * byte, byte),
                (b"m", b"s", byte),
                ]:
            print("start=%r, stop=%r, prefix=%r" % (start, stop, prefix))
            expected = letters_records
            if start is not None:
                expected = [r for r in expected if r >= start]
            if stop is not None:
                expected = [r for r in expected if not r >= stop]
            if prefix is not None:
                expected = [r for r in expected if r.startswith(prefix)]
            assert list(z.search(start=start, stop=stop, prefix=prefix)
                        ) == expected

            map_blocks = list(z.block_map(
                _check_map_helper,
                # test args and kwargs argument passing
                args=(1,), kwargs={"arg2": 2},
                start=start, stop=stop, prefix=prefix))
            assert sum(map_blocks, []) == expected

            for term in [b"\n", b"\x00"]:
                expected_dump = term.join(expected + [b""])
                out = BytesIO()
                z.dump(out, start=start, stop=stop, prefix=prefix,
                       terminator=term)
                assert out.getvalue() == expected_dump
            out = BytesIO()
            z.dump(out, start=start, stop=stop, prefix=prefix,
                   length_prefixed="uleb128")
            assert (list(read_length_prefixed(BytesIO(out.getvalue()), "uleb128"))
                    == expected)
            out = BytesIO()
            z.dump(out, start=start, stop=stop, prefix=prefix,
                   length_prefixed="u64le")
            assert (list(read_length_prefixed(BytesIO(out.getvalue()), "u64le"))
                    == expected)

    assert list(z.search(stop=b"bb", prefix=b"b")) == [b"b"]

    assert_raises(ValueError, list,
                  z.block_map(_check_raise_helper, args=(ValueError,)))
    assert_raises(ValueError, z.block_exec,
                  _check_raise_helper, args=(ValueError,))

    z.validate()