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