Coverage for opt/mealie/lib/python3.12/site-packages/mealie/routes/groups/controller_group_self_service.py: 96%

46 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 03:04 +0000

1from functools import cached_property 

2from uuid import UUID 

3 

4from fastapi import Depends, HTTPException 

5from pydantic import UUID4 

6 

7from mealie.routes._base.base_controllers import BaseUserController 

8from mealie.routes._base.controller import controller 

9from mealie.routes._base.routers import UserAPIRouter 

10from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences 

11from mealie.schema.group.group_statistics import GroupStorage 

12from mealie.schema.response.pagination import PaginationBase, PaginationQuery 

13from mealie.schema.user.user import GroupSummary, UserSummary 

14from mealie.services.group_services.group_service import GroupService 

15 

16router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"]) 

17 

18 

19@controller(router) 

20class GroupSelfServiceController(BaseUserController): 

21 @cached_property 

22 def service(self) -> GroupService: 

23 return GroupService(self.group_id, self.repos) 

24 

25 @router.get("/self", response_model=GroupSummary) 

26 def get_logged_in_user_group(self): 

27 """Returns the Group Data for the Current User""" 

28 return self.group.cast(GroupSummary) 

29 

30 @router.get("/members", response_model=PaginationBase[UserSummary]) 

31 def get_group_members(self, q: PaginationQuery = Depends()): 

32 """Returns all users belonging to the current group""" 

33 

34 response = self.repos.users.page_all(q, override=UserSummary) 

35 response.set_pagination_guides(router.url_path_for("get_group_members"), q.model_dump()) 

36 return response 

37 

38 @router.get("/members/{username_or_id}", response_model=UserSummary) 

39 def get_group_member(self, username_or_id: str | UUID4): 

40 """Returns a single user belonging to the current group""" 

41 

42 try: 

43 UUID(username_or_id) 

44 key = "id" 

45 except ValueError: 

46 key = "username" 

47 

48 private_user = self.repos.users.get_one(username_or_id, key) 

49 if not private_user: 49 ↛ 52line 49 didn't jump to line 52 because the condition on line 49 was always true

50 raise HTTPException(status_code=404, detail="User Not Found") 

51 

52 return private_user.cast(UserSummary) 

53 

54 @router.get("/preferences", response_model=ReadGroupPreferences) 

55 def get_group_preferences(self): 

56 return self.group.preferences 

57 

58 @router.put("/preferences", response_model=ReadGroupPreferences) 

59 def update_group_preferences(self, new_pref: UpdateGroupPreferences): 

60 return self.repos.group_preferences.update(self.group_id, new_pref) 

61 

62 @router.get("/storage", response_model=GroupStorage) 

63 def get_storage(self): 

64 return self.service.calculate_group_storage()