diff --git a/requests/hooks/args.py b/requests/hooks/args.py new file mode 100644 index 00000000..6ac6fb6c --- /dev/null +++ b/requests/hooks/args.py @@ -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 index 00000000..3a4ff543 --- /dev/null +++ b/requests/hooks/post_request.py @@ -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 index 00000000..ca1e715f --- /dev/null +++ b/requests/hooks/pre_request.py @@ -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 index 00000000..fc3d26dc --- /dev/null +++ b/requests/hooks/response.py @@ -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) +