Esempio n. 1
0
 def _write_after(self) -> None:
     super()._write_after()
     self.fileobj.seek(self._fileobj_blocks_end_pos)
     self.fileobj.truncate()
     self.fileobj.write(
         create_xz_index_footer(
             self.check,
             [(block.unpadded_size, block.uncompressed_size)
              for block in self._fileobjs.values()],
         ))
Esempio n. 2
0
 def __init__(
     self,
     fileobj: IOAbstract,
     check: int,
     unpadded_size: int,
     uncompressed_size: int,
 ) -> None:
     self.length = uncompressed_size
     self.fileobj = IOCombiner(
         IOStatic(create_xz_header(check)),
         fileobj,
         IOStatic(
             create_xz_index_footer(check,
                                    [(unpadded_size, uncompressed_size)])),
     )
     self.reset()
Esempio n. 3
0
def fileobj() -> BinaryIO:
    # create xz raw data composed of many identical blocks
    nb_blocks = 50

    seed(0)
    data = compress(randbytes(BLOCK_SIZE))
    header = data[:12]
    footer = data[-12:]
    check, backward_size = parse_xz_footer(footer)
    block = data[12 : -12 - backward_size]
    records = parse_xz_index(data[-12 - backward_size : -12])
    index_footer = create_xz_index_footer(check, records * nb_blocks)

    return cast(
        BinaryIO,
        IOCombiner(
            IOStatic(header),
            *[IOStatic(block)] * nb_blocks,
            IOStatic(index_footer),
        ),
    )
Esempio n. 4
0
def test_create_xz_footer_invalid_check() -> None:
    with pytest.raises(XZError) as exc_info:
        create_xz_index_footer(17, [])
    assert str(exc_info.value) == "footer check"
Esempio n. 5
0
def test_create_xz_footer(check: int, data: str) -> None:
    assert create_xz_index_footer(check, [])[-12:] == bytes.fromhex(data)
Esempio n. 6
0
def test_create_xz_index_invalid() -> None:
    with pytest.raises(XZError) as exc_info:
        create_xz_index_footer(1, [(73, 60), (0, 12), (56, 30)])
    assert str(exc_info.value) == "index record unpadded size"
Esempio n. 7
0
def test_create_xz_index(records: List[Tuple[int, int]], data: str) -> None:
    assert create_xz_index_footer(1, records)[:-12] == bytes.fromhex(data)