102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl"""Python 'bz2_codec' Codec - bz2 compression encoding. 202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 302524629f39bb70f4ea00ab8e64d694e08719227Georg BrandlThis codec de/encodes from bytes to bytes and is therefore usable with 402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlbytes.transform() and bytes.untransform(). 502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 602524629f39bb70f4ea00ab8e64d694e08719227Georg BrandlAdapted by Raymond Hettinger from zlib_codec.py which was written 702524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlby Marc-Andre Lemburg (mal@lemburg.com). 802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl""" 902524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 1002524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlimport codecs 1102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlimport bz2 # this codec needs the optional bz2 module ! 1202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 1302524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl### Codec APIs 1402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 1502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandldef bz2_encode(input, errors='strict'): 1602524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl assert errors == 'strict' 1702524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return (bz2.compress(input), len(input)) 1802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 1902524629f39bb70f4ea00ab8e64d694e08719227Georg Brandldef bz2_decode(input, errors='strict'): 2002524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl assert errors == 'strict' 2102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return (bz2.decompress(input), len(input)) 2202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 2302524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlclass Codec(codecs.Codec): 2402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def encode(self, input, errors='strict'): 2502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return bz2_encode(input, errors) 2602524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def decode(self, input, errors='strict'): 2702524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return bz2_decode(input, errors) 2802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 2902524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlclass IncrementalEncoder(codecs.IncrementalEncoder): 3002524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def __init__(self, errors='strict'): 3102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl assert errors == 'strict' 3202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl self.errors = errors 3302524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl self.compressobj = bz2.BZ2Compressor() 3402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 3502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def encode(self, input, final=False): 3602524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl if final: 3702524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl c = self.compressobj.compress(input) 3802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return c + self.compressobj.flush() 3902524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl else: 4002524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return self.compressobj.compress(input) 4102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 4202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def reset(self): 4302524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl self.compressobj = bz2.BZ2Compressor() 4402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 4502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlclass IncrementalDecoder(codecs.IncrementalDecoder): 4602524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def __init__(self, errors='strict'): 4702524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl assert errors == 'strict' 4802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl self.errors = errors 4902524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl self.decompressobj = bz2.BZ2Decompressor() 5002524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 5102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def decode(self, input, final=False): 5202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl try: 5302524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return self.decompressobj.decompress(input) 5402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl except EOFError: 5502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return '' 5602524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 5702524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl def reset(self): 5802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl self.decompressobj = bz2.BZ2Decompressor() 5902524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 6002524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlclass StreamWriter(Codec, codecs.StreamWriter): 6102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl charbuffertype = bytes 6202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 6302524629f39bb70f4ea00ab8e64d694e08719227Georg Brandlclass StreamReader(Codec, codecs.StreamReader): 6402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl charbuffertype = bytes 6502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 6602524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl### encodings module API 6702524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl 6802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandldef getregentry(): 6902524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl return codecs.CodecInfo( 7002524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl name="bz2", 7102524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl encode=bz2_encode, 7202524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl decode=bz2_decode, 7302524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl incrementalencoder=IncrementalEncoder, 7402524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl incrementaldecoder=IncrementalDecoder, 7502524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl streamwriter=StreamWriter, 7602524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl streamreader=StreamReader, 77c72e4e6dccce99bcdcb45959767436d7e5cfda8cNick Coghlan _is_text_encoding=False, 7802524629f39bb70f4ea00ab8e64d694e08719227Georg Brandl ) 79