xref: /aosp_15_r20/prebuilts/build-tools/common/py3-stdlib/encodings/zlib_codec.py (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker"""Python 'zlib_codec' Codec - zlib compression encoding.
2*cda5da8dSAndroid Build Coastguard Worker
3*cda5da8dSAndroid Build Coastguard WorkerThis codec de/encodes from bytes to bytes.
4*cda5da8dSAndroid Build Coastguard Worker
5*cda5da8dSAndroid Build Coastguard WorkerWritten by Marc-Andre Lemburg ([email protected]).
6*cda5da8dSAndroid Build Coastguard Worker"""
7*cda5da8dSAndroid Build Coastguard Worker
8*cda5da8dSAndroid Build Coastguard Workerimport codecs
9*cda5da8dSAndroid Build Coastguard Workerimport zlib # this codec needs the optional zlib module !
10*cda5da8dSAndroid Build Coastguard Worker
11*cda5da8dSAndroid Build Coastguard Worker### Codec APIs
12*cda5da8dSAndroid Build Coastguard Worker
13*cda5da8dSAndroid Build Coastguard Workerdef zlib_encode(input, errors='strict'):
14*cda5da8dSAndroid Build Coastguard Worker    assert errors == 'strict'
15*cda5da8dSAndroid Build Coastguard Worker    return (zlib.compress(input), len(input))
16*cda5da8dSAndroid Build Coastguard Worker
17*cda5da8dSAndroid Build Coastguard Workerdef zlib_decode(input, errors='strict'):
18*cda5da8dSAndroid Build Coastguard Worker    assert errors == 'strict'
19*cda5da8dSAndroid Build Coastguard Worker    return (zlib.decompress(input), len(input))
20*cda5da8dSAndroid Build Coastguard Worker
21*cda5da8dSAndroid Build Coastguard Workerclass Codec(codecs.Codec):
22*cda5da8dSAndroid Build Coastguard Worker    def encode(self, input, errors='strict'):
23*cda5da8dSAndroid Build Coastguard Worker        return zlib_encode(input, errors)
24*cda5da8dSAndroid Build Coastguard Worker    def decode(self, input, errors='strict'):
25*cda5da8dSAndroid Build Coastguard Worker        return zlib_decode(input, errors)
26*cda5da8dSAndroid Build Coastguard Worker
27*cda5da8dSAndroid Build Coastguard Workerclass IncrementalEncoder(codecs.IncrementalEncoder):
28*cda5da8dSAndroid Build Coastguard Worker    def __init__(self, errors='strict'):
29*cda5da8dSAndroid Build Coastguard Worker        assert errors == 'strict'
30*cda5da8dSAndroid Build Coastguard Worker        self.errors = errors
31*cda5da8dSAndroid Build Coastguard Worker        self.compressobj = zlib.compressobj()
32*cda5da8dSAndroid Build Coastguard Worker
33*cda5da8dSAndroid Build Coastguard Worker    def encode(self, input, final=False):
34*cda5da8dSAndroid Build Coastguard Worker        if final:
35*cda5da8dSAndroid Build Coastguard Worker            c = self.compressobj.compress(input)
36*cda5da8dSAndroid Build Coastguard Worker            return c + self.compressobj.flush()
37*cda5da8dSAndroid Build Coastguard Worker        else:
38*cda5da8dSAndroid Build Coastguard Worker            return self.compressobj.compress(input)
39*cda5da8dSAndroid Build Coastguard Worker
40*cda5da8dSAndroid Build Coastguard Worker    def reset(self):
41*cda5da8dSAndroid Build Coastguard Worker        self.compressobj = zlib.compressobj()
42*cda5da8dSAndroid Build Coastguard Worker
43*cda5da8dSAndroid Build Coastguard Workerclass IncrementalDecoder(codecs.IncrementalDecoder):
44*cda5da8dSAndroid Build Coastguard Worker    def __init__(self, errors='strict'):
45*cda5da8dSAndroid Build Coastguard Worker        assert errors == 'strict'
46*cda5da8dSAndroid Build Coastguard Worker        self.errors = errors
47*cda5da8dSAndroid Build Coastguard Worker        self.decompressobj = zlib.decompressobj()
48*cda5da8dSAndroid Build Coastguard Worker
49*cda5da8dSAndroid Build Coastguard Worker    def decode(self, input, final=False):
50*cda5da8dSAndroid Build Coastguard Worker        if final:
51*cda5da8dSAndroid Build Coastguard Worker            c = self.decompressobj.decompress(input)
52*cda5da8dSAndroid Build Coastguard Worker            return c + self.decompressobj.flush()
53*cda5da8dSAndroid Build Coastguard Worker        else:
54*cda5da8dSAndroid Build Coastguard Worker            return self.decompressobj.decompress(input)
55*cda5da8dSAndroid Build Coastguard Worker
56*cda5da8dSAndroid Build Coastguard Worker    def reset(self):
57*cda5da8dSAndroid Build Coastguard Worker        self.decompressobj = zlib.decompressobj()
58*cda5da8dSAndroid Build Coastguard Worker
59*cda5da8dSAndroid Build Coastguard Workerclass StreamWriter(Codec, codecs.StreamWriter):
60*cda5da8dSAndroid Build Coastguard Worker    charbuffertype = bytes
61*cda5da8dSAndroid Build Coastguard Worker
62*cda5da8dSAndroid Build Coastguard Workerclass StreamReader(Codec, codecs.StreamReader):
63*cda5da8dSAndroid Build Coastguard Worker    charbuffertype = bytes
64*cda5da8dSAndroid Build Coastguard Worker
65*cda5da8dSAndroid Build Coastguard Worker### encodings module API
66*cda5da8dSAndroid Build Coastguard Worker
67*cda5da8dSAndroid Build Coastguard Workerdef getregentry():
68*cda5da8dSAndroid Build Coastguard Worker    return codecs.CodecInfo(
69*cda5da8dSAndroid Build Coastguard Worker        name='zlib',
70*cda5da8dSAndroid Build Coastguard Worker        encode=zlib_encode,
71*cda5da8dSAndroid Build Coastguard Worker        decode=zlib_decode,
72*cda5da8dSAndroid Build Coastguard Worker        incrementalencoder=IncrementalEncoder,
73*cda5da8dSAndroid Build Coastguard Worker        incrementaldecoder=IncrementalDecoder,
74*cda5da8dSAndroid Build Coastguard Worker        streamreader=StreamReader,
75*cda5da8dSAndroid Build Coastguard Worker        streamwriter=StreamWriter,
76*cda5da8dSAndroid Build Coastguard Worker        _is_text_encoding=False,
77*cda5da8dSAndroid Build Coastguard Worker    )
78