Skip to content

Remove the NoReturn return type #232

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions backend/app/crud/base.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any, Dict, Generic, Type, TypeVar, NoReturn
from typing import Any, Dict, Generic, Type, TypeVar

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

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

Expand Down
4 changes: 2 additions & 2 deletions backend/app/crud/crud_api.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import NoReturn, Sequence
from typing import Sequence

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

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

async def update(self, db: AsyncSession, pk: int, obj_in: UpdateApi) -> int:
Expand Down
10 changes: 5 additions & 5 deletions backend/app/crud/crud_dept.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any
from typing import Sequence

from sqlalchemy import select, and_, asc, or_
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload

from backend.app.crud.base import CRUDBase
from backend.app.models import Dept
from backend.app.models import Dept, User
from backend.app.schemas.dept import CreateDept, UpdateDept


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

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

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

async def get_children(self, db: AsyncSession, dept_id: int) -> Any:
async def get_children(self, db: AsyncSession, dept_id: int) -> list[Dept]:
result = await db.execute(
select(self.model).options(selectinload(self.model.children)).where(self.model.id == dept_id)
)
Expand Down
4 changes: 1 addition & 3 deletions backend/app/crud/crud_login_log.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import NoReturn

from sqlalchemy import Select, select, desc, delete, and_
from sqlalchemy.ext.asyncio import AsyncSession

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

async def create(self, db: AsyncSession, obj_in: CreateLoginLog) -> NoReturn:
async def create(self, db: AsyncSession, obj_in: CreateLoginLog):
await self.create_(db, obj_in)
await db.commit()

Expand Down
6 changes: 4 additions & 2 deletions backend/app/crud/crud_menu.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Sequence

from sqlalchemy import select, asc, and_
from sqlalchemy.orm import selectinload

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

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

async def get_role_menus(self, db, superuser: bool, menu_ids: list[int]) -> list[Menu]:
async def get_role_menus(self, db, superuser: bool, menu_ids: list[int]) -> Sequence[Menu]:
se = select(self.model).order_by(asc(self.model.sort))
where_list = [self.model.menu_type.in_([0, 1])]
if not superuser:
Expand Down
4 changes: 1 addition & 3 deletions backend/app/crud/crud_opera_log.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import NoReturn

from sqlalchemy import select, desc, and_, delete, Select
from sqlalchemy.ext.asyncio import AsyncSession

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

async def create(self, db: AsyncSession, obj_in: CreateOperaLog) -> NoReturn:
async def create(self, db: AsyncSession, obj_in: CreateOperaLog) -> None:
await self.create_(db, obj_in)

async def delete(self, db: AsyncSession, pk: list[int]) -> int:
Expand Down
12 changes: 6 additions & 6 deletions backend/app/crud/crud_role.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import NoReturn
from typing import Sequence

from sqlalchemy import select, delete, desc
from sqlalchemy import select, delete, desc, Select
from sqlalchemy.orm import selectinload

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

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

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

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

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

async def update(self, db, role_id: int, obj_in: UpdateRole) -> int:
Expand Down
5 changes: 2 additions & 3 deletions backend/app/crud/crud_user.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime
from typing import NoReturn

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

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

async def add(self, db: AsyncSession, obj: AddUser) -> NoReturn:
async def add(self, db: AsyncSession, obj: AddUser) -> None:
salt = text_captcha(5)
obj.password = await jwt.get_hash_password(obj.password + salt)
dict_obj = obj.dict(exclude={'roles'})
Expand Down
10 changes: 6 additions & 4 deletions backend/app/services/auth_service.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime
from typing import NoReturn

from fastapi import Request
from fastapi.security import OAuth2PasswordRequestForm
Expand All @@ -16,6 +15,7 @@
from backend.app.core.conf import settings
from backend.app.crud.crud_user import UserDao
from backend.app.database.db_mysql import async_db_session
from backend.app.models import User
from backend.app.schemas.user import AuthLogin
from backend.app.services.login_log_service import LoginLogService
from backend.app.utils.timezone import timezone
Expand All @@ -24,7 +24,7 @@
class AuthService:
login_time = timezone.now()

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

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

@staticmethod
async def logout(*, request: Request) -> NoReturn:
async def logout(*, request: Request) -> None:
token = await get_token(request)
if request.user.is_multi_login:
key = f'{settings.TOKEN_REDIS_PREFIX}:{request.user.id}:{token}'
Expand Down
13 changes: 8 additions & 5 deletions backend/app/services/dept_service.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any

from backend.app.common.exception import errors
from backend.app.crud.crud_dept import DeptDao
from backend.app.database.db_mysql import async_db_session
from backend.app.models import Dept
from backend.app.schemas.dept import CreateDept, UpdateDept
from backend.app.utils.build_tree import get_tree_data


class DeptService:
@staticmethod
async def get(*, pk: int):
async def get(*, pk: int) -> Dept:
async with async_db_session() as db:
dept = await DeptDao.get(db, pk)
if not dept:
Expand All @@ -19,14 +22,14 @@ async def get(*, pk: int):
@staticmethod
async def get_dept_tree(
*, name: str | None = None, leader: str | None = None, phone: str | None = None, status: int | None = None
):
) -> list[dict[str, Any]]:
async with async_db_session() as db:
dept_select = await DeptDao.get_all(db=db, name=name, leader=leader, phone=phone, status=status)
tree_data = await get_tree_data(dept_select)
return tree_data

@staticmethod
async def create(*, obj: CreateDept):
async def create(*, obj: CreateDept) -> None:
async with async_db_session.begin() as db:
dept = await DeptDao.get_by_name(db, obj.name)
if dept:
Expand All @@ -38,7 +41,7 @@ async def create(*, obj: CreateDept):
await DeptDao.create(db, obj)

@staticmethod
async def update(*, pk: int, obj: UpdateDept):
async def update(*, pk: int, obj: UpdateDept) -> int:
async with async_db_session.begin() as db:
dept = await DeptDao.get(db, pk)
if not dept:
Expand All @@ -54,7 +57,7 @@ async def update(*, pk: int, obj: UpdateDept):
return count

@staticmethod
async def delete(*, pk: int):
async def delete(*, pk: int) -> int:
async with async_db_session.begin() as db:
dept_user = await DeptDao.get_user_relation(db, pk)
if dept_user:
Expand Down
3 changes: 1 addition & 2 deletions backend/app/services/login_log_service.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime
from typing import NoReturn

from fastapi import Request
from sqlalchemy import Select
Expand All @@ -22,7 +21,7 @@ async def get_select(*, username: str, status: int, ip: str) -> Select:
@staticmethod
async def create(
*, db: AsyncSession, request: Request, user: User, login_time: datetime, status: int, msg: str
) -> NoReturn:
) -> None:
try:
# request.state 来自 opera log 中间件定义的扩展参数,详见 opera_log_middleware.py
obj_in = CreateLoginLog(
Expand Down
17 changes: 10 additions & 7 deletions backend/app/services/menu_service.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,35 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any

from fastapi import Request
from backend.app.common.exception import errors
from backend.app.crud.crud_menu import MenuDao
from backend.app.crud.crud_role import RoleDao
from backend.app.database.db_mysql import async_db_session
from backend.app.models import Menu
from backend.app.schemas.menu import CreateMenu, UpdateMenu
from backend.app.utils.build_tree import get_tree_data


class MenuService:
@staticmethod
async def get(*, pk: int):
async def get(*, pk: int) -> Menu:
async with async_db_session() as db:
menu = await MenuDao.get(db, menu_id=pk)
if not menu:
raise errors.NotFoundError(msg='菜单不存在')
return menu

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

@staticmethod
async def get_role_menu_tree(*, pk: int):
async def get_role_menu_tree(*, pk: int) -> list[dict[str, Any]]:
async with async_db_session() as db:
role = await RoleDao.get_with_relation(db, pk)
if not role:
Expand All @@ -37,7 +40,7 @@ async def get_role_menu_tree(*, pk: int):
return menu_tree

@staticmethod
async def get_user_menu_tree(*, request: Request):
async def get_user_menu_tree(*, request: Request) -> list[dict[str, Any]]:
async with async_db_session() as db:
roles = request.user.roles
menu_ids = []
Expand All @@ -50,7 +53,7 @@ async def get_user_menu_tree(*, request: Request):
return menu_tree

@staticmethod
async def create(*, obj: CreateMenu):
async def create(*, obj: CreateMenu) -> None:
async with async_db_session.begin() as db:
title = await MenuDao.get_by_title(db, obj.title)
if title:
Expand All @@ -62,7 +65,7 @@ async def create(*, obj: CreateMenu):
await MenuDao.create(db, obj)

@staticmethod
async def update(*, pk: int, obj: UpdateMenu):
async def update(*, pk: int, obj: UpdateMenu) -> int:
async with async_db_session.begin() as db:
menu = await MenuDao.get(db, pk)
if not menu:
Expand All @@ -78,7 +81,7 @@ async def update(*, pk: int, obj: UpdateMenu):
return count

@staticmethod
async def delete(*, pk: int):
async def delete(*, pk: int) -> int:
async with async_db_session.begin() as db:
children = await MenuDao.get_children(db, pk)
if children:
Expand Down
Loading