Skip to content

Commit d43f4f1

Browse files
committed
fix: ensure hook added if client is re-set
1 parent 4889602 commit d43f4f1

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

ibmcloudant/cloudant_base_service.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
from ibm_cloud_sdk_core import BaseService
2828
from ibm_cloud_sdk_core.authenticators import Authenticator
29-
from requests import Response
29+
from requests import Response, Session
3030
from requests.cookies import RequestsCookieJar
3131

3232
from .common import get_sdk_headers
@@ -229,7 +229,11 @@ def set_service_url(self, service_url: str) -> None:
229229
except AttributeError:
230230
pass # in case no authenticator is configured yet, pass
231231

232-
def _add_hooks(self):
233-
response_hooks = self.get_http_client().hooks['response']
234-
if _error_response_hook not in response_hooks:
235-
response_hooks.append(_error_response_hook)
232+
def set_http_client(self, http_client: Session) -> None:
233+
super().set_http_client(http_client)
234+
self._add_hooks()
235+
236+
def _add_hooks(self):
237+
response_hooks = self.get_http_client().hooks['response']
238+
if _error_response_hook not in response_hooks:
239+
response_hooks.append(_error_response_hook)

test/unit/test_cloudant_base_error_augment.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,22 @@ def _response_callback(cls, resp):
167167
return _error_response_hook(resp)
168168

169169
def test_response_hook_added(self):
170-
self.assertEqual(_error_response_hook, self._service.get_http_client().hooks['response'][0])
170+
self.assertEqual(_error_response_hook, self._service.get_http_client().hooks['response'][0])
171+
172+
def test_response_hook_not_double_added_via_set_http_client(self):
173+
client = self._service.get_http_client()
174+
self._service.set_http_client(client)
175+
response_hooks = self._service.get_http_client().hooks['response']
176+
self.assertEqual(1, len(response_hooks))
177+
self.assertEqual(_error_response_hook, response_hooks[0])
178+
179+
def test_response_hook_added_via_set_http_client(self):
180+
client = self._service.get_http_client()
181+
client.hooks['response'].clear()
182+
self._service.set_http_client(client)
183+
response_hooks = self._service.get_http_client().hooks['response']
184+
self.assertEqual(1, len(response_hooks))
185+
self.assertEqual(_error_response_hook, response_hooks[0])
171186

172187
def test_augment_error(self):
173188
self._run_test(

0 commit comments

Comments
 (0)