Coverage for portality / events / consumers / application_publisher_assigned_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# ~~ApplicationPublisherAssignedNotify:Consumer~~
2from portality.events import consumer_utils
3from portality.models import Account
4from portality.util import url_for
5from portality.events.consumer import EventConsumer
6from portality import constants
7from portality import models
8from portality.bll import DOAJ
9from portality.bll import exceptions
10from portality.lib import dates
11from portality.core import app
14class ApplicationPublisherAssignedNotify(EventConsumer):
15 ID = "application:publisher:assigned:notify"
17 @classmethod
18 def should_consume(cls, event):
19 if event.id != constants.EVENT_APPLICATION_ASSED_ASSIGNED:
20 return False
22 if not Account.is_enable_publisher_email():
23 return False
25 app_source = event.context.get("application")
26 if app_source is None:
27 return False
29 if event.context.get("old_editor") not in [None, ""]:
30 return False
32 if event.context.get("new_editor") in [None, ""]:
33 return False
35 application = consumer_utils.parse_application(app_source)
36 is_new_application = application.application_type == constants.APPLICATION_TYPE_NEW_APPLICATION
37 return is_new_application
39 @classmethod
40 def consume(cls, event):
41 app_source = event.context.get("application")
43 application = consumer_utils.parse_application(app_source)
44 if not application.owner:
45 raise exceptions.NoSuchPropertyException("Application {x} does not have property `owner`".format(x=application.id))
47 # ~~-> Notifications:Service ~~
48 svc = DOAJ.notificationsService()
50 notification = models.Notification()
51 notification.who = application.owner
52 notification.created_by = cls.ID
53 notification.classification = constants.NOTIFICATION_CLASSIFICATION_ASSIGN
54 notification.long = svc.long_notification(cls.ID).format(
55 application_title=application.bibjson().title,
56 application_date=dates.human_date(application.date_applied),
57 volunteers_url=app.config.get('BASE_URL', "https://doaj.org") + url_for("doaj.volunteers"),
58 )
59 notification.short = svc.short_notification(cls.ID).format(
60 issns=application.bibjson().issns_as_text()
61 )
62 # note that there is no action url
64 svc.notify(notification)
65 return notification