Skip to content

Commit d0b16b6

Browse files
authored
Remove the NoReturn return type (#232)
1 parent 038df6a commit d0b16b6

14 files changed

+57
-49
lines changed

backend/app/crud/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from typing import Any, Dict, Generic, Type, TypeVar, NoReturn
3+
from typing import Any, Dict, Generic, Type, TypeVar
44

55
from pydantic import BaseModel
66
from sqlalchemy import select, update, delete, and_
@@ -49,7 +49,7 @@ async def get_(
4949
result = await db.execute(select(self.model).where(and_(*where_list)))
5050
return result.scalars().first()
5151

52-
async def create_(self, db: AsyncSession, obj_in: CreateSchemaType, user_id: int | None = None) -> NoReturn:
52+
async def create_(self, db: AsyncSession, obj_in: CreateSchemaType, user_id: int | None = None) -> None:
5353
"""
5454
新增一条数据
5555

backend/app/crud/crud_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from typing import NoReturn, Sequence
3+
from typing import Sequence
44

55
from sqlalchemy import Select, select, desc, delete, and_
66
from sqlalchemy.ext.asyncio import AsyncSession
@@ -35,7 +35,7 @@ async def get_by_name(self, db: AsyncSession, name: str) -> Api | None:
3535
api = await db.execute(select(self.model).where(self.model.name == name))
3636
return api.scalars().first()
3737

38-
async def create(self, db: AsyncSession, obj_in: CreateApi) -> NoReturn:
38+
async def create(self, db: AsyncSession, obj_in: CreateApi) -> None:
3939
await self.create_(db, obj_in)
4040

4141
async def update(self, db: AsyncSession, pk: int, obj_in: UpdateApi) -> int:

backend/app/crud/crud_dept.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from typing import Any
3+
from typing import Sequence
44

55
from sqlalchemy import select, and_, asc, or_
66
from sqlalchemy.ext.asyncio import AsyncSession
77
from sqlalchemy.orm import selectinload
88

99
from backend.app.crud.base import CRUDBase
10-
from backend.app.models import Dept
10+
from backend.app.models import Dept, User
1111
from backend.app.schemas.dept import CreateDept, UpdateDept
1212

1313

@@ -20,7 +20,7 @@ async def get_by_name(self, db: AsyncSession, name: str) -> Dept | None:
2020

2121
async def get_all(
2222
self, db: AsyncSession, name: str = None, leader: str = None, phone: str = None, status: int = None
23-
) -> Any:
23+
) -> Sequence[Dept]:
2424
se = select(self.model).order_by(asc(self.model.sort))
2525
where_list = [self.model.del_flag == 0]
2626
conditions = []
@@ -53,14 +53,14 @@ async def update(self, db: AsyncSession, dept_id: int, obj_in: UpdateDept) -> in
5353
async def delete(self, db: AsyncSession, dept_id: int) -> int:
5454
return await self.delete_(db, dept_id, del_flag=1)
5555

56-
async def get_user_relation(self, db: AsyncSession, dept_id: int) -> Any:
56+
async def get_user_relation(self, db: AsyncSession, dept_id: int) -> list[User]:
5757
result = await db.execute(
5858
select(self.model).options(selectinload(self.model.users)).where(self.model.id == dept_id)
5959
)
6060
user_relation = result.scalars().first()
6161
return user_relation.users
6262

63-
async def get_children(self, db: AsyncSession, dept_id: int) -> Any:
63+
async def get_children(self, db: AsyncSession, dept_id: int) -> list[Dept]:
6464
result = await db.execute(
6565
select(self.model).options(selectinload(self.model.children)).where(self.model.id == dept_id)
6666
)

backend/app/crud/crud_login_log.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from typing import NoReturn
4-
53
from sqlalchemy import Select, select, desc, delete, and_
64
from sqlalchemy.ext.asyncio import AsyncSession
75

@@ -24,7 +22,7 @@ async def get_all(self, username: str | None = None, status: int | None = None,
2422
se = se.where(and_(*where_list))
2523
return se
2624

27-
async def create(self, db: AsyncSession, obj_in: CreateLoginLog) -> NoReturn:
25+
async def create(self, db: AsyncSession, obj_in: CreateLoginLog):
2826
await self.create_(db, obj_in)
2927
await db.commit()
3028

backend/app/crud/crud_menu.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3+
from typing import Sequence
4+
35
from sqlalchemy import select, asc, and_
46
from sqlalchemy.orm import selectinload
57

@@ -16,7 +18,7 @@ async def get_by_title(self, db, title: str) -> Menu | None:
1618
result = await db.execute(select(self.model).where(self.model.title == title))
1719
return result.scalars().first()
1820

19-
async def get_all(self, db, title: str | None = None, status: int | None = None) -> list[Menu]:
21+
async def get_all(self, db, title: str | None = None, status: int | None = None) -> Sequence[Menu]:
2022
se = select(self.model).order_by(asc(self.model.sort))
2123
where_list = []
2224
if title:
@@ -28,7 +30,7 @@ async def get_all(self, db, title: str | None = None, status: int | None = None)
2830
menu = await db.execute(se)
2931
return menu.scalars().all()
3032

31-
async def get_role_menus(self, db, superuser: bool, menu_ids: list[int]) -> list[Menu]:
33+
async def get_role_menus(self, db, superuser: bool, menu_ids: list[int]) -> Sequence[Menu]:
3234
se = select(self.model).order_by(asc(self.model.sort))
3335
where_list = [self.model.menu_type.in_([0, 1])]
3436
if not superuser:

backend/app/crud/crud_opera_log.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from typing import NoReturn
4-
53
from sqlalchemy import select, desc, and_, delete, Select
64
from sqlalchemy.ext.asyncio import AsyncSession
75

@@ -24,7 +22,7 @@ async def get_all(self, username: str | None = None, status: int | None = None,
2422
se = se.where(and_(*where_list))
2523
return se
2624

27-
async def create(self, db: AsyncSession, obj_in: CreateOperaLog) -> NoReturn:
25+
async def create(self, db: AsyncSession, obj_in: CreateOperaLog) -> None:
2826
await self.create_(db, obj_in)
2927

3028
async def delete(self, db: AsyncSession, pk: list[int]) -> int:

backend/app/crud/crud_role.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from typing import NoReturn
3+
from typing import Sequence
44

5-
from sqlalchemy import select, delete, desc
5+
from sqlalchemy import select, delete, desc, Select
66
from sqlalchemy.orm import selectinload
77

88
from backend.app.crud.base import CRUDBase
@@ -20,15 +20,15 @@ async def get_with_relation(self, db, role_id: int) -> Role | None:
2020
)
2121
return role.scalars().first()
2222

23-
async def get_all(self, db) -> list[Role]:
23+
async def get_all(self, db) -> Sequence[Role]:
2424
roles = await db.execute(select(self.model))
2525
return roles.scalars().all()
2626

27-
async def get_user_all(self, db, user_id: int) -> list[Role]:
27+
async def get_user_all(self, db, user_id: int) -> Sequence[Role]:
2828
roles = await db.execute(select(self.model).join(self.model.users).where(User.id == user_id))
2929
return roles.scalars().all()
3030

31-
async def get_list(self, name: str = None, data_scope: int = None, status: int = None):
31+
async def get_list(self, name: str = None, data_scope: int = None, status: int = None) -> Select:
3232
se = select(self.model).options(selectinload(self.model.menus)).order_by(desc(self.model.created_time))
3333
where_list = []
3434
if name:
@@ -45,7 +45,7 @@ async def get_by_name(self, db, name: str) -> Role | None:
4545
role = await db.execute(select(self.model).where(self.model.name == name))
4646
return role.scalars().first()
4747

48-
async def create(self, db, obj_in: CreateRole) -> NoReturn:
48+
async def create(self, db, obj_in: CreateRole) -> None:
4949
await self.create_(db, obj_in)
5050

5151
async def update(self, db, role_id: int, obj_in: UpdateRole) -> int:

backend/app/crud/crud_user.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
33
from datetime import datetime
4-
from typing import NoReturn
54

65
from fast_captcha import text_captcha
76
from sqlalchemy import select, update, desc, and_
@@ -34,15 +33,15 @@ async def update_login_time(self, db: AsyncSession, username: str, login_time: d
3433
await db.commit()
3534
return user.rowcount
3635

37-
async def create(self, db: AsyncSession, obj: RegisterUser) -> NoReturn:
36+
async def create(self, db: AsyncSession, obj: RegisterUser) -> None:
3837
salt = text_captcha(5)
3938
obj.password = await jwt.get_hash_password(obj.password + salt)
4039
dict_obj = obj.dict()
4140
dict_obj.update({'salt': salt})
4241
new_user = self.model(**dict_obj)
4342
db.add(new_user)
4443

45-
async def add(self, db: AsyncSession, obj: AddUser) -> NoReturn:
44+
async def add(self, db: AsyncSession, obj: AddUser) -> None:
4645
salt = text_captcha(5)
4746
obj.password = await jwt.get_hash_password(obj.password + salt)
4847
dict_obj = obj.dict(exclude={'roles'})

backend/app/services/auth_service.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
33
from datetime import datetime
4-
from typing import NoReturn
54

65
from fastapi import Request
76
from fastapi.security import OAuth2PasswordRequestForm
@@ -16,6 +15,7 @@
1615
from backend.app.core.conf import settings
1716
from backend.app.crud.crud_user import UserDao
1817
from backend.app.database.db_mysql import async_db_session
18+
from backend.app.models import User
1919
from backend.app.schemas.user import AuthLogin
2020
from backend.app.services.login_log_service import LoginLogService
2121
from backend.app.utils.timezone import timezone
@@ -24,7 +24,7 @@
2424
class AuthService:
2525
login_time = timezone.now()
2626

27-
async def swagger_login(self, *, form_data: OAuth2PasswordRequestForm):
27+
async def swagger_login(self, *, form_data: OAuth2PasswordRequestForm) -> tuple[str, User]:
2828
async with async_db_session() as db:
2929
current_user = await UserDao.get_by_username(db, form_data.username)
3030
if not current_user:
@@ -41,7 +41,9 @@ async def swagger_login(self, *, form_data: OAuth2PasswordRequestForm):
4141
access_token, _ = await jwt.create_access_token(str(user.id), multi_login=user.is_multi_login)
4242
return access_token, user
4343

44-
async def login(self, *, request: Request, obj: AuthLogin, background_tasks: BackgroundTasks):
44+
async def login(
45+
self, *, request: Request, obj: AuthLogin, background_tasks: BackgroundTasks
46+
) -> tuple[str, str, datetime, datetime, User]:
4547
async with async_db_session() as db:
4648
try:
4749
current_user = await UserDao.get_by_username(db, obj.username)
@@ -115,7 +117,7 @@ async def new_token(*, request: Request, refresh_token: str) -> tuple[str, str,
115117
return new_access_token, new_refresh_token, new_access_token_expire_time, new_refresh_token_expire_time
116118

117119
@staticmethod
118-
async def logout(*, request: Request) -> NoReturn:
120+
async def logout(*, request: Request) -> None:
119121
token = await get_token(request)
120122
if request.user.is_multi_login:
121123
key = f'{settings.TOKEN_REDIS_PREFIX}:{request.user.id}:{token}'

backend/app/services/dept_service.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3+
from typing import Any
4+
35
from backend.app.common.exception import errors
46
from backend.app.crud.crud_dept import DeptDao
57
from backend.app.database.db_mysql import async_db_session
8+
from backend.app.models import Dept
69
from backend.app.schemas.dept import CreateDept, UpdateDept
710
from backend.app.utils.build_tree import get_tree_data
811

912

1013
class DeptService:
1114
@staticmethod
12-
async def get(*, pk: int):
15+
async def get(*, pk: int) -> Dept:
1316
async with async_db_session() as db:
1417
dept = await DeptDao.get(db, pk)
1518
if not dept:
@@ -19,14 +22,14 @@ async def get(*, pk: int):
1922
@staticmethod
2023
async def get_dept_tree(
2124
*, name: str | None = None, leader: str | None = None, phone: str | None = None, status: int | None = None
22-
):
25+
) -> list[dict[str, Any]]:
2326
async with async_db_session() as db:
2427
dept_select = await DeptDao.get_all(db=db, name=name, leader=leader, phone=phone, status=status)
2528
tree_data = await get_tree_data(dept_select)
2629
return tree_data
2730

2831
@staticmethod
29-
async def create(*, obj: CreateDept):
32+
async def create(*, obj: CreateDept) -> None:
3033
async with async_db_session.begin() as db:
3134
dept = await DeptDao.get_by_name(db, obj.name)
3235
if dept:
@@ -38,7 +41,7 @@ async def create(*, obj: CreateDept):
3841
await DeptDao.create(db, obj)
3942

4043
@staticmethod
41-
async def update(*, pk: int, obj: UpdateDept):
44+
async def update(*, pk: int, obj: UpdateDept) -> int:
4245
async with async_db_session.begin() as db:
4346
dept = await DeptDao.get(db, pk)
4447
if not dept:
@@ -54,7 +57,7 @@ async def update(*, pk: int, obj: UpdateDept):
5457
return count
5558

5659
@staticmethod
57-
async def delete(*, pk: int):
60+
async def delete(*, pk: int) -> int:
5861
async with async_db_session.begin() as db:
5962
dept_user = await DeptDao.get_user_relation(db, pk)
6063
if dept_user:

backend/app/services/login_log_service.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
33
from datetime import datetime
4-
from typing import NoReturn
54

65
from fastapi import Request
76
from sqlalchemy import Select
@@ -22,7 +21,7 @@ async def get_select(*, username: str, status: int, ip: str) -> Select:
2221
@staticmethod
2322
async def create(
2423
*, db: AsyncSession, request: Request, user: User, login_time: datetime, status: int, msg: str
25-
) -> NoReturn:
24+
) -> None:
2625
try:
2726
# request.state 来自 opera log 中间件定义的扩展参数,详见 opera_log_middleware.py
2827
obj_in = CreateLoginLog(

backend/app/services/menu_service.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,35 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3+
from typing import Any
4+
35
from fastapi import Request
46
from backend.app.common.exception import errors
57
from backend.app.crud.crud_menu import MenuDao
68
from backend.app.crud.crud_role import RoleDao
79
from backend.app.database.db_mysql import async_db_session
10+
from backend.app.models import Menu
811
from backend.app.schemas.menu import CreateMenu, UpdateMenu
912
from backend.app.utils.build_tree import get_tree_data
1013

1114

1215
class MenuService:
1316
@staticmethod
14-
async def get(*, pk: int):
17+
async def get(*, pk: int) -> Menu:
1518
async with async_db_session() as db:
1619
menu = await MenuDao.get(db, menu_id=pk)
1720
if not menu:
1821
raise errors.NotFoundError(msg='菜单不存在')
1922
return menu
2023

2124
@staticmethod
22-
async def get_menu_tree(*, title: str | None = None, status: int | None = None):
25+
async def get_menu_tree(*, title: str | None = None, status: int | None = None) -> list[dict[str, Any]]:
2326
async with async_db_session() as db:
2427
menu_select = await MenuDao.get_all(db, title=title, status=status)
2528
menu_tree = await get_tree_data(menu_select)
2629
return menu_tree
2730

2831
@staticmethod
29-
async def get_role_menu_tree(*, pk: int):
32+
async def get_role_menu_tree(*, pk: int) -> list[dict[str, Any]]:
3033
async with async_db_session() as db:
3134
role = await RoleDao.get_with_relation(db, pk)
3235
if not role:
@@ -37,7 +40,7 @@ async def get_role_menu_tree(*, pk: int):
3740
return menu_tree
3841

3942
@staticmethod
40-
async def get_user_menu_tree(*, request: Request):
43+
async def get_user_menu_tree(*, request: Request) -> list[dict[str, Any]]:
4144
async with async_db_session() as db:
4245
roles = request.user.roles
4346
menu_ids = []
@@ -50,7 +53,7 @@ async def get_user_menu_tree(*, request: Request):
5053
return menu_tree
5154

5255
@staticmethod
53-
async def create(*, obj: CreateMenu):
56+
async def create(*, obj: CreateMenu) -> None:
5457
async with async_db_session.begin() as db:
5558
title = await MenuDao.get_by_title(db, obj.title)
5659
if title:
@@ -62,7 +65,7 @@ async def create(*, obj: CreateMenu):
6265
await MenuDao.create(db, obj)
6366

6467
@staticmethod
65-
async def update(*, pk: int, obj: UpdateMenu):
68+
async def update(*, pk: int, obj: UpdateMenu) -> int:
6669
async with async_db_session.begin() as db:
6770
menu = await MenuDao.get(db, pk)
6871
if not menu:
@@ -78,7 +81,7 @@ async def update(*, pk: int, obj: UpdateMenu):
7881
return count
7982

8083
@staticmethod
81-
async def delete(*, pk: int):
84+
async def delete(*, pk: int) -> int:
8285
async with async_db_session.begin() as db:
8386
children = await MenuDao.get_children(db, pk)
8487
if children:

0 commit comments

Comments
 (0)