diff options
author | Georg Brandl <georg@python.org> | 2006-10-29 14:39:13 +0000 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2006-10-29 14:39:13 +0000 |
commit | c68d2cc3f2950d8132ea83bcf2c9fc1359e99a4d (patch) | |
tree | 6a6a8745273c794f08343f21bfbe18cb7452541c /Lib/encodings/bz2_codec.py | |
parent | b8205a11882161968fe9b67871d4000c4b3efb08 (diff) | |
download | cpython-git-c68d2cc3f2950d8132ea83bcf2c9fc1359e99a4d.tar.gz |
Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
(backport from rev. 52529)
Diffstat (limited to 'Lib/encodings/bz2_codec.py')
-rw-r--r-- | Lib/encodings/bz2_codec.py | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/Lib/encodings/bz2_codec.py b/Lib/encodings/bz2_codec.py index 81e84b6fb8..054b36b401 100644 --- a/Lib/encodings/bz2_codec.py +++ b/Lib/encodings/bz2_codec.py @@ -52,14 +52,35 @@ class Codec(codecs.Codec): return bz2_decode(input, errors) class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.compressobj = bz2.BZ2Compressor() + def encode(self, input, final=False): - assert self.errors == 'strict' - return bz2.compress(input) + if final: + c = self.compressobj.compress(input) + return c + self.compressobj.flush() + else: + return self.compressobj.compress(input) + + def reset(self): + self.compressobj = bz2.BZ2Compressor() class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.decompressobj = bz2.BZ2Decompressor() + def decode(self, input, final=False): - assert self.errors == 'strict' - return bz2.decompress(input) + try: + return self.decompressobj.decompress(input) + except EOFError: + return '' + + def reset(self): + self.decompressobj = bz2.BZ2Decompressor() class StreamWriter(Codec,codecs.StreamWriter): pass |