From b1d13edd2d95eebfdae0038bc2a8fa408fbffea4 Mon Sep 17 00:00:00 2001 From: Mark Paronyan Date: Tue, 29 Sep 2026 22:02:18 +0300 Subject: [PATCH] fix(typing): resolve mypy errors in api.routes.controller.users --- gns3server/api/routes/controller/users.py | 15 ++++++++------- gns3server/db/models/users.py | 2 +- gns3server/db/repositories/users.py | 4 +++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/gns3server/api/routes/controller/users.py b/gns3server/api/routes/controller/users.py index 1f834d712..673886195 100644 --- a/gns3server/api/routes/controller/users.py +++ b/gns3server/api/routes/controller/users.py @@ -22,7 +22,7 @@ API routes for users. from fastapi import APIRouter, Depends, HTTPException, Response, status from fastapi.security import OAuth2PasswordRequestForm from uuid import UUID -from typing import List +from typing import List, Optional from gns3server import schemas from gns3server.controller.controller_error import ( @@ -32,6 +32,7 @@ from gns3server.controller.controller_error import ( ControllerForbiddenError, ) +import gns3server.db.models as models from gns3server.db.repositories.users import UsersRepository from gns3server.db.repositories.rbac import RbacRepository from gns3server.services import auth_service @@ -168,7 +169,7 @@ async def update_logged_in_user( user_update: schemas.LoggedInUserUpdate, current_user: schemas.User = Depends(get_current_active_user), users_repo: UsersRepository = Depends(get_repository(UsersRepository)), -) -> schemas.User: +) -> Optional[models.User]: """ Update the current active user. """ @@ -180,7 +181,7 @@ async def update_logged_in_user( @router.get("", response_model=List[schemas.User], dependencies=[Depends(has_privilege("User.Audit"))]) -async def get_users(users_repo: UsersRepository = Depends(get_repository(UsersRepository))) -> List[schemas.User]: +async def get_users(users_repo: UsersRepository = Depends(get_repository(UsersRepository))) -> List[models.User]: """ Get all users. @@ -198,7 +199,7 @@ async def get_users(users_repo: UsersRepository = Depends(get_repository(UsersRe ) async def create_user( user_create: schemas.UserCreate, users_repo: UsersRepository = Depends(get_repository(UsersRepository)) -) -> schemas.User: +) -> models.User: """ Create a new user. @@ -218,7 +219,7 @@ async def create_user( async def get_user( user_id: UUID, users_repo: UsersRepository = Depends(get_repository(UsersRepository)), -) -> schemas.User: +) -> models.User: """ Get a user. @@ -236,7 +237,7 @@ async def update_user( user_id: UUID, user_update: schemas.UserUpdate, users_repo: UsersRepository = Depends(get_repository(UsersRepository)), -) -> schemas.User: +) -> Optional[models.User]: """ Update a user. @@ -287,7 +288,7 @@ async def delete_user( ) async def get_user_memberships( user_id: UUID, users_repo: UsersRepository = Depends(get_repository(UsersRepository)) -) -> List[schemas.UserGroup]: +) -> List[models.UserGroup]: """ Get user memberships. diff --git a/gns3server/db/models/users.py b/gns3server/db/models/users.py index 08d50f8a1..32af1e72f 100644 --- a/gns3server/db/models/users.py +++ b/gns3server/db/models/users.py @@ -47,7 +47,7 @@ class User(BaseTable): full_name = Column(String) hashed_password = Column(String) last_login: Mapped[Optional[datetime]] = mapped_column(DateTime) - token_version = Column(Integer, default=0, nullable=False, server_default="0") + token_version: Mapped[int] = mapped_column(Integer, default=0, nullable=False, server_default="0") is_active = Column(Boolean, default=True) is_superadmin = Column(Boolean, default=False) groups = relationship("UserGroup", secondary=user_group_map, back_populates="users") diff --git a/gns3server/db/repositories/users.py b/gns3server/db/repositories/users.py index 2bd40e313..556185272 100644 --- a/gns3server/db/repositories/users.py +++ b/gns3server/db/repositories/users.py @@ -89,7 +89,9 @@ class UsersRepository(BaseRepository): await self._db_session.refresh(db_user) return db_user - async def update_user(self, user_id: UUID, user_update: schemas.UserUpdate) -> Optional[models.User]: + async def update_user( + self, user_id: UUID, user_update: Union[schemas.UserUpdate, schemas.LoggedInUserUpdate] + ) -> Optional[models.User]: """ Update a user. """