Coverage for portality / events / consumers / application_publisher_revision_notify.py: 97%
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# ~~ApplicationPublisherRevisionNotify:Consumer~~
2from portality.events import consumer_utils
3from portality.events.consumer import EventConsumer
4from portality import constants
5from portality import models
6from portality.bll import DOAJ, exceptions
7from portality.lib import dates
8from portality.lib.dates import FMT_DATE_HUMAN_A
9from portality.lib.seamless import SeamlessException
12class ApplicationPublisherRevisionNotify(EventConsumer):
13 ID = "application:publisher:revision:notify"
15 @classmethod
16 def should_consume(cls, event):
17 return event.id == constants.EVENT_APPLICATION_STATUS and \
18 event.context.get("application") is not None and \
19 event.context.get("old_status") != constants.APPLICATION_STATUS_REVISIONS_REQUIRED and \
20 event.context.get("new_status") == constants.APPLICATION_STATUS_REVISIONS_REQUIRED
22 @classmethod
23 def consume(cls, event):
24 app_source = event.context.get("application")
25 try:
26 application = models.Application(**app_source)
27 except SeamlessException as e:
28 raise exceptions.NoSuchObjectException("Unable to construct Application from supplied source - data structure validation error, {x}".format(x=e))
30 if application.owner is None:
31 return None
33 # ~~-> Notifications:Service ~~
34 svc = DOAJ.notificationsService()
36 notification = models.Notification()
37 notification.who = application.owner
38 notification.created_by = cls.ID
39 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS_CHANGE
40 datetime_object = dates.parse(application.date_applied)
41 date_applied = datetime_object.strftime(FMT_DATE_HUMAN_A)
42 notification.long = svc.long_notification(cls.ID).format(
43 application_title=application.bibjson().title,
44 date_applied=date_applied
45 )
46 notification.short = svc.short_notification(cls.ID).format(
47 issns=application.bibjson().issns_as_text()
48 )
50 svc.notify(notification)
51 return notification