def clone_response(response: httpx.Response, request: httpx.Request) -> httpx.Response: """ Clones a httpx Response for given request. """ response = httpx.Response( response.status_code, headers=response.headers, stream=response.stream, request=request, ext=dict(response.ext), ) response.read() return response
def clone_response(response: httpx.Response, request: httpx.Request) -> httpx.Response: """ Clones a httpx Response for given request. """ response = httpx.Response( response.status_code, headers=response.headers, stream=response.stream, request=request, extensions=dict(response.extensions), ) if isinstance(response.stream, Iterable): response.read() # Pre-read stream for easier call stats usage return response
def get_notification_result( self, response: Response) -> Union[str, Tuple[str, str]]: """ Get result for specified response The function returns: 'Success' or 'failure reason' or ('Unregistered', timestamp) """ if response.status_code == 200: return "Success" else: raw_data = response.read().decode("utf-8") data = json.loads(raw_data) # type: Dict[str, str] if response.status_code == 410: return data["reason"], data["timestamp"] else: return data["reason"]
def _response(self, response: Response) -> Any: if self.actions and response.status_code in self.actions: if self.actions[response.status_code] == Json: return response.json() elif self.actions[response.status_code] == Read: return response.read() elif isinstance(self.actions[response.status_code], Function): func = self.actions[response.status_code] return func.coro(*func.args, **func.kwargs) elif issubclass(self.actions[response.status_code], Exception): raise self.actions[response.status_code]() else: raise InvalidResponse() return response
def handle_resp(self, resp: Response, json: bool = True, read: bool = True ) -> Union[bool, bytes, dict, None]: """Handles resp response. Parameters ---------- resp : Response json : bool, optional by default True read : bool, optional by default True """ if resp.status_code == 200: if json: return resp.json() elif read: return resp.read() else: return True else: try: message = resp.json() except JSONDecodeError: message = None else: logging.error(message) if resp.status_code == 404: raise NotFound(message) elif resp.status_code == 400: raise BadRequest(message) elif resp.status_code == 507: raise ExceededStorage(message) elif resp.status_code == 500: raise ServerStart(message) else: resp.raise_for_status()
def handle_resp(self, resp: Response, json: bool = True) -> Union[dict, bytes, None]: """Handles resp response. Parameters ---------- resp : Response Returns ------- Any Raises ------ BadRequest UnAuthorized Forbidden RequestTimeout TooManyRequests InternalError ServiceUnavailable """ if resp.status_code not in HTTP_ERRORS: if json: return resp.json() else: return resp.read() else: try: logging.debug(resp.json()) except JSONDecodeError: pass raise HTTP_ERRORS[resp.status_code]()