# Module `redvox.cloud.api`

This module contains methods for interacting with the RedVox cloud based API.

Expand source code

    """
    This module contains methods for interacting with the RedVox cloud based API.
    """
    # from dataclasses import dataclass
    from typing import Any, Callable, Dict, Optional

    import requests

    from redvox.cloud.config import RedVoxConfig
    import redvox.cloud.errors as cloud_errors
    from redvox.cloud.routes import RoutesV1

    def post_req(
        redvox_config: RedVoxConfig,
        route: str,
        req: Any,
        resp_transform: Callable[[requests.Response], Any],
        session: Optional[requests.Session] = None,
        timeout: Optional[float] = 10.0,
    ) -> Optional[Any]:
        """
        Performs an HTTP POST request.
        :param redvox_config: API endpoint configuration.
        :param route: Route to POST to.
        :param req: Request to send in POST.
        :param resp_transform: Function to transform the response into something we can use.
        :param session: The HTTP session.
        :param timeout: An (optional) timeout.
        :return: The optional response.
        """
        url: str = redvox_config.url(route)
        # noinspection Mypy
        req_dict: Dict = req.to_dict()

        try:
            if session:
                resp: requests.Response = session.post(url, json=req_dict, timeout=timeout)
            else:
                resp = requests.post(url, json=req_dict, timeout=timeout)
            if resp.status_code == 200:
                # noinspection Mypy
                return resp_transform(resp)
            else:
                return None
        except requests.RequestException as ex:
            raise cloud_errors.ApiConnectionError(
                f"Error making POST request to {url}: with body: {req_dict}: {ex}"
            )

    def health_check(
        redvox_config: RedVoxConfig,
        session: Optional[requests.Session] = None,
        timeout: Optional[float] = 10.0,
    ) -> bool:
        """
        Check that the Cloud API endpoint is up.
        :param redvox_config: The API config.
        :param session: An (optional) session for re-using an HTTP client.
        :param timeout: An optional timeout.
        :return: True if the endpoint is up, False otherwise.
        """
        url: str = redvox_config.url(RoutesV1.HEALTH_CHECK)

        if session:
            resp: requests.Response = session.get(url, timeout=timeout)
        else:
            resp = requests.get(url, timeout=timeout)

        if resp.status_code == 200:
            return True

        return False

## Functions

`def health_check(redvox_config: RedVoxConfig, session: Optional[requests.sessions.Session] = None, timeout: Optional[float] = 10.0) ‑> bool`

  Check that the Cloud API endpoint is up. :param redvox_config: The API config. :param session: An (optional) session for re-using an HTTP client. :param timeout: An optional timeout. :return: True if the endpoint is up, False otherwise.

  Expand source code

      def health_check(
          redvox_config: RedVoxConfig,
          session: Optional[requests.Session] = None,
          timeout: Optional[float] = 10.0,
      ) -> bool:
          """
          Check that the Cloud API endpoint is up.
          :param redvox_config: The API config.
          :param session: An (optional) session for re-using an HTTP client.
          :param timeout: An optional timeout.
          :return: True if the endpoint is up, False otherwise.
          """
          url: str = redvox_config.url(RoutesV1.HEALTH_CHECK)

          if session:
              resp: requests.Response = session.get(url, timeout=timeout)
          else:
              resp = requests.get(url, timeout=timeout)

          if resp.status_code == 200:
              return True

          return False

`def post_req(redvox_config: RedVoxConfig, route: str, req: Any, resp_transform: Callable[[requests.models.Response], Any], session: Optional[requests.sessions.Session] = None, timeout: Optional[float] = 10.0) ‑> Optional[Any]`

  Performs an HTTP POST request. :param redvox_config: API endpoint configuration. :param route: Route to POST to. :param req: Request to send in POST. :param resp_transform: Function to transform the response into something we can use. :param session: The HTTP session. :param timeout: An (optional) timeout. :return: The optional response.

  Expand source code

      def post_req(
          redvox_config: RedVoxConfig,
          route: str,
          req: Any,
          resp_transform: Callable[[requests.Response], Any],
          session: Optional[requests.Session] = None,
          timeout: Optional[float] = 10.0,
      ) -> Optional[Any]:
          """
          Performs an HTTP POST request.
          :param redvox_config: API endpoint configuration.
          :param route: Route to POST to.
          :param req: Request to send in POST.
          :param resp_transform: Function to transform the response into something we can use.
          :param session: The HTTP session.
          :param timeout: An (optional) timeout.
          :return: The optional response.
          """
          url: str = redvox_config.url(route)
          # noinspection Mypy
          req_dict: Dict = req.to_dict()

          try:
              if session:
                  resp: requests.Response = session.post(url, json=req_dict, timeout=timeout)
              else:
                  resp = requests.post(url, json=req_dict, timeout=timeout)
              if resp.status_code == 200:
                  # noinspection Mypy
                  return resp_transform(resp)
              else:
                  return None
          except requests.RequestException as ex:
              raise cloud_errors.ApiConnectionError(
                  f"Error making POST request to {url}: with body: {req_dict}: {ex}"
              )