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