flush() is expected to output all pending data stored in internal buffers. gzip.GzipFile.flush() does perform a flush on its fileobj, but does not flush the state of its compressobj prior to the IO flush. This results in being able to use gzip.GzipFile to zip output to a socket and having the other side unzip it in sync with originators flush calls.
Logged In: YES user_id=1115903 This patch appears to fix the bug as described, and running the regression tests on Python 2.5a0 (CVS HEAD) plus this patch turns up no problems. Since the documentation says that a GzipFile "simulates most of the methods of a file object," I would expect GzipFile.flush() to act in the way that David described in the first paragraph of the bug report, and his patch seems to provide that as far as I can tell.
Logged In: YES user_id=21627 Thanks for the patch. I believe it does not fully fix the bug reported: not all input data are flushed with Z_SYNC_FLUSH, but only some (up to an output byte boundary or some such). I also believe that a "complete" fix for the bug is not possible, as flushing all input data would require Z_FINISH, and then no more additional data could be written into the stream. As this is still an improvement over the current status, I committed it as gzip.py 1.43 NEWS 1.1251
Logged In: YES user_id=21627 Ah, put the "committed" message into the wrong tracker item. As I said, I don't think the bug is fully fixed, but I don't think it can be fully fixed, either, so closing it as fixed.