Coverage for opt/mealie/lib/python3.12/site-packages/mealie/services/group_services/labels_service.py: 89%

26 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-12-05 14:03 +0000

1from mealie.repos.all_repositories import get_repositories 1s

2from mealie.repos.repository_factory import AllRepositories 1s

3from mealie.schema.household.group_shopping_list import ShoppingListMultiPurposeLabelCreate 1s

4from mealie.schema.labels.multi_purpose_label import ( 1s

5 MultiPurposeLabelCreate, 

6 MultiPurposeLabelOut, 

7 MultiPurposeLabelSave, 

8) 

9from mealie.schema.response.pagination import PaginationQuery 1s

10 

11 

12class MultiPurposeLabelService: 1s

13 def __init__(self, repos: AllRepositories): 1s

14 self.repos = repos 1abcdefghijklmnopqr

15 self.labels = repos.group_multi_purpose_labels 1abcdefghijklmnopqr

16 

17 def _update_shopping_list_label_references(self, new_labels: list[MultiPurposeLabelOut]) -> None: 1s

18 # remove the households filter so we get all lists 

19 household_repos = get_repositories(self.repos.session, group_id=self.repos.group_id, household_id=None) 1abcdefghijklmnopqr

20 shopping_lists_repo = household_repos.group_shopping_lists 1abcdefghijklmnopqr

21 shopping_list_multi_purpose_labels_repo = household_repos.shopping_list_multi_purpose_labels 1abcdefghijklmnopqr

22 

23 shopping_lists = shopping_lists_repo.page_all(PaginationQuery(page=1, per_page=-1)) 1abcdefghijklmnopqr

24 new_shopping_list_labels: list[ShoppingListMultiPurposeLabelCreate] = [] 1abcdefghijklmnopqr

25 for label in new_labels: 1abcdefghijklmnopqr

26 new_shopping_list_labels.extend( 1abcdefghijklmnopqr

27 [ 

28 ShoppingListMultiPurposeLabelCreate( 

29 shopping_list_id=shopping_list.id, label_id=label.id, position=len(shopping_list.label_settings) 

30 ) 

31 for shopping_list in shopping_lists.items 

32 ] 

33 ) 

34 

35 shopping_list_multi_purpose_labels_repo.create_many(new_shopping_list_labels) 1abcdefghijklmnopqr

36 

37 def create_one(self, data: MultiPurposeLabelCreate) -> MultiPurposeLabelOut: 1s

38 label = self.labels.create(data.cast(MultiPurposeLabelSave, group_id=self.repos.group_id)) 1abcdefghijklmnopqr

39 self._update_shopping_list_label_references([label]) 1abcdefghijklmnopqr

40 return label 1abcdefghijklmnopqr

41 

42 def create_many(self, data: list[MultiPurposeLabelCreate]) -> list[MultiPurposeLabelOut]: 1s

43 labels = self.labels.create_many( 

44 [label.cast(MultiPurposeLabelSave, group_id=self.repos.group_id) for label in data] 

45 ) 

46 self._update_shopping_list_label_references(labels) 

47 return labels