25 lines
872 B
Python
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) |