diff options
Diffstat (limited to 'project1/proj1_s4498062/webhttp/encodings.py')
-rw-r--r-- | project1/proj1_s4498062/webhttp/encodings.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/project1/proj1_s4498062/webhttp/encodings.py b/project1/proj1_s4498062/webhttp/encodings.py new file mode 100644 index 0000000..1a16be2 --- /dev/null +++ b/project1/proj1_s4498062/webhttp/encodings.py @@ -0,0 +1,58 @@ +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 + |