From: Ian Cordasco Date: Thu, 20 Sep 2012 15:43:00 +0000 (-0400) Subject: Fix #785 & add regression test. X-Git-Tag: v0.14.1~7^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4dd3d1a1a2534f2996a368ebe26114bf974e15f9;p=services%2Fpython-requests.git Fix #785 & add regression test. --- 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()