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