✨ Add support for updating items and upgrade SQLModel to 0.0.16 (which supports model object updates) (#601)
This commit is contained in:

committed by
GitHub

parent
93e03184d6
commit
fe95750e3a
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
@@ -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"
|
||||||
|
Reference in New Issue
Block a user