Coverage for portality / events / consumers / update_request_publisher_rejected_notify.py: 95%
43 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# ~~UpdateRequestPublisherRejectedNotify:Consumer~~
2from portality import constants
3from portality import models
4from portality.bll import DOAJ
5from portality.events import consumer_utils
6from portality.events.consumer import EventConsumer
7from portality.lib import dates
8from portality.lib.dates import FMT_DATE_HUMAN_A
9from portality.models import Account
12class UpdateRequestPublisherRejectedNotify(EventConsumer):
13 ID = "update_request:publisher:rejected:notify"
15 @classmethod
16 def should_consume(cls, event):
17 if event.id != constants.EVENT_APPLICATION_STATUS:
18 return False
20 if not Account.is_enable_publisher_email():
21 return False
23 app_source = event.context.get("application")
24 if app_source is None:
25 return False
27 if event.context.get("new_status") != constants.APPLICATION_STATUS_REJECTED:
28 return False
30 if event.context.get("old_status") == constants.APPLICATION_STATUS_REJECTED:
31 return False
33 application = consumer_utils.parse_application(app_source)
34 is_update_request = application.application_type == constants.APPLICATION_TYPE_UPDATE_REQUEST
35 return is_update_request
37 @classmethod
38 def consume(cls, event):
39 app_source = event.context.get("application")
41 application = consumer_utils.parse_application(app_source)
42 if not application.owner:
43 return None
45 # ~~-> Notifications:Service ~~
46 svc = DOAJ.notificationsService()
48 notification = models.Notification()
49 notification.who = application.owner
50 notification.created_by = cls.ID
51 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS_CHANGE
52 datetime_object = dates.parse(application.date_applied)
53 date_applied = datetime_object.strftime(FMT_DATE_HUMAN_A)
54 notification.long = svc.long_notification(cls.ID).format(
55 title=application.bibjson().title,
56 date_applied=date_applied,
57 )
58 notification.short = svc.short_notification(cls.ID).format(
59 issns=application.bibjson().issns_as_text()
60 )
62 # there is no action url associated with this notification
64 svc.notify(notification)
65 return notification