Add support for updating items and upgrade SQLModel to 0.0.16 (which supports model object updates) (#601)

This commit is contained in:
Sebastián Ramírez
2024-02-17 21:29:15 +01:00
committed by GitHub
parent 93e03184d6
commit fe95750e3a
3 changed files with 11 additions and 11 deletions

View File

@@ -50,7 +50,7 @@ def create_item(
""" """
Create new item. Create new item.
""" """
item = Item.from_orm(item_in, update={"owner_id": current_user.id}) item = Item.model_validate(item_in, update={"owner_id": current_user.id})
session.add(item) session.add(item)
session.commit() session.commit()
session.refresh(item) session.refresh(item)
@@ -69,9 +69,8 @@ def update_item(
raise HTTPException(status_code=404, detail="Item not found") raise HTTPException(status_code=404, detail="Item not found")
if not current_user.is_superuser and (item.owner_id != current_user.id): if not current_user.is_superuser and (item.owner_id != current_user.id):
raise HTTPException(status_code=400, detail="Not enough permissions") raise HTTPException(status_code=400, detail="Not enough permissions")
# TODO: check this actually works update_dict = item_in.model_dump(exclude_unset=True)
update_dict = item_in.dict(exclude_unset=True) item.sqlmodel_update(update_dict)
item.from_orm(update_dict)
session.add(item) session.add(item)
session.commit() session.commit()
session.refresh(item) session.refresh(item)

View File

@@ -1,6 +1,6 @@
from typing import Union from typing import Union
from pydantic import BaseModel, EmailStr from pydantic import EmailStr
from sqlmodel import Field, Relationship, SQLModel from sqlmodel import Field, Relationship, SQLModel
@@ -29,11 +29,12 @@ class UserUpdate(UserBase):
password: Union[str, None] = None password: Union[str, None] = None
class UserUpdateMe(BaseModel): class UserUpdateMe(SQLModel):
password: Union[str, None] = None password: Union[str, None] = None
full_name: Union[str, None] = None full_name: Union[str, None] = None
email: Union[EmailStr, None] = None email: Union[EmailStr, None] = None
# Database model, database table inferred from class name # Database model, database table inferred from class name
class User(UserBase, table=True): class User(UserBase, table=True):
id: Union[int, None] = Field(default=None, primary_key=True) id: Union[int, None] = Field(default=None, primary_key=True)
@@ -78,21 +79,21 @@ class ItemOut(ItemBase):
# Generic message # Generic message
class Message(BaseModel): class Message(SQLModel):
message: str message: str
# JSON payload containing access token # JSON payload containing access token
class Token(BaseModel): class Token(SQLModel):
access_token: str access_token: str
token_type: str = "bearer" token_type: str = "bearer"
# Contents of JWT token # Contents of JWT token
class TokenPayload(BaseModel): class TokenPayload(SQLModel):
sub: Union[int, None] = None sub: Union[int, None] = None
class NewPassword(BaseModel): class NewPassword(SQLModel):
token: str token: str
new_password: str new_password: str

View File

@@ -22,7 +22,7 @@ alembic = "^1.12.1"
python-jose = {extras = ["cryptography"], version = "^3.3.0"} python-jose = {extras = ["cryptography"], version = "^3.3.0"}
httpx = "^0.25.1" httpx = "^0.25.1"
psycopg = {extras = ["binary"], version = "^3.1.13"} psycopg = {extras = ["binary"], version = "^3.1.13"}
sqlmodel = "^0.0.12" sqlmodel = "^0.0.16"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
mypy = "^1.7.0" mypy = "^1.7.0"