Coverage for portality / events / consumers / application_publisher_accepted_notify.py: 93%
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# ~~ApplicationPublisherAcceptedNotify:Consumer~~
2from portality import constants
3from portality import models
4from portality.bll import DOAJ
5from portality.core import app
6from portality.events import consumer_utils
7from portality.events.consumer import EventConsumer
8from portality.lib import dates
9from portality.models import Account
10from portality.util import url_for
13class ApplicationPublisherAcceptedNotify(EventConsumer):
14 ID = "application:publisher:accepted:notify"
16 @classmethod
17 def should_consume(cls, event):
18 if event.id != constants.EVENT_APPLICATION_STATUS:
19 return False
21 if not Account.is_enable_publisher_email():
22 return False
24 app_source = event.context.get("application")
25 if app_source is None:
26 return False
28 if event.context.get("new_status") != constants.APPLICATION_STATUS_ACCEPTED:
29 return False
31 application = consumer_utils.parse_application(app_source)
32 is_new_application = application.application_type == constants.APPLICATION_TYPE_NEW_APPLICATION
33 return is_new_application
35 @classmethod
36 def consume(cls, event):
37 if not Account.is_enable_publisher_email():
38 return None
40 app_source = event.context.get("application")
42 application = consumer_utils.parse_application(app_source)
43 if not application.owner:
44 return None
46 # ~~-> Notifications:Service ~~
47 svc = DOAJ.notificationsService()
49 notification = models.Notification()
50 notification.who = application.owner
51 notification.created_by = cls.ID
52 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS_CHANGE
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 publisher_dashboard_url=app.config.get("BASE_URL") + url_for("publisher.journals"),
58 faq_url=app.config.get("BASE_URL") + url_for("doaj.faq")
59 )
60 notification.short = svc.short_notification(cls.ID).format(
61 issns=application.bibjson().issns_as_text()
62 )
64 notification.action = url_for("publisher.journals")
66 svc.notify(notification)
67 return notification