--- /dev/null
+# -*- coding: utf-8 -*-
+
+"""
+HTTP-related utility functions.
+"""
+
+from __future__ import with_statement
+import gzip
+try:
+ import cStringIO as StringIO
+except ImportError:
+ import StringIO
+
+
+def _gzip_decode(gzip_data):
+ """
+ Unzip gzipped data and return them.
+
+ :param gzip_data: Gzipped data.
+ :returns: The actual data.
+ """
+ try:
+ gzip_data = StringIO.StringIO(gzip_data)
+ gzip_file = gzip.GzipFile(fileobj=gzip_data)
+ data = gzip_file.read()
+ return data
+ finally:
+ gzip_data.close()
+
+
+def http_response(response):
+ """
+ Return the response of a HTTP request.
+
+ If the response has been gzipped, gunzip it first.
+
+ :param response: The raw response of a HTTP request.
+ :returns: A response suitable to be used by clients.
+ """
+ metadata = response.info()
+ data = response.read()
+ response.close()
+ if metadata.get('content-encoding') == 'gzip':
+ return _gzip_decode(data)
+ else:
+ return data