17db96d56Sopenharmony_ci"""Python 'bz2_codec' Codec - bz2 compression encoding. 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciThis codec de/encodes from bytes to bytes and is therefore usable with 47db96d56Sopenharmony_cibytes.transform() and bytes.untransform(). 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ciAdapted by Raymond Hettinger from zlib_codec.py which was written 77db96d56Sopenharmony_ciby Marc-Andre Lemburg (mal@lemburg.com). 87db96d56Sopenharmony_ci""" 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciimport codecs 117db96d56Sopenharmony_ciimport bz2 # this codec needs the optional bz2 module ! 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci### Codec APIs 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_cidef bz2_encode(input, errors='strict'): 167db96d56Sopenharmony_ci assert errors == 'strict' 177db96d56Sopenharmony_ci return (bz2.compress(input), len(input)) 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_cidef bz2_decode(input, errors='strict'): 207db96d56Sopenharmony_ci assert errors == 'strict' 217db96d56Sopenharmony_ci return (bz2.decompress(input), len(input)) 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ciclass Codec(codecs.Codec): 247db96d56Sopenharmony_ci def encode(self, input, errors='strict'): 257db96d56Sopenharmony_ci return bz2_encode(input, errors) 267db96d56Sopenharmony_ci def decode(self, input, errors='strict'): 277db96d56Sopenharmony_ci return bz2_decode(input, errors) 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ciclass IncrementalEncoder(codecs.IncrementalEncoder): 307db96d56Sopenharmony_ci def __init__(self, errors='strict'): 317db96d56Sopenharmony_ci assert errors == 'strict' 327db96d56Sopenharmony_ci self.errors = errors 337db96d56Sopenharmony_ci self.compressobj = bz2.BZ2Compressor() 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ci def encode(self, input, final=False): 367db96d56Sopenharmony_ci if final: 377db96d56Sopenharmony_ci c = self.compressobj.compress(input) 387db96d56Sopenharmony_ci return c + self.compressobj.flush() 397db96d56Sopenharmony_ci else: 407db96d56Sopenharmony_ci return self.compressobj.compress(input) 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci def reset(self): 437db96d56Sopenharmony_ci self.compressobj = bz2.BZ2Compressor() 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ciclass IncrementalDecoder(codecs.IncrementalDecoder): 467db96d56Sopenharmony_ci def __init__(self, errors='strict'): 477db96d56Sopenharmony_ci assert errors == 'strict' 487db96d56Sopenharmony_ci self.errors = errors 497db96d56Sopenharmony_ci self.decompressobj = bz2.BZ2Decompressor() 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci def decode(self, input, final=False): 527db96d56Sopenharmony_ci try: 537db96d56Sopenharmony_ci return self.decompressobj.decompress(input) 547db96d56Sopenharmony_ci except EOFError: 557db96d56Sopenharmony_ci return '' 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci def reset(self): 587db96d56Sopenharmony_ci self.decompressobj = bz2.BZ2Decompressor() 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ciclass StreamWriter(Codec, codecs.StreamWriter): 617db96d56Sopenharmony_ci charbuffertype = bytes 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ciclass StreamReader(Codec, codecs.StreamReader): 647db96d56Sopenharmony_ci charbuffertype = bytes 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci### encodings module API 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_cidef getregentry(): 697db96d56Sopenharmony_ci return codecs.CodecInfo( 707db96d56Sopenharmony_ci name="bz2", 717db96d56Sopenharmony_ci encode=bz2_encode, 727db96d56Sopenharmony_ci decode=bz2_decode, 737db96d56Sopenharmony_ci incrementalencoder=IncrementalEncoder, 747db96d56Sopenharmony_ci incrementaldecoder=IncrementalDecoder, 757db96d56Sopenharmony_ci streamwriter=StreamWriter, 767db96d56Sopenharmony_ci streamreader=StreamReader, 777db96d56Sopenharmony_ci _is_text_encoding=False, 787db96d56Sopenharmony_ci ) 79