Forgot to add the hooks sub-package
authorLuca De Vitis <luca@monkeython.com>
Tue, 23 Aug 2011 21:39:07 +0000 (23:39 +0200)
committerLuca De Vitis <luca@monkeython.com>
Tue, 23 Aug 2011 21:39:07 +0000 (23:39 +0200)
requests/hooks/args.py [new file with mode: 0644]
requests/hooks/post_request.py [new file with mode: 0644]
requests/hooks/pre_request.py [new file with mode: 0644]
requests/hooks/response.py [new file with mode: 0644]

diff --git a/requests/hooks/args.py b/requests/hooks/args.py
new file mode 100644 (file)
index 0000000..6ac6fb6
--- /dev/null
@@ -0,0 +1,7 @@
+"""
+request.hooks.args
+~~~~~~~~~~~~~~~~~~
+
+This module provide a collection of args hooks.
+"""
+
diff --git a/requests/hooks/post_request.py b/requests/hooks/post_request.py
new file mode 100644 (file)
index 0000000..3a4ff54
--- /dev/null
@@ -0,0 +1,7 @@
+"""
+request.hooks.post_request
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This module provide a collection of post_request hooks.
+"""
+
diff --git a/requests/hooks/pre_request.py b/requests/hooks/pre_request.py
new file mode 100644 (file)
index 0000000..ca1e715
--- /dev/null
@@ -0,0 +1,7 @@
+"""
+request.hooks.pre_request
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This module provide a collection of pre_request hooks.
+"""
+
diff --git a/requests/hooks/response.py b/requests/hooks/response.py
new file mode 100644 (file)
index 0000000..fc3d26d
--- /dev/null
@@ -0,0 +1,43 @@
+"""
+request.hooks.response
+~~~~~~~~~~~~~~~~~~~~~~
+
+This module provide a collection of response hooks.
+"""
+from functools import wraps
+import zlib
+from cgi import parse_header
+
+#: Dictionary of content decoders.
+decoders = {
+    # No decoding applied.
+    'identity': lambda r: r,
+    # Decode Response file object compressed with deflate.
+    'deflate': lambda r: zlib.decompress(r.content),
+    # Decode Response file object compressed with gzip.
+    'gzip': lambda r: zlib.decompress(r.content, 16+zlib.MAX_WBITS),
+}
+
+# Decode Response file object compressed with compress.
+decoders['compress'] = decoders['deflate']
+
+try:
+    import bz2
+except ImportError:
+    pass
+else:
+    # Decode Response file object compressed with bz2.
+    decoders['bzip2'] = lambda r: bz2.decompress(r.content)
+
+def unicode_response(r):
+    """Encode response file object in unicode."""
+    content_type, params = parse_header(r.headers.get('content-type'))
+    charset = params.get('charset', '').strip("'\"")
+    r.content = unicode(r.content, charset) if charset else unicode(r.content)
+    return r
+
+def decode_response(r):
+    """Decode compressed response content using Contetn-Encoding header."""
+    encoding = r.headers.get('content-encoding')
+    return decoders.get(encoding)(r)
+