def execute(self, method, path, **kwargs): if (self._use_specs and self._validate_using_specs and not self.specs.exists(method, path)): # TODO more info, specs version, method etc raise ClientError(f'The path `{path}` does not exist.') url = f'{self.endpoint}/{path}' kwargs = self._prepare_call_kwargs(kwargs) self.response = None try: self._execute_http_call(method, url, kwargs) if self.response.status_code == 204: return None if self.response.headers['Content-Type'] == 'application/json': return self.response.json() else: return self.response.content except RequestException as re: api_error = self._get_api_error_details() or {} status_code = self.response.status_code if self.response is not None else None raise ClientError(status_code=status_code, **api_error) from re
def test_connect_error(): c = ClientError(status_code=400, error_code='error_code', errors=['msg1', 'msg2']) assert repr(c) == '<ClientError 400: error_code>' assert str(c) == '400 Bad Request: error_code - msg1,msg2'
def test_resource_exists(res_factory): resource = res_factory() resource._client.get.return_value = {'id': 'res_id'} assert resource.exists() is True ce = ClientError(status_code=404) resource._client.get.side_effect = ce assert resource.exists() is False
def test_resource_exists_exception(res_factory): resource = res_factory() resource._client.get.return_value = {'id': 'res_id'} assert resource.exists() is True ce = ClientError(status_code=500) resource._client.get.side_effect = ce with pytest.raises(ClientError): resource.exists()
async def test_resource_exists(async_client_mock, async_res_factory): resource = async_res_factory( client=async_client_mock(methods=['get']), ) resource._client.get.return_value = {'id': 'res_id'} assert await resource.exists() is True ce = ClientError(status_code=404) resource._client.get.side_effect = ce assert await resource.exists() is False
async def test_resource_exists_exception(async_client_mock, async_res_factory): resource = async_res_factory( client=async_client_mock(methods=['get']), ) resource._client.get.return_value = {'id': 'res_id'} assert await resource.exists() is True ce = ClientError(status_code=500) resource._client.get.side_effect = ce with pytest.raises(ClientError): await resource.exists()
def test_connect_error_additional_info(): additional_info = { 'attr1': 'val1', 'attr2': 'val2', } c = ClientError( status_code=400, error_code='error_code', errors=['msg1', 'msg2'], **additional_info, ) assert c.additional_info == additional_info
def test_connect_error_unexpected_error(): assert str(ClientError()) == 'Unexpected error'