health-apps-backend/schemas/ApiResponse.py

25 lines
872 B
Python

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)