diff --git a/hyperwallet/tests/test_client.py b/hyperwallet/tests/test_client.py index 9886ea1..a57e467 100644 --- a/hyperwallet/tests/test_client.py +++ b/hyperwallet/tests/test_client.py @@ -369,6 +369,22 @@ def test_receive_json_error_response_when_content_type_is_not_valid(self, sessio 'Invalid Content-Type specified in Response Header' ) + @mock.patch('requests.Session.request') + def test_receive_too_many_requests_when_429(self, session_mock): + + session_mock.return_value = mock.MagicMock(status_code=429) + + with self.assertRaises(HyperwalletAPIException) as exc: + self.client._makeRequest() + + self.assertEqual( + exc.exception.message.get('errors')[0].get('code'), 'TOO_MANY_REQUESTS' + ) + + self.assertEqual( + exc.exception.message.get('errors')[0].get('message'), 'Too Many Requests' + ) + if __name__ == '__main__': unittest.main() diff --git a/hyperwallet/utils/apiclient.py b/hyperwallet/utils/apiclient.py index 5a20bee..4331ad1 100644 --- a/hyperwallet/utils/apiclient.py +++ b/hyperwallet/utils/apiclient.py @@ -112,6 +112,12 @@ def _makeRequest(self, if response.status_code is 204: return {} + if response.status_code == 429: + raise HyperwalletAPIException({ + 'errors': [ + {'code': 'TOO_MANY_REQUESTS', 'message': 'Too Many Requests'} + ] + }) self.__checkResponseHeaderContentType(response)