from typing import Any import httpx class HTTPClientError(Exception): name = "http_client_" def __init__( self, message: str = "HTTP client error.", *, request: httpx.Request | None = None, response: httpx.Response | None = None, ): self.message = message self.request = request self.response = response def __str__(self) -> str: return self.message @property def status_code(self) -> int: if self.response is not None: return self.response.status_code return 500 @property def log_msg(self) -> str: return self.message @property def log_extra(self) -> dict[str, Any]: extra: dict[str, Any] = {} if self.request is not None: extra[f"{self.name}request_method"] = self.request.method extra[f"{self.name}request_path"] = self.request.url.path if self.response is not None: extra[f"{self.name}response_status_code"] = self.response.status_code return extra