Coverage for opt/mealie/lib/python3.12/site-packages/mealie/services/user_services/user_service.py: 62%
25 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
1from datetime import UTC, datetime 1a
3from mealie.repos.repository_factory import AllRepositories 1a
4from mealie.schema.user.user import PrivateUser 1a
5from mealie.services._base_service import BaseService 1a
8class UserService(BaseService): 1a
9 def __init__(self, repos: AllRepositories) -> None: 1a
10 self.repos = repos 1b
11 super().__init__() 1b
13 def get_locked_users(self) -> list[PrivateUser]: 1a
14 return self.repos.users.get_locked_users() 1b
16 def reset_locked_users(self, force: bool = False) -> int: 1a
17 """
18 Queriers that database for all locked users and resets their locked_at field to None
19 if more than the set time has passed since the user was locked
20 """
21 locked_users = self.get_locked_users() 1b
23 unlocked = 0 1b
25 for user in locked_users: 25 ↛ 26line 25 didn't jump to line 26 because the loop on line 25 never started1b
26 if force or not user.is_locked and user.locked_at is not None:
27 self.unlock_user(user)
28 unlocked += 1
30 return unlocked 1b
32 def lock_user(self, user: PrivateUser) -> PrivateUser: 1a
33 user.locked_at = datetime.now(UTC)
34 return self.repos.users.update(user.id, user)
36 def unlock_user(self, user: PrivateUser) -> PrivateUser: 1a
37 user.locked_at = None
38 user.login_attemps = 0
39 return self.repos.users.update(user.id, user)