From 08d38a828f15183e8a1d7b252853630558ccda38 Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Tue, 23 Jul 2024 20:54:53 -0700 Subject: [PATCH] polish --- splitio/api/client.py | 16 ++++++++-------- tests/api/test_httpclient.py | 20 ++++++++++++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/splitio/api/client.py b/splitio/api/client.py index f516bf38..40d92efc 100644 --- a/splitio/api/client.py +++ b/splitio/api/client.py @@ -19,7 +19,7 @@ TELEMETRY_URL = 'https://telemetry.split.io/api' _LOGGER = logging.getLogger(__name__) - +_EXC_MSG = '{source} library is throwing exceptions' HttpResponse = namedtuple('HttpResponse', ['status_code', 'body', 'headers']) @@ -173,7 +173,7 @@ def get(self, server, path, sdk_key, query=None, extra_headers=None): # pylint: return HttpResponse(response.status_code, response.text, response.headers) except Exception as exc: # pylint: disable=broad-except - raise HttpClientException('requests library is throwing exceptions') from exc + raise HttpClientException(_EXC_MSG.format(source='request')) from exc def post(self, server, path, sdk_key, body, query=None, extra_headers=None): # pylint: disable=too-many-arguments """ @@ -208,7 +208,7 @@ def post(self, server, path, sdk_key, body, query=None, extra_headers=None): # self._record_telemetry(response.status_code, get_current_epoch_time_ms() - start) return HttpResponse(response.status_code, response.text, response.headers) except Exception as exc: # pylint: disable=broad-except - raise HttpClientException('requests library is throwing exceptions') from exc + raise HttpClientException(_EXC_MSG.format(source='request')) from exc def _record_telemetry(self, status_code, elapsed): """ @@ -285,7 +285,7 @@ async def get(self, server, path, apikey, query=None, extra_headers=None): # py return HttpResponse(response.status, body, response.headers) except aiohttp.ClientError as exc: # pylint: disable=broad-except - raise HttpClientException('aiohttp library is throwing exceptions') from exc + raise HttpClientException(_EXC_MSG.format(source='aiohttp')) from exc async def post(self, server, path, apikey, body, query=None, extra_headers=None): # pylint: disable=too-many-arguments """ @@ -329,7 +329,7 @@ async def post(self, server, path, apikey, body, query=None, extra_headers=None) return HttpResponse(response.status, body, response.headers) except aiohttp.ClientError as exc: # pylint: disable=broad-except - raise HttpClientException('aiohttp library is throwing exceptions') from exc + raise HttpClientException(_EXC_MSG.format(source='aiohttp')) from exc async def _record_telemetry(self, status_code, elapsed): """ @@ -371,7 +371,7 @@ def __init__(self, timeout=None, sdk_url=None, events_url=None, auth_url=None, t :type telemetry_url: str """ _LOGGER.debug("Initializing httpclient for Kerberos auth") - HttpClient.__init__(self, timeout, sdk_url, events_url, auth_url, telemetry_url) + HttpClient.__init__(self, timeout=timeout, sdk_url=sdk_url, events_url=events_url, auth_url=auth_url, telemetry_url=telemetry_url) self._authentication_scheme = authentication_scheme self._authentication_params = authentication_params @@ -408,7 +408,7 @@ def get(self, server, path, sdk_key, query=None, extra_headers=None): # pylint: return HttpResponse(response.status_code, response.text, response.headers) except Exception as exc: # pylint: disable=broad-except - raise HttpClientException('requests library is throwing exceptions') from exc + raise HttpClientException(_EXC_MSG.format(source='request')) from exc def post(self, server, path, sdk_key, body, query=None, extra_headers=None): # pylint: disable=too-many-arguments """ @@ -445,7 +445,7 @@ def post(self, server, path, sdk_key, body, query=None, extra_headers=None): # self._record_telemetry(response.status_code, get_current_epoch_time_ms() - start) return HttpResponse(response.status_code, response.text, response.headers) except Exception as exc: # pylint: disable=broad-except - raise HttpClientException('requests library is throwing exceptions') from exc + raise HttpClientException(_EXC_MSG.format(source='request')) from exc def _set_authentication(self, session): if self._authentication_scheme == AuthenticateScheme.KERBEROS_SPNEGO: diff --git a/tests/api/test_httpclient.py b/tests/api/test_httpclient.py index 0a3cb6b6..621e696a 100644 --- a/tests/api/test_httpclient.py +++ b/tests/api/test_httpclient.py @@ -168,7 +168,6 @@ def test_authentication_scheme(self, mocker): headers={'Authorization': 'Bearer some_api_key', 'h1': 'abc', 'Content-Type': 'application/json'}, params={'param1': 123}, timeout=None -# auth=HTTPKerberosAuth(mutual_authentication=OPTIONAL) ) assert response.status_code == 200 assert response.body == 'ok' @@ -183,28 +182,37 @@ def test_authentication_scheme(self, mocker): headers={'Authorization': 'Bearer some_api_key', 'h1': 'abc', 'Content-Type': 'application/json'}, params={'param1': 123}, timeout=None -# auth=HTTPKerberosAuth(principal='bilal', password='split', mutual_authentication=OPTIONAL) ) assert response.status_code == 200 assert response.body == 'ok' assert get_mock.mock_calls == [call] get_mock.reset_mock() - httpclient = client.HttpClientKerberos(sdk_url='https://sdk.com', authentication_scheme=AuthenticateScheme.KERBEROS_PROXY, authentication_params=[None, None]) + response_mock = mocker.Mock() + response_mock.status_code = 200 + response_mock.headers = {} + response_mock.text = 'ok' + get_mock = mocker.Mock() + get_mock.return_value = response_mock + mocker.patch('splitio.api.client.requests.Session.post', new=get_mock) + + httpclient = client.HttpClientKerberos(sdk_url='https://sdk.com', events_url='https://events.com', authentication_scheme=AuthenticateScheme.KERBEROS_PROXY, authentication_params=[None, None]) httpclient.set_telemetry_data("metric", mocker.Mock()) - response = httpclient.get('sdk', '/test1', 'some_api_key', {'param1': 123}, {'h1': 'abc'}) + + response = httpclient.post('events', 'test1', 'some_api_key', {'p1': 'a'}, {'param1': 123}, {'h1': 'abc'}) call = mocker.call( - 'https://sdk.com/test1', + 'https://events.com/test1', + json={'p1': 'a'}, headers={'Authorization': 'Bearer some_api_key', 'h1': 'abc', 'Content-Type': 'application/json'}, params={'param1': 123}, timeout=None -# auth=HTTPKerberosAuth(mutual_authentication=OPTIONAL) ) assert response.status_code == 200 assert response.body == 'ok' assert get_mock.mock_calls == [call] get_mock.reset_mock() + mocker.patch('splitio.api.client.requests.Session.get', new=get_mock) httpclient = client.HttpClientKerberos(sdk_url='https://sdk.com', authentication_scheme=AuthenticateScheme.KERBEROS_PROXY, authentication_params=['bilal', 'split']) httpclient.set_telemetry_data("metric", mocker.Mock()) response = httpclient.get('sdk', '/test1', 'some_api_key', {'param1': 123}, {'h1': 'abc'})