diff --git a/requests/models.py b/requests/models.py index 2193c6e5..78311491 100644 --- a/requests/models.py +++ b/requests/models.py @@ -462,10 +462,10 @@ class Request(object): def register_hook(self, event, hook): """Properly register a hook.""" - if isinstance(hook, (list, tuple, set)): - self.hooks[event].extend(hook) - else: + if callable(hook): self.hooks[event].append(hook) + elif hasattr(hook, '__iter__'): + self.hooks[event].extend(h for h in hook if callable(h)) def deregister_hook(self, event, hook): """Deregister a previously registered hook. diff --git a/tests/test_requests.py b/tests/test_requests.py index 0f67618a..3d6f49c2 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -778,6 +778,10 @@ class RequestsTestSuite(TestSetup, TestBaseMixin, unittest.TestCase): r = requests.models.Request(hooks={'args': hooks}) assert_hooks_are_callable(r.hooks) + hooks.append('string that should not be registered') + r = requests.models.Request(hooks={'args': hooks}) + assert_hooks_are_callable(r.hooks) + def test_session_persistent_cookies(self): s = requests.session()