Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
 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"]
Esempio n. 4
0
    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
Esempio n. 5
0
    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()
Esempio n. 6
0
    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]()