from typing import Any, Optional, TypeVar, Generic from pydantic import Field from pydantic import BaseModel from exceptions import ApiException T = TypeVar('T') class ApiResponse(BaseModel, Generic[T]): """Standard API response model matching Node.js implementation.""" data: Optional[T] = Field(default=None, description="Response data") error: Optional[Any] = Field(default=None, description="Error details") message: Optional[str] = Field(default=None, description="Response message") @classmethod def from_api_exception(cls, exception: ApiException) -> dict: """Create an API response from an API exception.""" import traceback return cls( data=None, message=exception.message, error=traceback.format_exc() if exception else None ).model_dump(exclude_none=True)