1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
from datetime import datetime
from sqlalchemy.orm import Mapped, mapped_column
from typing_extensions import Annotated
from litestar import Litestar, post
from litestar.dto import DTOConfig, dto_field
from litestar.plugins.sqlalchemy import SQLAlchemyDTO
from .my_lib import Base
class User(Base):
name: Mapped[str]
password: Mapped[str] = mapped_column(info=dto_field("private"))
created_at: Mapped[datetime] = mapped_column(info=dto_field("read-only"))
config = DTOConfig(rename_fields={"name": "userName"})
UserDTO = SQLAlchemyDTO[Annotated[User, config]]
@post("/users", dto=UserDTO, sync_to_thread=False)
def create_user(data: User) -> User:
assert data.name == "Litestar User"
data.created_at = datetime.min
return data
app = Litestar(route_handlers=[create_user])
# run: /users -H "Content-Type: application/json" -d '{"userName":"Litestar User","password":"xyz","created_at":"2023-04-24T00:00:00Z"}'
|