Skip to content

Instantly share code, notes, and snippets.

@deepanshumehtaa
Last active November 21, 2023 21:14
Show Gist options
  • Save deepanshumehtaa/806b9bf601a31144cda9c0fb810ea2b9 to your computer and use it in GitHub Desktop.
Save deepanshumehtaa/806b9bf601a31144cda9c0fb810ea2b9 to your computer and use it in GitHub Desktop.
Pydantic Hack
from pydantic import BaseModel
from typing import Generic
Generics ............................................................
T = TypeVar("T")
class SuccessResponseModel(BaseModel, Generic[T]):
"""
now we don't need to define multiple Success model for like `Items`, `User`, etc
just use this like:
SuccessResponseModel is now generics
means it can be used like `list[int]`
> SuccessResponseModel[Item]
"""
success: bool = True
data: T
fake_dbs: list[Item] = [
Item(name="Arjun", price=100),
Item(name="Kapoor", price=101),
]
@app.get("/items", response_model=SuccessResponseModel[list[Item]])
async def get_items_list():
return {
"success": True,
"data": fake_dbs
}
@app.get("/item", response_model=SuccessResponseModel[Item])
async def get_item():
return {
"success": True,
"data": Item(name="Arjun", price=100)
}
@app.get("/user", response_model=SuccessResponseModel[User])
async def get_item():
return {
"success": True,
"data": User(name="Arjun", username=arjunBoi)
}
...........................................................................................
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment