import gzip import StringIO IDENTITY = 0 GZIP = 1 all = [IDENTITY, GZIP] class UnknownEncodingError(Exception): """Exception which is raised when an unknown encoding has been requested""" pass def get(encoding): if encoding in all: return encoding elif encoding.lower() == 'identity': return IDENTITY elif encoding.lower() == 'gzip': return GZIP else: raise UnknownEncodingError def str(encoding): encoding = get(encoding) if encoding == IDENTITY: return 'identity' elif encoding == GZIP: return 'gzip' else: raise UnknownEncodingError def encode(encoding, data): encoding = get(encoding) if encoding == IDENTITY: return data elif encoding == GZIP: zbuf = StringIO.StringIO() zfile = gzip.GzipFile(None, 'wb', 9, zbuf) zfile.write(data) zfile.close() return zbuf.getvalue() else: raise UnknownEncodingError def decode(encoding, data): encoding = get(encoding) if encoding == IDENTITY: return data elif encoding == GZIP: zbuf = StringIO.StringIO(data) zfile = gzip.GzipFile(None, 'r', 9, zbuf) data = zfile.read() zfile.close() return data else: raise UnknownEncodingError