def _on_request(self, adapter, request, **kwargs): match = self._find_match(request) # TODO(dcramer): find the correct class for this if match is None: error_msg = 'Connection refused: {0} {1}'.format(request.method, request.url) response = ConnectionError(error_msg) response.request = request self._calls.add(request, response) raise response if 'body' in match and isinstance(match['body'], Exception): self._calls.add(request, match['body']) raise match['body'] headers = {} if match['content_type'] is not None: headers['Content-Type'] = match['content_type'] if 'callback' in match: # use callback status, r_headers, body = match['callback'](request) if isinstance(body, six.text_type): body = body.encode('utf-8') body = BufferIO(body) headers.update(r_headers) elif 'body' in match: if match['adding_headers']: headers.update(match['adding_headers']) status = match['status'] body = BufferIO(match['body']) response = HTTPResponse( status=status, reason=six.moves.http_client.responses[status], body=body, headers=headers, preload_content=False, # Need to not decode_content to mimic requests decode_content=False, ) response = adapter.build_response(request, response) if not match.get('stream'): response.content # NOQA try: resp_cookies = Cookies.from_request(response.headers['set-cookie']) response.cookies = cookiejar_from_dict(dict( (v.name, v.value) for _, v in resp_cookies.items() )) except (KeyError, TypeError): pass self._calls.add(request, response) return response
def _on_request(self, adapter, request, **kwargs): match = self._find_match(request) # TODO(dcramer): find the correct class for this if match is None: error_msg = 'Connection refused: {0} {1}'.format(request.method, request.url) response = ConnectionError(error_msg) response.request = request self._calls.add(request, response) raise response if 'body' in match and isinstance(match['body'], Exception): self._calls.add(request, match['body']) raise match['body'] headers = {} if match['content_type'] is not None: headers['Content-Type'] = match['content_type'] if 'callback' in match: # use callback status, r_headers, body = match['callback'](request) if isinstance(body, six.text_type): body = body.encode('utf-8') body = BufferIO(body) headers.update(r_headers) elif 'body' in match: if match['adding_headers']: headers.update(match['adding_headers']) status = match['status'] body = BufferIO(match['body']) response = HTTPResponse( status=status, reason=six.moves.http_client.responses[status], body=body, headers=headers, preload_content=False, ) response = adapter.build_response(request, response) if not match.get('stream'): response.content # NOQA try: resp_cookies = Cookies.from_request(response.headers['set-cookie']) response.cookies = cookiejar_from_dict(dict( (v.name, v.value) for _, v in resp_cookies.items() )) except (KeyError, TypeError): pass self._calls.add(request, response) return response
def _patched_fake_send(session, request, **kwargs): try: return _fake_send(session, request, **kwargs) except NoMockAddress: request = _adapter.last_request error_msg = "Connection refused: {0} {1}".format(request.method, request.url) response = ConnectionError(error_msg) response.request = request raise response
def test_error(program): exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') program.side_effect = exc r = http('www.google.com', tolerate_error_exit_status=True) assert r.exit_status == ExitStatus.ERROR error_msg = ('ConnectionError: ' 'Connection aborted while doing a GET request to URL: ' 'http://www.google.com') assert error_msg in r.stderr
def _http_fake_send(session, request, **kwargs): try: return self._http_last_send(session, request, **kwargs) except NoMockAddress: request = _http_adapter.last_request error_msg = 'Connection refused: {0} {1}'.format( request.method, request.url) response = ConnectionError(error_msg) response.request = request raise response
def test_error(get_response): def error(msg, *args, **kwargs): global error_msg error_msg = msg % args exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc ret = main(['--ignore-stdin', 'www.google.com'], custom_log_error=error) assert ret == ExitStatus.ERROR assert error_msg == ('ConnectionError: ' 'Connection aborted while doing GET request to URL: ' 'http://www.google.com')
def _on_request(self, adapter, request, **kwargs): match, match_failed_reasons = self._find_match(request) resp_callback = self.response_callback request.params = self._parse_request_params(request.path_url) if match is None: if any( [ p.match(request.url) if isinstance(p, Pattern) else request.url.startswith(p) for p in self.passthru_prefixes ] ): logger.info("request.allowed-passthru", extra={"url": request.url}) return _real_send(adapter, request, **kwargs) error_msg = ( "Connection refused by Responses - the call doesn't " "match any registered mock.\n\n" "Request: \n" "- %s %s\n\n" "Available matches:\n" % (request.method, request.url) ) for i, m in enumerate(self._matches): error_msg += "- {} {} {}\n".format( m.method, m.url, match_failed_reasons[i] ) response = ConnectionError(error_msg) response.request = request self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise response try: response = adapter.build_response(request, match.get_response(request)) except BaseException as response: match.call_count += 1 self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise if not match.stream: response.content # NOQA response = resp_callback(response) if resp_callback else response match.call_count += 1 self._calls.add(request, response) return response
def test_error(get_response): def error(msg, *args, **kwargs): global error_msg error_msg = msg % args exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc ret = main(['--ignore-stdin', 'www.google.com'], custom_log_error=error) assert ret == ExitStatus.ERROR assert error_msg == ( 'ConnectionError: ' 'Connection aborted while doing GET request to URL: ' 'http://www.google.com')
def _on_request(self, adapter, request, **kwargs): match = self._find_match(request) resp_callback = self.response_callback if match is None: if request.url.startswith(self.passthru_prefixes): logger.info('request.allowed-passthru', extra={ 'url': request.url, }) return _real_send(adapter, request) error_msg = 'Connection refused: {0} {1}'.format( request.method, request.url) response = ConnectionError(error_msg) response.request = request self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise response try: response = adapter.build_response( request, match.get_response(request), ) except Exception as response: match.call_count += 1 self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise if not match.stream: response.content # NOQA try: resp_cookies = Cookies.from_request(response.headers['set-cookie']) response.cookies = cookiejar_from_dict( dict((v.name, v.value) for _, v in resp_cookies.items())) except (KeyError, TypeError): pass response = resp_callback(response) if resp_callback else response match.call_count += 1 self._calls.add(request, response) return response
def _on_request(self, adapter, request, **kwargs): match = self._find_match(request) resp_callback = self.response_callback if match is None: if request.url.startswith(self.passthru_prefixes): logger.info("request.allowed-passthru", extra={"url": request.url}) return _real_send(adapter, request, **kwargs) error_msg = ("Connection refused by Responses: {0} {1} doesn't " "match Responses Mock".format(request.method, request.url)) response = ConnectionError(error_msg) response.request = request self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise response try: response = adapter.build_response(request, match.get_response(request)) except Exception as response: match.call_count += 1 self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise if not match.stream: response.content # NOQA try: response.cookies = _cookies_from_headers(response.headers) except (KeyError, TypeError): pass response = resp_callback(response) if resp_callback else response match.call_count += 1 self._calls.add(request, response) return response
def _on_request(self, adapter, request, **kwargs): match = self._find_match(request) resp_callback = self.response_callback if match is None: if request.url.startswith(self.passthru_prefixes): logger.info("request.allowed-passthru", extra={"url": request.url}) return _real_send(adapter, request, **kwargs) error_msg = ( "Connection refused by Responses: {0} {1} doesn't " "match Responses Mock".format(request.method, request.url) ) response = ConnectionError(error_msg) response.request = request self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise response try: response = adapter.build_response(request, match.get_response(request)) except Exception as response: match.call_count += 1 self._calls.add(request, response) response = resp_callback(response) if resp_callback else response raise if not match.stream: response.content # NOQA try: response.cookies = _cookies_from_headers(response.headers) except (KeyError, TypeError): pass response = resp_callback(response) if resp_callback else response match.call_count += 1 self._calls.add(request, response) return response
def test_error_traceback(program): exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') program.side_effect = exc with raises(ConnectionError): http('--traceback', 'www.google.com')
def test_error_traceback(get_response): exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc with raises(ConnectionError): main(['--ignore-stdin', '--traceback', 'www.google.com'])
def test_error_traceback(get_response): exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc with raises(ConnectionError): main(['--ignore-stdin', '--traceback', 'www.google.com'])
def _on_request( self, adapter: "HTTPAdapter", request: "PreparedRequest", *, retries: Optional["_Retry"] = None, **kwargs: Any, ) -> "models.Response": # add attributes params and req_kwargs to 'request' object for further match comparison # original request object does not have these attributes request.params = self._parse_request_params(request.path_url) # type: ignore[attr-defined] request.req_kwargs = kwargs # type: ignore[attr-defined] request_url = str(request.url) match, match_failed_reasons = self._find_match(request) resp_callback = self.response_callback if match is None: if any( [ p.match(request_url) if isinstance(p, Pattern) else request_url.startswith(p) for p in self.passthru_prefixes ] ): logger.info("request.allowed-passthru", extra={"url": request_url}) return _real_send(adapter, request, **kwargs) error_msg = ( "Connection refused by Responses - the call doesn't " "match any registered mock.\n\n" "Request: \n" f"- {request.method} {request_url}\n\n" "Available matches:\n" ) for i, m in enumerate(self.registered()): error_msg += "- {} {} {}\n".format( m.method, m.url, match_failed_reasons[i] ) if self.passthru_prefixes: error_msg += "Passthru prefixes:\n" for p in self.passthru_prefixes: error_msg += "- {}\n".format(p) response = ConnectionError(error_msg) response.request = request self._calls.add(request, response) raise response if match.passthrough: logger.info("request.passthrough-response", extra={"url": request_url}) response = _real_send(adapter, request, **kwargs) # type: ignore[assignment] else: try: response = adapter.build_response( # type: ignore[no-untyped-call] request, match.get_response(request) ) except BaseException as response: match.call_count += 1 self._calls.add(request, response) raise if resp_callback: response = resp_callback(response) # type: ignore[misc] match.call_count += 1 self._calls.add(request, response) # type: ignore[misc] retries = retries or adapter.max_retries # first validate that current request is eligible to be retried. # See ``requests.packages.urllib3.util.retry.Retry`` documentation. if retries.is_retry( method=response.request.method, status_code=response.status_code # type: ignore[misc] ): try: retries = retries.increment( method=response.request.method, # type: ignore[misc] url=response.url, # type: ignore[misc] response=response, # type: ignore[misc] ) return self._on_request(adapter, request, retries=retries, **kwargs) except MaxRetryError: if retries.raise_on_status: raise return response return response