forked from kaitai-io/kaitai_compress
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimplode.py
37 lines (25 loc) · 1.28 KB
/
implode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import typing
from ..core import KaitaiCompressor, ProcessorContextStub
# pylint:disable=arguments-differ
class Implode(KaitaiCompressor):
"""PKWare implode format"""
__slots__ = ("dictionarySize", "compressionType")
def __init__(self, dictionarySize: int = 4096, compressionType: int = 0, *args, **kwargs) -> None: # pylint:disable=unused-argument
super().__init__()
try:
from pklib_base import CompressionType
except ImportError:
pass
else:
if isinstance(compressionType, str):
compressionType = CompressionType[compressionType.lower()]
else:
compressionType = CompressionType(compressionType)
self.compressionType = compressionType
self.dictionarySize = dictionarySize
def process(self, data: typing.Union[bytes, bytearray]) -> ProcessorContextStub:
import pkblast
return ProcessorContextStub(pkblast.decompressBytesWholeToBytes(data)[1])
def unprocess(self, data: typing.Union[bytes, bytearray]) -> ProcessorContextStub:
from pkimplode import compressBytesChunkedToBytes
return ProcessorContextStub(compressBytesChunkedToBytes(data, compressionType=self.compressionType, dictionarySize=self.dictionarySize,))