diff options
author | Georg Brandl <georg@python.org> | 2006-10-29 14:39:09 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2006-10-29 14:39:09 (GMT) |
commit | 2c9838e30f825b3bdaf0fc33f15a3cc74320ba6e (patch) | |
tree | e11a9246b8e41fd57ae9b19cc20de33937a6b33f /Lib/encodings/zlib_codec.py | |
parent | 5b4e1c2530636eab196fb98ea8f49389ff419e28 (diff) | |
download | cpython-2c9838e30f825b3bdaf0fc33f15a3cc74320ba6e.zip cpython-2c9838e30f825b3bdaf0fc33f15a3cc74320ba6e.tar.gz cpython-2c9838e30f825b3bdaf0fc33f15a3cc74320ba6e.tar.bz2 |
Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
Diffstat (limited to 'Lib/encodings/zlib_codec.py')
-rw-r--r-- | Lib/encodings/zlib_codec.py | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/Lib/encodings/zlib_codec.py b/Lib/encodings/zlib_codec.py index 2694f15..3419f9f 100644 --- a/Lib/encodings/zlib_codec.py +++ b/Lib/encodings/zlib_codec.py @@ -51,14 +51,36 @@ class Codec(codecs.Codec): return zlib_decode(input, errors) class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.compressobj = zlib.compressobj() + def encode(self, input, final=False): - assert self.errors == 'strict' - return zlib.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 = zlib.compressobj() class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.decompressobj = zlib.decompressobj() + def decode(self, input, final=False): - assert self.errors == 'strict' - return zlib.decompress(input) + if final: + c = self.decompressobj.decompress(input) + return c + self.decompressobj.flush() + else: + return self.decompressobj.decompress(input) + + def reset(self): + self.decompressobj = zlib.decompressobj() class StreamWriter(Codec,codecs.StreamWriter): pass |