return merged_setting
+def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict):
+ """
+ Properly merges both requests and session hooks.
+
+ This is necessary because when request_hooks == {'response': []}, the
+ merge breaks Session hooks entirely.
+ """
+ if session_hooks is None or session_hooks.get('response') == []:
+ return request_hooks
+
+ if request_hooks is None or request_hooks.get('response') == []:
+ return session_hooks
+
+ ret = {}
+ for (k, v) in request_hooks.items():
+ if v is not None:
+ ret[k] = set(v).union(session_hooks.get(k, []))
+
+ return ret
+
+
class SessionRedirectMixin(object):
def resolve_redirects(self, resp, req, stream=False, timeout=None,
verify=True, cert=None, proxies=None):
params=merge_setting(request.params, self.params),
auth=merge_setting(auth, self.auth),
cookies=merged_cookies,
- hooks=merge_setting(request.hooks, self.hooks),
+ hooks=merge_hooks(request.hooks, self.hooks),
)
return p