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