Coverage for opt/mealie/lib/python3.12/site-packages/mealie/services/user_services/user_service.py: 34%

25 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-11-25 15:48 +0000

1from datetime import UTC, datetime 1a

2 

3from mealie.repos.repository_factory import AllRepositories 1a

4from mealie.schema.user.user import PrivateUser 1a

5from mealie.services._base_service import BaseService 1a

6 

7 

8class UserService(BaseService): 1a

9 def __init__(self, repos: AllRepositories) -> None: 1a

10 self.repos = repos 

11 super().__init__() 

12 

13 def get_locked_users(self) -> list[PrivateUser]: 1a

14 return self.repos.users.get_locked_users() 

15 

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() 

22 

23 unlocked = 0 

24 

25 for user in locked_users: 

26 if force or not user.is_locked and user.locked_at is not None: 

27 self.unlock_user(user) 

28 unlocked += 1 

29 

30 return unlocked 

31 

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) 

35 

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)