Author amcnabb
Recipients amcnabb
Date 2012-01-26.19:40:47
SpamBayes Score 5.43362e-05
Marked as misclassified No
Message-id <>
The stream encoder for the zlib_codec doesn't use the incremental encoder, so it has limited usefulness in practice. This is easiest to show with an example.

Here is the behavior with the stream encoder:

>>> filelike = io.BytesIO()
>>> wrapped = codecs.getwriter('zlib_codec')(filelike)
>>> wrapped.write(b'hello')
>>> filelike.getvalue()
>>> wrapped.write(b'x')
>>> filelike.getvalue()

However, this is the behavior of the incremental encoder:

>>> ienc = codecs.getincrementalencoder('zlib_codec')()
>>> ienc.encode(b'x')
>>> ienc.encode(b'x', final=True)

The stream encoder is apparently encoding each write as an individual block, but the incremental encoder buffers until it gets a block that's large enough to be meaningfully compressed.

Fixing this may require addressing a separate issue with stream encoders. Unlike with the GzipFile module, closing a stream encoder closes the underlying file. If this underlying file is a BytesIO, then closing makes it free its buffer, making it impossible to get at the completed file.
Date User Action Args
2012-01-26 19:40:49amcnabbsetrecipients: + amcnabb
2012-01-26 19:40:49amcnabbsetmessageid: <>
2012-01-26 19:40:48amcnabblinkissue13881 messages
2012-01-26 19:40:47amcnabbcreate