Skip to content

service

dev_tool.services.api.service

log = logging.getLogger(__name__) module-attribute

APIClientService

Bases: BaseService

A service class for API client operations.

This class provides methods for making HTTP requests to APIs with built-in URL construction, header management, and error handling.

The constructor for the APIClientService class.

Parameters:

  • request (RequestService) –

    The request service for making HTTP requests.

  • base_url (str) –

    The base URL for API requests.

  • default_headers (dict[str, str] | None, default: None ) –

    Default headers to include with all requests.

Source code in dev_tool/services/api/service.py
def __init__(self, request: RequestService, base_url: str, default_headers: dict[str, str] | None = None) -> None:
    """
    The constructor for the APIClientService class.

    :param request: The request service for making HTTP requests.
    :param base_url: The base URL for API requests.
    :param default_headers: Default headers to include with all requests.
    """

    super().__init__()

    self.request = request
    self.base_url = base_url.rstrip('/')
    self.default_headers = default_headers or {}

request = request instance-attribute

base_url = base_url.rstrip('/') instance-attribute

default_headers = default_headers or {} instance-attribute

delete

A method that makes a DELETE request to the specified endpoint.

Parameters:

  • endpoint (str) –

    The API endpoint path.

  • headers (dict[str, str] | None, default: None ) –

    Additional headers for the request.

  • kwargs

    Additional parameters for the request.

Returns:

  • Response

    The HTTP response object.

Raises:

  • APIEndpointError

    If the request preparation fails.

Source code in dev_tool/services/api/service.py
def delete(self, endpoint: str, headers: dict[str, str] | None = None, **kwargs) -> httpx.Response:
    """
    A method that makes a DELETE request to the specified endpoint.

    :param endpoint: The API endpoint path.
    :param headers: Additional headers for the request.
    :param kwargs: Additional parameters for the request.
    :return: The HTTP response object.
    :raises APIEndpointError: If the request preparation fails.
    """

    try:
        url = self._build_url(endpoint, **kwargs)
        headers = self._build_headers(**(headers or {}))
    except (APIUrlError, APIHeaderError):
        raise
    except Exception:
        message = 'Failed to prepare DELETE request for endpoint'
        log.exception(message)

        raise APIEndpointError(message) from None
    else:
        return self.request.delete(url, headers=headers)

get

A method that makes a GET request to the specified endpoint.

Parameters:

  • endpoint (str) –

    The API endpoint path.

  • headers (dict[str, str] | None, default: None ) –

    Additional headers for the request.

  • kwargs

    Additional parameters for the request.

Returns:

  • Response

    The HTTP response object.

Raises:

  • APIEndpointError

    If the request preparation fails.

Source code in dev_tool/services/api/service.py
def get(self, endpoint: str, headers: dict[str, str] | None = None, **kwargs) -> httpx.Response:
    """
    A method that makes a GET request to the specified endpoint.

    :param endpoint: The API endpoint path.
    :param headers: Additional headers for the request.
    :param kwargs: Additional parameters for the request.
    :return: The HTTP response object.
    :raises APIEndpointError: If the request preparation fails.
    """

    try:
        url = self._build_url(endpoint, **kwargs)
        headers = self._build_headers(**(headers or {}))
    except (APIUrlError, APIHeaderError):
        raise
    except Exception:
        message = 'Failed to prepare GET request for endpoint'
        log.exception(message)

        raise APIEndpointError(message) from None
    else:
        return self.request.get(url, headers=headers)

patch

A method that makes a PATCH request to the specified endpoint.

Parameters:

  • endpoint (str) –

    The API endpoint path.

  • headers (dict[str, str] | None, default: None ) –

    Additional headers for the request.

  • kwargs

    Additional parameters for the request.

Returns:

  • Response

    The HTTP response object.

Raises:

  • APIEndpointError

    If the request preparation fails.

Source code in dev_tool/services/api/service.py
def patch(self, endpoint: str, headers: dict[str, str] | None = None, **kwargs) -> httpx.Response:
    """
    A method that makes a PATCH request to the specified endpoint.

    :param endpoint: The API endpoint path.
    :param headers: Additional headers for the request.
    :param kwargs: Additional parameters for the request.
    :return: The HTTP response object.
    :raises APIEndpointError: If the request preparation fails.
    """

    try:
        url = self._build_url(endpoint, **kwargs)
        headers = self._build_headers(**(headers or {}))
    except (APIUrlError, APIHeaderError):
        raise
    except Exception:
        message = 'Failed to prepare PATCH request for endpoint'
        log.exception(message)

        raise APIEndpointError(message) from None
    else:
        return self.request.patch(url, headers=headers, **kwargs)

post

A method that makes a POST request to the specified endpoint.

Parameters:

  • endpoint (str) –

    The API endpoint path.

  • headers (dict[str, str] | None, default: None ) –

    Additional headers for the request.

  • kwargs

    Additional parameters for the request.

Returns:

  • Response

    The HTTP response object.

Raises:

  • APIEndpointError

    If the request preparation fails.

Source code in dev_tool/services/api/service.py
def post(self, endpoint: str, headers: dict[str, str] | None = None, **kwargs) -> httpx.Response:
    """
    A method that makes a POST request to the specified endpoint.

    :param endpoint: The API endpoint path.
    :param headers: Additional headers for the request.
    :param kwargs: Additional parameters for the request.
    :return: The HTTP response object.
    :raises APIEndpointError: If the request preparation fails.
    """

    try:
        url = self._build_url(endpoint, **kwargs)
        headers = self._build_headers(**(headers or {}))
    except (APIUrlError, APIHeaderError):
        raise
    except Exception:
        message = 'Failed to prepare POST request for endpoint'
        log.exception(message)

        raise APIEndpointError(message) from None
    else:
        return self.request.post(url, headers=headers, **kwargs)

put

A method that makes a PUT request to the specified endpoint.

Parameters:

  • endpoint (str) –

    The API endpoint path.

  • headers (dict[str, str] | None, default: None ) –

    Additional headers for the request.

  • kwargs

    Additional parameters for the request.

Returns:

  • Response

    The HTTP response object.

Raises:

  • APIEndpointError

    If the request preparation fails.

Source code in dev_tool/services/api/service.py
def put(self, endpoint: str, headers: dict[str, str] | None = None, **kwargs) -> httpx.Response:
    """
    A method that makes a PUT request to the specified endpoint.

    :param endpoint: The API endpoint path.
    :param headers: Additional headers for the request.
    :param kwargs: Additional parameters for the request.
    :return: The HTTP response object.
    :raises APIEndpointError: If the request preparation fails.
    """

    try:
        url = self._build_url(endpoint, **kwargs)
        headers = self._build_headers(**(headers or {}))
    except (APIUrlError, APIHeaderError):
        raise
    except Exception:
        message = 'Failed to prepare PUT request for endpoint'
        log.exception(message)

        raise APIEndpointError(message) from None
    else:
        return self.request.put(url, headers=headers, **kwargs)

stream

A method that creates a streaming request to the specified endpoint.

Parameters:

  • method (str) –

    The HTTP method to use.

  • endpoint (str) –

    The API endpoint path.

  • headers (dict[str, str] | None, default: None ) –

    Additional headers for the request.

  • kwargs

    Additional parameters for the request.

Returns:

  • ContextManager[Response]

    A context manager for the streaming response.

Raises:

  • APIEndpointError

    If the request preparation fails.

Source code in dev_tool/services/api/service.py
def stream(self, method: str, endpoint: str, headers: dict[str, str] | None = None, **kwargs) -> ContextManager[httpx.Response]:
    """
    A method that creates a streaming request to the specified endpoint.

    :param method: The HTTP method to use.
    :param endpoint: The API endpoint path.
    :param headers: Additional headers for the request.
    :param kwargs: Additional parameters for the request.
    :return: A context manager for the streaming response.
    :raises APIEndpointError: If the request preparation fails.
    """

    try:
        url = self._build_url(endpoint, **kwargs)
        headers = self._build_headers(**(headers or {}))
    except (APIUrlError, APIHeaderError):
        raise
    except Exception:
        message = 'Failed to prepare {method} stream request for endpoint'
        log.exception(message)

        raise APIEndpointError(message) from None
    else:
        return self.request.stream(method, url, headers=headers, **kwargs)