Coverage for src / mesh / models / roles / journal_manager.py: 97%

29 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-05-04 12:41 +0000

1from typing import ClassVar 

2 

3from django.db.models import QuerySet, Value 

4from django.utils.translation import gettext as _ 

5from opentelemetry import trace 

6 

7from mesh.models.orm.submission_models import Submission, SubmissionState 

8from mesh.models.orm.user_models import User 

9from mesh.models.roles.editor import Editor 

10 

11tracer = trace.get_tracer(__name__) 

12 

13 

14class JournalManager(Editor): 

15 """ 

16 Journal manager role. 

17 """ 

18 

19 _CODE: ClassVar[str] = "journal_manager" 

20 _NAME: ClassVar[str] = _("Journal manager") 

21 _ICON_CLASS: ClassVar[str] = "fa-newspaper" 

22 _SUBMISSION_LIST_TITLE: ClassVar[str] = _("All submissions") 

23 

24 @tracer.start_as_current_span("JournalManager.__init__") 

25 def __init__(self, user: User) -> None: 

26 super().__init__(user) 

27 self.submissions_queryset = Submission.objects.all().exclude(created_by=self.user) 

28 

29 def _get_is_active(self): 

30 return self.user.journal_manager 

31 

32 def get_submissions(self): 

33 return ( 

34 self._annotate_submission_query(self.submissions_queryset) 

35 .annotate(user_is_editor=Value(True)) 

36 .exclude(state=SubmissionState.OPENED.value) 

37 ) 

38 

39 def get_managed_users(self) -> QuerySet[User]: 

40 """ 

41 Can impersonate anyone except admin users. 

42 """ 

43 return ( 

44 User.objects.exclude(pk=self.user.pk) 

45 .exclude(is_superuser=True) 

46 .exclude(journal_manager=True) 

47 ) 

48 

49 def can_edit_journal_sections(self) -> bool: 

50 return True 

51 

52 def can_access_shortcut_actions(self) -> bool: 

53 return True 

54 

55 def can_impersonate(self): 

56 return True