mirror of
https://github.com/kennethreitz/requests3.git
synced 2026-06-05 23:10:16 +00:00
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
"""
|
|
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.content,
|
|
# 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')
|
|
r._content = decoders.get(encoding)(r)
|
|
return r
|
|
|