Coverage for portality / events / consumers / application_editor_group_assigned_notify.py: 94%
33 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
1# ~~ ApplicatioditorGroupAssignedNotify: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
11class ApplicationEditorGroupAssignedNotify(EventConsumer):
12 ID = "application:editor_group:assigned:notify"
14 @classmethod
15 def should_consume(cls, event):
16 return event.id == constants.EVENT_APPLICATION_EDITOR_GROUP_ASSIGNED and \
17 event.context.get("application") is not None
19 @classmethod
20 def consume(cls, event):
21 app_source = event.context.get("application")
23 application = consumer_utils.parse_application(app_source)
25 if application.application_type != constants.APPLICATION_TYPE_NEW_APPLICATION:
26 return None
28 if not application.editor_group:
29 return None
31 editor_group = models.EditorGroup.pull_by_key("name", application.editor_group)
33 if not editor_group.editor:
34 raise exceptions.NoSuchPropertyException("Editor Group {x} does not have property `editor`".format(x=editor_group.id))
36 # ~~-> Notifications:Service ~~
37 svc = DOAJ.notificationsService()
39 notification = models.Notification()
40 notification.who = editor_group.editor
41 notification.created_by = cls.ID
42 notification.classification = constants.NOTIFICATION_CLASSIFICATION_ASSIGN
44 notification.long = svc.long_notification(cls.ID).format(
45 journal_name=application.bibjson().title
46 )
47 notification.short = svc.short_notification(cls.ID).format(
48 issns=application.bibjson().issns_as_text()
49 )
51 notification.action = url_for("editor.application", application_id=application.id)
53 svc.notify(notification)
54 return notification