Coverage for portality / events / consumers / application_assed_assigned_notify.py: 100%

28 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-04 09:41 +0100

1# ~~ ApplicationAssedAssignedNotify:Consumer ~~ 

2from portality.events import consumer_utils 

3from portality.util import url_for 

4from portality.events.consumer import EventConsumer 

5from portality import constants 

6from portality import models 

7from portality.bll import DOAJ 

8from portality.bll import exceptions 

9 

10 

11class ApplicationAssedAssignedNotify(EventConsumer): 

12 ID = "application:assed:assigned:notify" 

13 

14 @classmethod 

15 def should_consume(cls, event): 

16 return event.id == constants.EVENT_APPLICATION_ASSED_ASSIGNED and \ 

17 event.context.get("application") is not None 

18 

19 @classmethod 

20 def consume(cls, event): 

21 app_source = event.context.get("application") 

22 

23 application = consumer_utils.parse_application(app_source) 

24 if not application.editor: 

25 raise exceptions.NoSuchPropertyException("Application {x} does not have property `editor`".format(x=application.id)) 

26 

27 # ~~-> Notifications:Service ~~ 

28 svc = DOAJ.notificationsService() 

29 

30 notification = models.Notification() 

31 notification.who = application.editor 

32 notification.created_by = cls.ID 

33 notification.classification = constants.NOTIFICATION_CLASSIFICATION_ASSIGN 

34 notification.long = svc.long_notification(cls.ID).format( 

35 journal_title=application.bibjson().title, 

36 group_name=application.editor_group 

37 ) 

38 notification.short = svc.short_notification(cls.ID).format( 

39 issns=application.bibjson().issns_as_text() 

40 ) 

41 notification.action = url_for("editor.application", application_id=application.id) 

42 

43 svc.notify(notification) 

44 return notification