From 4dd3d1a1a2534f2996a368ebe26114bf974e15f9 Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Thu, 20 Sep 2012 11:43:00 -0400 Subject: [PATCH] Fix #785 & add regression test. --- requests/models.py | 6 ++++-- tests/test_requests.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/requests/models.py b/requests/models.py index d845637..f33c3c3 100644 --- a/requests/models.py +++ b/requests/models.py @@ -462,8 +462,10 @@ class Request(object): def register_hook(self, event, hook): """Properly register a hook.""" - - self.hooks[event].append(hook) + if isinstance(hook, (list, tuple, set)): + self.hooks[event].extend(hook) + else: + self.hooks[event].append(hook) def deregister_hook(self, event, hook): """Deregister a previously registered hook. diff --git a/tests/test_requests.py b/tests/test_requests.py index f8a31f2..0f67618 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -744,6 +744,40 @@ class RequestsTestSuite(TestSetup, TestBaseMixin, unittest.TestCase): assert 'foo' in response.text assert 'bar' in response.text + def test_allow_list_of_hooks_to_register_hook(self): + """Issue 785: https://github.com/kennethreitz/requests/issues/785""" + def add_foo_header(args): + if not args.get('headers'): + args['headers'] = {} + + args['headers'].update({ + 'X-Foo': 'foo' + }) + + return args + + def add_bar_header(args): + if not args.get('headers'): + args['headers'] = {} + + args['headers'].update({ + 'X-Bar': 'bar' + }) + + return args + + def assert_hooks_are_callable(hooks): + for h in hooks['args']: + assert callable(h) is True + + hooks = [add_foo_header, add_bar_header] + r = requests.models.Request() + r.register_hook('args', hooks) + assert_hooks_are_callable(r.hooks) + + r = requests.models.Request(hooks={'args': hooks}) + assert_hooks_are_callable(r.hooks) + def test_session_persistent_cookies(self): s = requests.session() -- 2.34.1