Module deeporigin.src.client

Classes

class Client
Expand source code
class Client:
    """
    A client for interacting with the DeepOrigin backend service.
    This class provides methods for making HTTP requests to the DeepOrigin backend API.
    It automatically determines the appropriate backend URL based on whether it's running
    in production or development mode.

    Methods:
        get_url(): Returns the backend service URL based on environment configuration
        get_request(endpoint, logger=None): Makes a GET request to the specified endpoint
        post_request(endpoint, data, logger=None): Makes a POST request to the specified endpoint
        >>> client = Client()
        >>> response = client.get_request("status")
        ...     print(response.json())
    """
    def __init__(self):
        self.url = self.get_url()

    def get_url(self):
        """Returns the URL for the DeepOrigin backend service.

        The URL depends on whether the service is running in production or development mode,
        as determined by the DEEP_ORIGIN environment variable.

        Returns:
            str: The backend service URL:
                - In production: http://<DEEP_ORIGIN_BENCH_ID>-backend
                - In development: http://172.17.0.1:8000

        Environment Variables:
            DEEP_ORIGIN (str): "true" for production mode, "false" for development mode
            DEEP_ORIGIN_BENCH_ID (str): The bench ID used in production URLs (default: 'cute-bear-123')
        """
        is_prod = json.loads(os.getenv("DEEP_ORIGIN", "true"))
        if is_prod:
            return f"http://{os.getenv('DEEP_ORIGIN_BENCH_ID', 'cute-bear-123')}-backend"
        else:
            return "http://172.17.0.1:8000"

    def get_request(self, endpoint: str, logger: Logger = None):
        """
        Performs a GET request to the specified endpoint.

        Args:
            endpoint (str): The API endpoint to send the GET request to.
            logger (Logger, optional): Logger instance for error logging. Defaults to None.

        Returns:
            requests.Response: Response object if request succeeds.
            None: If request fails.

        Raises:
            No exceptions are raised - errors are logged via logger.
        """
        if not logger:
            logger =  Logger("INFO", None)

        try:
            response = requests.get(f"{self.url}/{endpoint}")
            return response
        except Exception as e:
            logger.log_error(f"GET request failed: {str(e)}")
            return None

    def post_request(self, endpoint: str, data: dict, logger: Logger=None):
        """
        Send a POST request to the specified endpoint.
        Args:
            endpoint (str): The API endpoint to send the request to.
            data (dict): The data payload to send in the request body.
            logger (Logger, optional): Logger instance for error logging. If not provided, a default INFO logger will be used.

        Returns:
            requests.Response or None: Response object if request successful, None if request fails.

        Example:
            >>> client = Client("http://api.example.com")
            >>> response = client.post_request("users", {"name": "John"})
            >>> if response:
            ...     print(response.status_code)
        """
        if not logger:
            logger =  Logger("INFO", None)

        headers = {
            "Content-Type": "application/json",
        }
        try:
            response = requests.post(f"{self.url}/{endpoint}", json=data, headers=headers)
            return response
        except Exception as e:
            logger.log_error(f"POST request failed: {str(e)}")
            return None

A client for interacting with the DeepOrigin backend service. This class provides methods for making HTTP requests to the DeepOrigin backend API. It automatically determines the appropriate backend URL based on whether it's running in production or development mode.

Methods

get_url(): Returns the backend service URL based on environment configuration get_request(endpoint, logger=None): Makes a GET request to the specified endpoint post_request(endpoint, data, logger=None): Makes a POST request to the specified endpoint

>>> client = Client()
>>> response = client.get_request("status")
...     print(response.json())

Subclasses

Methods

def get_request(self,
endpoint: str,
logger: Logger = None)
Expand source code
def get_request(self, endpoint: str, logger: Logger = None):
    """
    Performs a GET request to the specified endpoint.

    Args:
        endpoint (str): The API endpoint to send the GET request to.
        logger (Logger, optional): Logger instance for error logging. Defaults to None.

    Returns:
        requests.Response: Response object if request succeeds.
        None: If request fails.

    Raises:
        No exceptions are raised - errors are logged via logger.
    """
    if not logger:
        logger =  Logger("INFO", None)

    try:
        response = requests.get(f"{self.url}/{endpoint}")
        return response
    except Exception as e:
        logger.log_error(f"GET request failed: {str(e)}")
        return None

Performs a GET request to the specified endpoint.

Args

endpoint : str
The API endpoint to send the GET request to.
logger : Logger, optional
Logger instance for error logging. Defaults to None.

Returns

requests.Response
Response object if request succeeds.
None
If request fails.

Raises

No exceptions are raised - errors are logged via logger.

def get_url(self)
Expand source code
def get_url(self):
    """Returns the URL for the DeepOrigin backend service.

    The URL depends on whether the service is running in production or development mode,
    as determined by the DEEP_ORIGIN environment variable.

    Returns:
        str: The backend service URL:
            - In production: http://<DEEP_ORIGIN_BENCH_ID>-backend
            - In development: http://172.17.0.1:8000

    Environment Variables:
        DEEP_ORIGIN (str): "true" for production mode, "false" for development mode
        DEEP_ORIGIN_BENCH_ID (str): The bench ID used in production URLs (default: 'cute-bear-123')
    """
    is_prod = json.loads(os.getenv("DEEP_ORIGIN", "true"))
    if is_prod:
        return f"http://{os.getenv('DEEP_ORIGIN_BENCH_ID', 'cute-bear-123')}-backend"
    else:
        return "http://172.17.0.1:8000"

Returns the URL for the DeepOrigin backend service.

The URL depends on whether the service is running in production or development mode, as determined by the DEEP_ORIGIN environment variable.

Returns

str
The backend service URL: - In production: >-backend - In development: http://172.17.0.1:8000

Environment Variables: DEEP_ORIGIN (str): "true" for production mode, "false" for development mode DEEP_ORIGIN_BENCH_ID (str): The bench ID used in production URLs (default: 'cute-bear-123')

def post_request(self,
endpoint: str,
data: dict,
logger: Logger = None)
Expand source code
def post_request(self, endpoint: str, data: dict, logger: Logger=None):
    """
    Send a POST request to the specified endpoint.
    Args:
        endpoint (str): The API endpoint to send the request to.
        data (dict): The data payload to send in the request body.
        logger (Logger, optional): Logger instance for error logging. If not provided, a default INFO logger will be used.

    Returns:
        requests.Response or None: Response object if request successful, None if request fails.

    Example:
        >>> client = Client("http://api.example.com")
        >>> response = client.post_request("users", {"name": "John"})
        >>> if response:
        ...     print(response.status_code)
    """
    if not logger:
        logger =  Logger("INFO", None)

    headers = {
        "Content-Type": "application/json",
    }
    try:
        response = requests.post(f"{self.url}/{endpoint}", json=data, headers=headers)
        return response
    except Exception as e:
        logger.log_error(f"POST request failed: {str(e)}")
        return None

Send a POST request to the specified endpoint.

Args

endpoint : str
The API endpoint to send the request to.
data : dict
The data payload to send in the request body.
logger : Logger, optional
Logger instance for error logging. If not provided, a default INFO logger will be used.

Returns

requests.Response or None
Response object if request successful, None if request fails.

Example

>>> client = Client("http://api.example.com")
>>> response = client.post_request("users", {"name": "John"})
>>> if response:
...     print(response.status_code)