from functools import cached_property from typing import Any from fansifter_common.httpclient import HTTPClientError from pydantic import ValidationError from app.adapters.tiktok.types import ErrorResponse class TikTokClientError(HTTPClientError): name = "tiktok_client_" @cached_property def tiktok_error(self) -> ErrorResponse | None: if self.response: try: error_response = ErrorResponse.model_validate_json( self.response.content ) except ValidationError: pass else: return error_response return None @property def log_msg(self) -> str: if self.tiktok_error: return self.tiktok_error.message or self.message return self.message @property def log_extra(self) -> dict[str, Any]: extra = super().log_extra if self.tiktok_error: extra[f"{self.name}response_error_code"] = self.tiktok_error.code extra[f"{self.name}response_error_message"] = self.tiktok_error.message return extra