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.15.2, created at 2026-10-07 03:04 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
1from datetime import UTC, datetime
3from mealie.repos.repository_factory import AllRepositories
4from mealie.schema.user.user import PrivateUser
5from mealie.services._base_service import BaseService
8class UserService(BaseService):
9 def __init__(self, repos: AllRepositories) -> None:
10 self.repos = repos
11 super().__init__()
13 def get_locked_users(self) -> list[PrivateUser]:
14 return self.repos.users.get_locked_users()
16 def reset_locked_users(self, force: bool = False) -> int:
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()
23 unlocked = 0
25 for user in locked_users: 25 ↛ 26line 25 didn't jump to line 26 because the loop on line 25 never started
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
32 def lock_user(self, user: PrivateUser) -> PrivateUser:
33 user.locked_at = datetime.now(UTC)
34 return self.repos.users.update(user.id, user)
36 def unlock_user(self, user: PrivateUser) -> PrivateUser:
37 user.locked_at = None
38 user.login_attemps = 0
39 return self.repos.users.update(user.id, user)