Work in progress. This is currently broken!

This commit is contained in:
Joseph Schorr 2014-09-16 00:18:57 -04:00
parent 820d5c0476
commit e3c52fa0eb
8 changed files with 344 additions and 0 deletions

42
util/gzipwrap.py Normal file
View file

@ -0,0 +1,42 @@
from gzip import GzipFile
class GzipWrap(object):
def __init__(self, input, filename=None, compresslevel=1):
self.input = iter(input)
self.buffer = ''
self.zipper = GzipFile(filename, mode='wb', fileobj=self, compresslevel=compresslevel)
def read(self, size=-1):
# If the buffer already has enough bytes, then simply pop them off of
# the beginning and return them.
if len(self.buffer) >= size:
ret = self.buffer[0:size]
self.buffer = self.buffer[size:]
return ret
# Otherwise, zip the input until we have enough bytes.
while True:
# Attempt to retrieve the next bytes to write.
is_done = False
try:
s = self.input.next()
self.zipper.write(s)
except StopIteration:
is_done = True
if len(self.buffer) < size or is_done:
self.zipper.flush()
if len(self.buffer) >= size or is_done:
ret = self.buffer[0:size]
self.buffer = self.buffer[size:]
return ret
def flush(self):
pass
def write(self, data):
self.buffer += data
def close(self):
self.input.close()