summaryrefslogtreecommitdiff
path: root/project1/proj1_s4498062/webhttp/encodings.py
diff options
context:
space:
mode:
Diffstat (limited to 'project1/proj1_s4498062/webhttp/encodings.py')
-rw-r--r--project1/proj1_s4498062/webhttp/encodings.py58
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
+