Skip to content
This repository was archived by the owner on Sep 28, 2023. It is now read-only.

Commit 71966bc

Browse files
committed
refactoring
1 parent 5336719 commit 71966bc

4 files changed

Lines changed: 53 additions & 50 deletions

File tree

fastapi_plan/template/{{cookiecutter.project_name}}/app/api/routers/login.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
from app.schemas.user import UserPydantic
21
from datetime import timedelta
3-
from typing import Any
42

53
from fastapi import APIRouter, Depends, HTTPException
64
from fastapi.security import OAuth2PasswordRequestForm
@@ -15,7 +13,7 @@
1513

1614

1715
@router.post("/access-token", response_model=schemas.Token)
18-
async def login_access_token(form_data: OAuth2PasswordRequestForm = Depends()) -> Any:
16+
async def login_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
1917
"""
2018
OAuth2 compatible token login, get an access token for future requests
2119
"""
@@ -37,8 +35,8 @@ async def login_access_token(form_data: OAuth2PasswordRequestForm = Depends()) -
3735

3836

3937
@router.post("/test-token", response_model=schemas.UserPydantic)
40-
async def test_token(current_user: models.User = Depends(deps.get_current_user)) -> Any:
38+
async def test_token(current_user: models.User = Depends(deps.get_current_user)):
4139
"""
4240
Test access token
4341
"""
44-
return UserPydantic.from_orm(current_user)
42+
return await schemas.UserPydantic.from_tortoise_orm(current_user)
Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,115 @@
1-
from app.schemas.user import UserPydanticList
2-
from typing import Any, List
3-
from fastapi import APIRouter, Depends, HTTPException
1+
from fastapi import APIRouter, Depends, HTTPException, status
42
from app import crud, models, schemas
5-
from app.schemas import UserPydantic
63
from app.api import deps
74

85
router = APIRouter()
96

107

11-
@router.get("/", response_model=UserPydanticList)
8+
@router.get("/", response_model=schemas.UserPydanticList)
129
async def read_users(
1310
skip: int = 0,
1411
limit: int = 100,
1512
current_user: models.User = Depends(deps.get_current_active_superuser),
16-
) -> Any:
13+
):
1714
"""
1815
Retrieve users.
1916
"""
2017
users = await crud.user.get_multi(skip=skip, limit=limit)
21-
return await UserPydanticList.from_queryset(users)
18+
return await schemas.UserPydanticList.from_queryset(users)
2219

2320

24-
@router.post("/", response_model=UserPydantic)
21+
@router.post("/", response_model=schemas.UserPydantic)
2522
async def create_user(
2623
user_in: schemas.UserCreateBySuperuser,
2724
current_user: models.User = Depends(deps.get_current_active_superuser),
28-
) -> Any:
25+
):
2926
"""
3027
Create new user.
3128
"""
3229
user = await crud.user.get_by_email(email=user_in.email)
3330
if user:
3431
raise HTTPException(
35-
status_code=400,
32+
status_code=status.HTTP_400_BAD_REQUEST,
3633
detail="The user with this username already exists in the system.",
3734
)
3835
user = await crud.user.create_by_superuser(obj_in=user_in)
39-
return UserPydantic.from_orm(user)
36+
return await schemas.UserPydantic.from_tortoise_orm(user)
4037

4138

42-
@router.put("/me", response_model=UserPydantic)
39+
@router.put("/me", response_model=schemas.UserPydantic)
4340
async def update_user_me(
4441
user_in: schemas.UserUpdateMe,
4542
current_user: models.User = Depends(deps.get_current_active_user),
46-
) -> Any:
43+
):
4744
"""
4845
Update own user.
4946
"""
5047
user = await crud.user.update_me(db_obj=current_user, obj_in=user_in)
51-
return schemas.UserPydantic.from_orm(user)
48+
return await schemas.UserPydantic.from_tortoise_orm(user)
5249

5350

54-
@router.get("/me", response_model=UserPydantic)
51+
@router.get("/me", response_model=schemas.UserPydantic)
5552
async def read_user_me(
5653
current_user: models.User = Depends(deps.get_current_active_user),
57-
) -> Any:
54+
):
5855
"""
5956
Get current user.
6057
"""
61-
return UserPydantic.from_orm(current_user)
58+
return await schemas.UserPydantic.from_tortoise_orm(current_user)
6259

6360

64-
@router.post("/open", response_model=UserPydantic)
61+
@router.post("/open", response_model=schemas.UserPydantic)
6562
async def create_user_open(user_in: schemas.UserCreateMe):
6663
"""
6764
Create new user without the need to be logged in.
6865
"""
6966
user = await crud.user.get_by_email(email=user_in.email)
7067
if user:
7168
raise HTTPException(
72-
status_code=400,
69+
status_code=status.HTTP_400_BAD_REQUEST,
7370
detail="The user with this username already exists in the system",
7471
)
7572
user = await crud.user.create_me(obj_in=user_in)
76-
return UserPydantic.from_orm(user)
73+
return await schemas.UserPydantic.from_tortoise_orm(user)
7774

7875

79-
@router.get("/{user_id}", response_model=UserPydantic)
76+
@router.get("/{user_id}", response_model=schemas.UserPydantic)
8077
async def read_user_by_id(
8178
user_id: int,
8279
current_user: models.User = Depends(deps.get_current_active_user),
83-
) -> Any:
80+
):
8481
"""
8582
Get a specific user by id.
8683
"""
8784
user = await crud.user.get(id=user_id)
8885
if user == current_user:
8986
return user
87+
if not user:
88+
raise HTTPException(
89+
status_code=status.HTTP_400_BAD_REQUEST, detail="The user does not exist"
90+
)
9091
if not crud.user.is_superuser(current_user):
9192
raise HTTPException(
92-
status_code=400, detail="The user doesn't have enough privileges"
93+
status_code=status.HTTP_400_BAD_REQUEST,
94+
detail="The user doesn't have enough privileges",
9395
)
94-
return UserPydantic.from_orm(user)
96+
return await schemas.UserPydantic.from_tortoise_orm(user)
9597

9698

97-
@router.put("/{user_id}", response_model=UserPydantic)
99+
@router.put("/{user_id}", response_model=schemas.UserPydantic)
98100
async def update_user(
99101
user_id: int,
100102
user_in: schemas.UserUpdateBySuperuser,
101103
current_user: models.User = Depends(deps.get_current_active_superuser),
102-
) -> Any:
104+
):
103105
"""
104106
Update a user.
105107
"""
106108
user = await crud.user.get(id=user_id)
107109
if not user:
108110
raise HTTPException(
109-
status_code=404,
111+
status_code=status.HTTP_404_NOT_FOUND,
110112
detail="The user with this username does not exist in the system",
111113
)
112114
user = await crud.user.update_by_superuser(db_obj=user, obj_in=user_in)
113-
return UserPydantic.from_orm(user)
115+
return await schemas.UserPydantic.from_tortoise_orm(user)
Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,42 @@
1-
from app.schemas.user import UserCreateBySuperuser, UserUpdateBySuperuser
21
from typing import Optional
32

43
from app.core.security import get_password_hash, verify_password
54
from app.crud.base import CRUDBase
6-
from app.models import User
7-
from app.schemas import UserCreateMe, UserUpdateMe
5+
from app import models, schemas
86
from tortoise.exceptions import DoesNotExist
97

108

11-
class CRUDUser(CRUDBase[User, UserCreateMe, UserUpdateMe]):
12-
async def get_by_email(self, email: str) -> Optional[User]:
9+
class CRUDUser(CRUDBase[models.User, schemas.UserCreateMe, schemas.UserUpdateMe]):
10+
async def get_by_email(self, email: str) -> Optional[models.User]:
1311
try:
14-
user = await User.get(email=email)
12+
user = await models.User.get(email=email)
1513
except DoesNotExist:
1614
return None
1715
else:
1816
return user
1917

20-
async def create_me(self, obj_in: UserCreateMe) -> User:
21-
db_obj = await User.create(
18+
async def create_me(self, obj_in: schemas.UserCreateMe) -> models.User:
19+
db_obj = await models.User.create(
2220
email=obj_in.email,
2321
password_hash=get_password_hash(obj_in.password),
2422
)
2523
return db_obj
2624

27-
async def create_by_superuser(self, obj_in: UserCreateBySuperuser) -> User:
25+
async def create_by_superuser(
26+
self, obj_in: schemas.UserCreateBySuperuser
27+
) -> models.User:
2828

29-
db_obj = await User.create(
29+
db_obj = await models.User.create(
3030
email=obj_in.email,
3131
password_hash=get_password_hash(obj_in.password),
3232
is_superuser=obj_in.is_superuser,
3333
is_active=obj_in.is_active,
3434
)
3535
return db_obj
3636

37-
async def update_me(self, db_obj: User, obj_in: UserUpdateMe) -> User:
37+
async def update_me(
38+
self, db_obj: models.User, obj_in: schemas.UserUpdateMe
39+
) -> models.User:
3840
db_obj.name = obj_in.name
3941
db_obj.family_name = obj_in.family_name
4042
if obj_in.password:
@@ -45,8 +47,8 @@ async def update_me(self, db_obj: User, obj_in: UserUpdateMe) -> User:
4547
return db_obj
4648

4749
async def update_by_superuser(
48-
self, db_obj: User, obj_in: UserUpdateBySuperuser
49-
) -> User:
50+
self, db_obj: models.User, obj_in: schemas.UserUpdateBySuperuser
51+
) -> models.User:
5052

5153
db_obj.name = obj_in.name
5254
db_obj.family_name = obj_in.family_name
@@ -60,19 +62,19 @@ async def update_by_superuser(
6062
await db_obj.refresh_from_db()
6163
return db_obj
6264

63-
async def authenticate(self, email: str, password: str) -> Optional[User]:
65+
async def authenticate(self, email: str, password: str) -> Optional[models.User]:
6466
user = await self.get_by_email(email=email)
6567
if not user:
6668
return None
6769
if not verify_password(password, user.password_hash):
6870
return None
6971
return user
7072

71-
def is_active(self, user: User) -> bool:
73+
def is_active(self, user: models.User) -> bool:
7274
return user.is_active # type: ignore
7375

74-
def is_superuser(self, user: User) -> bool:
76+
def is_superuser(self, user: models.User) -> bool:
7577
return user.is_superuser # type: ignore
7678

7779

78-
user = CRUDUser(User)
80+
user = CRUDUser(models.User)

fastapi_plan/template/{{cookiecutter.project_name}}/app/schemas/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from .token import Token, TokenPayload # noqa
22
from .user import (
33
UserPydantic,
4+
UserPydanticList,
45
UserCreateMe,
56
UserCreateBySuperuser,
67
UserUpdateBySuperuser,

0 commit comments

Comments
 (0)