mirror of
https://github.com/kennethreitz/requests3.git
synced 2026-06-05 23:10:16 +00:00
662c3edacc
Since response objects for failures (4xx/5xx responses) evaluate to False in a boolean context, any hook which returns such a failure response will evaluate to False. The way hooks were setup, any failure response resulting from a hook would be ignored, and the initial response before it got processed by the hook would be substituted in its place. This commit changes that logic to test for None so that hooks that return failures can do so.
54 lines
1.1 KiB
Python
54 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
requests.hooks
|
|
~~~~~~~~~~~~~~
|
|
|
|
This module provides the capabilities for the Requests hooks system.
|
|
|
|
Available hooks:
|
|
|
|
``args``:
|
|
A dictionary of the arguments being sent to Request().
|
|
|
|
``pre_request``:
|
|
The Request object, directly after being created.
|
|
|
|
``pre_send``:
|
|
The Request object, directly before being sent.
|
|
|
|
``post_request``:
|
|
The Request object, directly after being sent.
|
|
|
|
``response``:
|
|
The response generated from a Request.
|
|
|
|
"""
|
|
|
|
import traceback
|
|
|
|
|
|
HOOKS = ('args', 'pre_request', 'pre_send', 'post_request', 'response')
|
|
|
|
def dispatch_hook(key, hooks, hook_data):
|
|
"""Dispatches a hook dictionary on a given piece of data."""
|
|
|
|
hooks = hooks or dict()
|
|
|
|
if key in hooks:
|
|
hooks = hooks.get(key)
|
|
|
|
if hasattr(hooks, '__call__'):
|
|
hooks = [hooks]
|
|
|
|
for hook in hooks:
|
|
try:
|
|
_hook_data = hook(hook_data)
|
|
if _hook_data is not None:
|
|
hook_data = _hook_data
|
|
|
|
except Exception:
|
|
traceback.print_exc()
|
|
|
|
return hook_data
|