from typing import Any from pydantic import ValidationError from fansifter_common.httpclient import HTTPClientError from .models import ErrorResponse class TwilioClientError(HTTPClientError): name = "twilio_client_" @property def error(self) -> ErrorResponse | None: if self.response: try: return ErrorResponse.model_validate_json(self.response.content) except ValidationError: pass return None @property def error_data(self) -> dict[str, Any] | None: if self.error: return self.error.model_dump() return None @property def log_msg(self) -> str: if self.error: return self.error.message return self.message @property def log_extra(self) -> dict[str, Any]: extra = super().log_extra error_data = self.error_data if error_data: extra[f"{self.name}error"] = error_data return extra