Skip to content

HTTP Client


openhivenpy.gateway.http.HTTP

HTTP-Client for requests and interaction with the Hiven API

loop: Optional[asyncio.AbstractEventLoop] property readonly

ready: Optional[bool] property readonly

session: Optional[aiohttp.ClientSession] property readonly

token: Optional[str] property readonly

Methods

__init__(self, client, *, host, api_version) special

:param client: The used HivenClient :param host: Url for the API which will be used to interact with Hiven. Defaults to the pre-set environment host (api.hiven.io) :param api_version: Version string for the API Version. Defaults to the pre-set environment version (defaults to v1)

Source code in openhivenpy\gateway\http.py
def __init__(self, client: HivenClient, *, host: str, api_version: str):
    """
    :param client: The used HivenClient
    :param host: Url for the API which will be used to interact with Hiven.
     Defaults to the pre-set environment host (api.hiven.io)
    :param api_version: Version string for the API Version. Defaults to the
     pre-set environment version (defaults to v1)
    """
    self.client = client
    self.host = host
    self.api_version = api_version
    self.api_url = URL(
        request_url_format.format(self.host, self.api_version)
    )
    self.headers = {
        "Authorization": client.token,
        "Host": self.host
    }
    self._ready = False
    self._session = None  # Will be created during start of connection

    # Current request/Latest request
    self._request = None

__repr__(self) special

Source code in openhivenpy\gateway\http.py
def __repr__(self) -> str:
    info = [
        ('ready', self.ready),
        ('host', self.host),
        ('api_version', self.api_version),
        ('headers', self.headers)
    ]
    return '<HTTP {}>'.format(' '.join('%s=%s' % t for t in info))

__str__(self) special

Source code in openhivenpy\gateway\http.py
def __str__(self) -> str:
    return repr(self)

close(self) async

Closes the HTTP session that is currently connected to Hiven!

:return: True if it was successful else False

Source code in openhivenpy\gateway\http.py
async def close(self) -> bool:
    """
    Closes the HTTP session that is currently connected to Hiven!

    :return: True if it was successful else False
    """
    try:
        await self.session.close()
        self._ready = False
        return True

    except Exception as e:
        utils.log_traceback(
            brief=f"[HTTP] Failed to close HTTP Session:",
            exc_info=sys.exc_info()
        )
        raise RuntimeError("Failed to stop the HTTP client") from e

connect(self) async

Establishes for the HTTP a connection to Hiven

:return: The created aiohttp.ClientSession

Source code in openhivenpy\gateway\http.py
async def connect(self) -> Optional[aiohttp.ClientSession]:
    """
    Establishes for the HTTP a connection to Hiven

    :return: The created aiohttp.ClientSession
    """
    try:
        trace_config = aiohttp.TraceConfig()
        trace_config.on_request_start.append(HTTPTraceback.on_request_start)
        trace_config.on_request_end.append(HTTPTraceback.on_request_end)
        trace_config.on_request_exception.append(HTTPTraceback.on_request_exception)
        trace_config.on_request_redirect.append(HTTPTraceback.on_request_redirect)
        trace_config.on_connection_queued_start.append(HTTPTraceback.on_connection_queued_start)
        trace_config.on_response_chunk_received.append(HTTPTraceback.on_response_chunk_received)

        self._session = aiohttp.ClientSession(trace_configs=[trace_config])
        self._ready = True

        resp = await self.get("/users/@me", timeout=30)
        resp_json: dict = await resp.json()

        logger.info("[HTTP] Session was successfully created!")
        self.client.storage.update_client_user(resp_json['data'])
        return self.session

    except Exception as e:
        utils.log_traceback(
            brief=f"Failed to create HTTP-Session:",
            exc_info=sys.exc_info()
        )
        self._ready = False
        await self.session.close()

        raise SessionCreateError(f"Failed to create HTTP-Session") from e

delete(self, endpoint, *, json=None, timeout=15, headers=None, retry_on_rate_limit=True, **kwargs) async

Wrapped HTTP 'DELETE' for a specified endpoint.

:param endpoint: Url place in url format '/../../..' Will be appended to the standard url: 'https://api.hiven.io/{version}' :param json: JSON format data that will be appended to the request :param timeout: Time the server has time to respond before the connection timeouts. Defaults to 15 :param headers: Defaults to the normal headers. Note: Changing content type can make the request break. Use with caution! :param kwargs: Other parameter for requesting. See https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession for more info :param retry_on_rate_limit: Should the request retry after a rate_limit was received. Defaults to True :return: Returns the ClientResponse object if successful and else returns None :raises HTTPRequestTimeoutError: If the set timeout is hit :raises HTTPError: If any HTTP Error is hit during processing

Source code in openhivenpy\gateway\http.py
async def delete(
        self,
        endpoint: str,
        *,
        json: Optional[dict] = None,
        timeout: Optional[int] = 15,
        headers: Optional[dict] = None,
        retry_on_rate_limit: bool = True,
        **kwargs
) -> aiohttp.ClientResponse:
    """
    Wrapped HTTP 'DELETE' for a specified endpoint.

    :param endpoint: Url place in url format '/../../..' Will be appended
     to the standard url: 'https://api.hiven.io/{version}'
    :param json: JSON format data that will be appended to the request
    :param timeout: Time the server has time to respond before the
     connection timeouts. Defaults to 15
    :param headers: Defaults to the normal headers. Note: Changing content
     type can make the request break. Use with caution!
    :param kwargs: Other parameter for requesting. See
     https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession
     for more info
    :param retry_on_rate_limit: Should the request retry after a rate_limit
     was received. Defaults to True
    :return: Returns the ClientResponse object if successful and else
     returns `None`
    :raises HTTPRequestTimeoutError: If the set timeout is hit
    :raises HTTPError: If any HTTP Error is hit during processing
    """
    return await self.raw_request(
        endpoint,
        method="DELETE",
        json=json,
        timeout=timeout,
        headers=headers,
        retry_on_rate_limit=retry_on_rate_limit,
        **kwargs
    )

get(self, endpoint, *, json=None, timeout=15, headers=None, retry_on_rate_limit=True, **kwargs) async

Wrapped HTTP 'GET' request for a specified endpoint

:param endpoint: Url place in url format '/../../..' Will be appended to the standard url: 'https://api.hiven.io/{version}' :param json: JSON format data that will be appended to the request :param timeout: Time the server has time to respond before the connection timeouts. Defaults to 15 :param headers: Defaults to the normal headers. Note: Changing content type can make the request break. Use with caution! :param kwargs: Other parameter for requesting. See https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession for more info :param retry_on_rate_limit: Should the request retry after a rate_limit was received. Defaults to True :return: Returns the ClientResponse object if successful and else returns None :raises HTTPRequestTimeoutError: If the set timeout is hit :raises HTTPError: If any HTTP Error is hit during processing

Source code in openhivenpy\gateway\http.py
async def get(
        self,
        endpoint: str,
        *,
        json: Optional[dict] = None,
        timeout: Optional[int] = 15,
        headers: Optional[dict] = None,
        retry_on_rate_limit: bool = True,
        **kwargs
) -> aiohttp.ClientResponse:
    """
    Wrapped HTTP 'GET' request for a specified endpoint

    :param endpoint: Url place in url format '/../../..' Will be appended
     to the standard url: 'https://api.hiven.io/{version}'
    :param json: JSON format data that will be appended to the request
    :param timeout: Time the server has time to respond before the
     connection timeouts. Defaults to 15
    :param headers: Defaults to the normal headers. Note: Changing content
     type can make the request break. Use with caution!
    :param kwargs: Other parameter for requesting. See
    https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession
     for more info
    :param retry_on_rate_limit: Should the request retry after a rate_limit
     was received. Defaults to True
    :return: Returns the ClientResponse object if successful and else
     returns `None`
    :raises HTTPRequestTimeoutError: If the set timeout is hit
    :raises HTTPError: If any HTTP Error is hit during processing
    """
    return await self.raw_request(
        endpoint,
        method="GET",
        json=json,
        headers=headers,
        timeout=timeout,
        retry_on_rate_limit=retry_on_rate_limit,
        **kwargs
    )

http_request(self, endpoint, method, json, headers, retry_on_rate_limit, **kwargs) async

The Function that stores the request and the handling of exceptions! Will be used as a variable so the status of the request can be seen by the asyncio.Task status!

:param endpoint: Endpoint of the request :param method: HTTP method of the request :param json: Additional JSON Data if it exists :param headers: Headers that will be sent! Defaults to the ones that were created during initialisation :param kwargs: Additional Parameter for the aiohttp HTTP Request :param retry_on_rate_limit: Should the request retry after a rate_limit was received. :return: Returns the aiohttp.ClientResponse object :raises HTTPNotFoundError: If 404 is returned :raises HTTPRateLimitError: If a rate-limit is received (429) and retry_on_rate_limit is False :raises HTTPInternalServerError: If 5** is returned :raises HTTPReceivedNoDataError: If no data is returned and the code is not 204 (no data) :raises HTTPFailedRequestError: If no success object is returned

Source code in openhivenpy\gateway\http.py
async def http_request(
        self,
        endpoint: str,
        method: str,
        json: dict,
        headers: dict,
        retry_on_rate_limit: bool,
        **kwargs
) -> Union[aiohttp.ClientResponse, None]:
    """
    The Function that stores the request and the handling of
    exceptions! Will be used as a variable so the status of the request
    can be seen by the asyncio.Task status!

    :param endpoint: Endpoint of the request
    :param method: HTTP method of the request
    :param json: Additional JSON Data if it exists
    :param headers: Headers that will be sent! Defaults to the ones
     that were created during initialisation
    :param kwargs: Additional Parameter for the aiohttp HTTP Request
    :param retry_on_rate_limit: Should the request retry after a
     rate_limit was received.
    :return: Returns the aiohttp.ClientResponse object
    :raises HTTPNotFoundError: If 404 is returned
    :raises HTTPRateLimitError: If a rate-limit is received (429) and
     retry_on_rate_limit is False
    :raises HTTPInternalServerError: If 5** is returned
    :raises HTTPReceivedNoDataError: If no data is returned and the code is
     not 204 (no data)
    :raises HTTPFailedRequestError: If no success object is returned
    """

    if not self._ready:
        raise HTTPSessionNotReadyError()

    # Creating a new ClientTimeout Instance which will default to None
    # since the Timeout was reported to cause errors! Timeouts are
    # therefore handled in a regular `asyncio.wait_for`
    _timeout = aiohttp.ClientTimeout(total=None)

    headers = self.headers if headers is None else headers
    url: False = f"{self.api_url.human_repr()}{endpoint}"

    while True:
        async with self.session.request(
                method=method,
                url=url,
                headers=headers,
                timeout=_timeout,
                json=json,
                **kwargs
        ) as _resp:
            http_resp_code = _resp.status
            data = await _resp.read()  # Raw response data

            if http_resp_code == 404:
                raise HTTPNotFoundError()
            elif http_resp_code == 429:
                logger.debug(
                    f"[HTTP] {http_resp_code} - "
                    f"Received rate-limit! Param 'retry_on_rate_limit' is "
                    f"{retry_on_rate_limit}"
                )

                if retry_on_rate_limit is False:
                    raise HTTPRateLimitError()

                if data:
                    # "rate_limit", { "expires_at": "<unix-timestamp>"}
                    _json_data = json_decoder.loads(data)

                    unix_ts = time.time()
                    retry_after: int = utils.safe_convert(
                        dtype=int,
                        value=_json_data.get("expires_at"),
                        default=5
                    ) - unix_ts
                else:
                    retry_after: int = 5

                # min additional 0.1s
                await asyncio.sleep(retry_after + 0.1)
                continue
            elif http_resp_code >= 500:
                raise HTTPInternalServerError(
                    f"Failed to perform request due to Hiven internal "
                    f"server error [Code: {http_resp_code}]"
                )

            if not data:
                if http_resp_code != 204:
                    raise HTTPReceivedNoDataError(
                        "Received empty response from the Hiven "
                        "Servers"
                    )

            # Loading the data in json => will fail if not json
            _json_data = json_decoder.loads(data)
            # Fetching the success item <== bool
            _success = _json_data.get('success')

            if _success:
                logger.debug(
                    f"[HTTP] {http_resp_code} - "
                    f"Request was successful and received expected "
                    f"data"
                )
                return _resp
            else:
                # If an error occurred the response body will contain
                # an error field
                _error = _json_data.get('error')
                if _error:
                    err_code = _error.get('code')
                    err_msg = _error.get('message')

                    raise HTTPFailedRequestError(
                        f"Failed HTTP request with {http_resp_code} -> "
                        f"'{err_code}': '{err_msg}'"
                    )
                else:
                    raise HTTPFailedRequestError(
                        f"Failed HTTP request with {http_resp_code} -> "
                        f"Response: None "
                    )

options(self, endpoint, *, json=None, timeout=15, headers=None, retry_on_rate_limit=True, **kwargs) async

Wrapped HTTP 'OPTIONS' for a specified endpoint.

Requests permission for performing communication with a URL or server

:param endpoint: Url place in url format '/../../..' Will be appended to the standard url: 'https://api.hiven.io/{version}' :param json: JSON format data that will be appended to the request :param timeout: Time the server has time to respond before the connection timeouts. Defaults to 15 :param headers: Defaults to the normal headers. Note: Changing content type can make the request break. Use with caution! :param kwargs: Other parameter for requesting. See https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession for more info :param retry_on_rate_limit: Should the request retry after a rate_limit was received. Defaults to True :return: Returns the ClientResponse object if successful and else returns None :raises HTTPRequestTimeoutError: If the set timeout is hit :raises HTTPError: If any HTTP Error is hit during processing

Source code in openhivenpy\gateway\http.py
async def options(
        self,
        endpoint: str,
        *,
        json: Optional[dict] = None,
        timeout: Optional[int] = 15,
        headers: Optional[dict] = None,
        retry_on_rate_limit: bool = True,
        **kwargs
) -> aiohttp.ClientResponse:
    """
    Wrapped HTTP 'OPTIONS' for a specified endpoint.

    Requests permission for performing communication with a URL or server

    :param endpoint: Url place in url format '/../../..' Will be appended
     to the standard url: 'https://api.hiven.io/{version}'
    :param json: JSON format data that will be appended to the request
    :param timeout: Time the server has time to respond before the
     connection timeouts. Defaults to 15
    :param headers: Defaults to the normal headers. Note: Changing content
     type can make the request break. Use with caution!
    :param kwargs: Other parameter for requesting. See
     https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession
     for more info
    :param retry_on_rate_limit: Should the request retry after a rate_limit
     was received. Defaults to True
    :return: Returns the ClientResponse object if successful and else
     returns `None`
    :raises HTTPRequestTimeoutError: If the set timeout is hit
    :raises HTTPError: If any HTTP Error is hit during processing
    """
    return await self.raw_request(
        endpoint,
        method="OPTIONS",
        json=json,
        headers=headers,
        timeout=timeout,
        retry_on_rate_limit=retry_on_rate_limit,
        **kwargs
    )

patch(self, endpoint, *, json=None, timeout=15, headers=None, retry_on_rate_limit=True, **kwargs) async

Wrapped HTTP 'PATCH' for a specified endpoint.

:param endpoint: Url place in url format '/../../..' Will be appended to the standard url: 'https://api.hiven.io/{version}' :param json: JSON format data that will be appended to the request :param timeout: Time the server has time to respond before the connection timeouts. Defaults to 15 :param headers: Defaults to the normal headers. Note: Changing content type can make the request break. Use with caution! :param kwargs: Other parameter for requesting. See https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession for more info :param retry_on_rate_limit: Should the request retry after a rate_limit was received. Defaults to True :return: Returns the ClientResponse object if successful and else returns None :raises HTTPRequestTimeoutError: If the set timeout is hit :raises HTTPError: If any HTTP Error is hit during processing

Source code in openhivenpy\gateway\http.py
async def patch(
        self,
        endpoint: str,
        *,
        json: Optional[dict] = None,
        timeout: Optional[int] = 15,
        headers: Optional[dict] = None,
        retry_on_rate_limit: bool = True,
        **kwargs
) -> aiohttp.ClientResponse:
    """
    Wrapped HTTP 'PATCH' for a specified endpoint.

    :param endpoint: Url place in url format '/../../..' Will be appended
     to the standard url: 'https://api.hiven.io/{version}'
    :param json: JSON format data that will be appended to the request
    :param timeout: Time the server has time to respond before the
     connection timeouts. Defaults to 15
    :param headers: Defaults to the normal headers. Note: Changing content
     type can make the request break. Use with caution!
    :param kwargs: Other parameter for requesting. See
    https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession
     for more info
    :param retry_on_rate_limit: Should the request retry after a rate_limit
     was received. Defaults to True
    :return: Returns the ClientResponse object if successful and else
     returns `None`
    :raises HTTPRequestTimeoutError: If the set timeout is hit
    :raises HTTPError: If any HTTP Error is hit during processing
    """
    # If no custom headers were passed a new one will be created and used
    if headers is None:
        # Creating a duplicate header of the default one
        headers = dict(self.headers)

        # Requires the Content-Type to be specified since else it cannot
        # recognise the json-data in the body!
        headers['Content-Type'] = 'application/json'

    return await self.raw_request(
        endpoint,
        method="PATCH",
        json=json,
        headers=headers,
        timeout=timeout,
        retry_on_rate_limit=retry_on_rate_limit,
        **kwargs
    )

post(self, endpoint, *, json=None, timeout=15, headers=None, retry_on_rate_limit=True, **kwargs) async

Wrapped HTTP 'POST' for a specified endpoint.

:param endpoint: Url place in url format '/../../..' Will be appended to the standard url: 'https://api.hiven.io/{version}' :param json: JSON format data that will be appended to the request :param timeout: Time the server has time to respond before the connection timeouts. Defaults to 15 :param headers: Defaults to the normal headers. Note: Changing content type can make the request break. Use with caution! :param kwargs: Other parameter for requesting. See https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession for more info :param retry_on_rate_limit: Should the request retry after a rate_limit was received. Defaults to True :return: Returns the ClientResponse object if successful and else returns None :raises HTTPRequestTimeoutError: If the set timeout is hit :raises HTTPError: If any HTTP Error is hit during processing

Source code in openhivenpy\gateway\http.py
async def post(
        self,
        endpoint: str,
        *,
        json: Optional[dict] = None,
        timeout: Optional[int] = 15,
        headers: Optional[dict] = None,
        retry_on_rate_limit: bool = True,
        **kwargs
) -> aiohttp.ClientResponse:
    """
    Wrapped HTTP 'POST' for a specified endpoint.

    :param endpoint: Url place in url format '/../../..' Will be appended
     to the standard url: 'https://api.hiven.io/{version}'
    :param json: JSON format data that will be appended to the request
    :param timeout: Time the server has time to respond before the
     connection timeouts. Defaults to 15
    :param headers: Defaults to the normal headers. Note: Changing content
     type can make the request break. Use with caution!
    :param kwargs: Other parameter for requesting. See
     https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession
     for more info
    :param retry_on_rate_limit: Should the request retry after a rate_limit
     was received. Defaults to True
    :return: Returns the ClientResponse object if successful and else
     returns `None`
    :raises HTTPRequestTimeoutError: If the set timeout is hit
    :raises HTTPError: If any HTTP Error is hit during processing
    """
    # If no custom headers were passed a new one will be created and used
    if headers is None:
        # Creating a duplicate header of the default one
        headers = dict(self.headers)

        # Requires the Content-Type to be specified since else it cannot
        # recognise the json-data in the body!
        headers['Content-Type'] = 'application/json'

    return await self.raw_request(
        endpoint,
        method="POST",
        json=json,
        headers=headers,
        timeout=timeout,
        retry_on_rate_limit=retry_on_rate_limit,
        **kwargs
    )

put(self, endpoint, *, json=None, timeout=15, headers=None, retry_on_rate_limit=True, **kwargs) async

Wrapped HTTP 'PUT' for a specified endpoint.

Similar to post, but multiple requests do not affect performance

:param endpoint: Url place in url format '/../../..' Will be appended to the standard url: 'https://api.hiven.io/{version}' :param json: JSON format data that will be appended to the request :param timeout: Time the server has time to respond before the connection timeouts. Defaults to 15 :param headers: Defaults to the normal headers. Note: Changing content type can make the request break. Use with caution! :param kwargs: Other parameter for requesting. See https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession for more info :param retry_on_rate_limit: Should the request retry after a rate_limit was received. Defaults to True :return: Returns the ClientResponse object if successful and else returns None :raises HTTPRequestTimeoutError: If the set timeout is hit :raises HTTPError: If any HTTP Error is hit during processing

Source code in openhivenpy\gateway\http.py
async def put(
        self,
        endpoint: str,
        *,
        json: Optional[dict] = None,
        timeout: Optional[int] = 15,
        headers: Optional[dict] = None,
        retry_on_rate_limit: bool = True,
        **kwargs
) -> aiohttp.ClientResponse:
    """
    Wrapped HTTP 'PUT' for a specified endpoint.

    Similar to post, but multiple requests do not affect performance

    :param endpoint: Url place in url format '/../../..' Will be appended
     to the standard url: 'https://api.hiven.io/{version}'
    :param json: JSON format data that will be appended to the request
    :param timeout: Time the server has time to respond before the
     connection timeouts. Defaults to 15
    :param headers: Defaults to the normal headers. Note: Changing content
     type can make the request break. Use with caution!
    :param kwargs: Other parameter for requesting. See
    https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession
     for more info
    :param retry_on_rate_limit: Should the request retry after a rate_limit
     was received. Defaults to True
    :return: Returns the ClientResponse object if successful and else
     returns `None`
    :raises HTTPRequestTimeoutError: If the set timeout is hit
    :raises HTTPError: If any HTTP Error is hit during processing
    """
    # If no custom headers were passed a new one will be created and used
    if headers is None:
        # Creating a duplicate header of the default one
        headers = dict(self.headers)

        # Requires the Content-Type to be specified since else it cannot
        # recognise the json-data in the body!
        headers['Content-Type'] = 'application/json'

    return await self.raw_request(
        endpoint,
        method="PUT",
        json=json,
        timeout=timeout,
        headers=headers,  # Passing the new header for the request
        retry_on_rate_limit=retry_on_rate_limit,
        **kwargs
    )

raw_request(self, endpoint, *, method='GET', json=None, timeout=15, headers=None, retry_on_rate_limit=True, **kwargs) async

Wrapped HTTP request for a specified endpoint.

:param endpoint: Url place in url format '/../../..' Will be appended to the standard url: 'https://api.hiven.io/{version}' :param json: JSON format data that will be appended to the request :param timeout: Time the server has time to respond before the connection timeouts. Defaults to 15 :param method: HTTP Method that should be used to perform the request :param headers: Defaults to the normal headers. Note: Changing content type can make the request break. Use with caution! :param kwargs: Other parameter for requesting. See https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession for more info :param retry_on_rate_limit: Should the request retry after a rate_limit was received. Defaults to True :return: Returns the aiohttp.ClientResponse object :raises HTTPRequestTimeoutError: If the set timeout is hit :raises HTTPError: If any HTTP Error is hit during processing

Source code in openhivenpy\gateway\http.py
async def raw_request(
        self,
        endpoint: str,
        *,
        method: Optional[str] = "GET",
        json: Optional[dict] = None,
        timeout: Optional[int] = 15,
        headers: Optional[dict] = None,  # Defaults to an empty header,
        retry_on_rate_limit: bool = True,
        **kwargs
) -> Union[aiohttp.ClientResponse, None]:
    """
    Wrapped HTTP request for a specified endpoint.

    :param endpoint: Url place in url format '/../../..' Will be appended
     to the standard url: 'https://api.hiven.io/{version}'
    :param json: JSON format data that will be appended to the request
    :param timeout: Time the server has time to respond before the
     connection timeouts. Defaults to 15
    :param method: HTTP Method that should be used to perform the request
    :param headers: Defaults to the normal headers. Note: Changing content
     type can make the request break. Use with caution!
    :param kwargs: Other parameter for requesting. See
     https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession
     for more info
    :param retry_on_rate_limit: Should the request retry after a rate_limit
     was received. Defaults to True
    :return: Returns the aiohttp.ClientResponse object
    :raises HTTPRequestTimeoutError: If the set timeout is hit
    :raises HTTPError: If any HTTP Error is hit during processing
    """
    try:
        http_client_response = await asyncio.wait_for(
            self.http_request(
                endpoint, method, json, headers, retry_on_rate_limit,
                **kwargs
            ),
            timeout=timeout
        )
    except asyncio.CancelledError:
        logger.warning(
            f"[HTTP] >> Request '{method.upper()}' for endpoint "
            f"'{endpoint}' was cancelled!"
        )
        return

    except asyncio.TimeoutError:
        raise HTTPRequestTimeoutError()

    except Exception as e:
        utils.log_traceback(
            brief=f"HTTP '{method.upper()}' failed with endpoint: "
                  f"{self.host}{endpoint}:",
            exc_info=sys.exc_info()
        )
        raise HTTPError(
            f"HTTP '{method.upper()}' failed with endpoint: "
            f"{self.host}{endpoint}: "
        ) from e

    # Returning the response instance
    return http_client_response

Last update: 2021-08-21