Coverage for portality / events / consumers / update_request_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# ~~UpdateRequestPublisherAcceptedNotify:Consumer~~
2from portality.events import consumer_utils
3from portality.models import Account
4from portality.util import url_for
6from portality.events.consumer import EventConsumer
7from portality import constants
8from portality import models
9from portality.lib import edges, dates
10from portality.bll import DOAJ, exceptions
11from portality.core import app
14class UpdateRequestPublisherAcceptedNotify(EventConsumer):
15 ID = "update_request:publisher:accepted:notify"
17 @classmethod
18 def should_consume(cls, event):
19 if event.id != constants.EVENT_APPLICATION_STATUS:
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("new_status") != constants.APPLICATION_STATUS_ACCEPTED:
30 return False
32 application = consumer_utils.parse_application(app_source)
33 is_update_request = application.application_type == constants.APPLICATION_TYPE_UPDATE_REQUEST
34 return is_update_request
36 @classmethod
37 def consume(cls, event):
38 if not Account.is_enable_publisher_email():
39 return None
41 app_source = event.context.get("application")
43 application = consumer_utils.parse_application(app_source)
44 if not application.owner:
45 return None
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_STATUS_CHANGE
55 notification.long = svc.long_notification(cls.ID).format(
56 application_title=application.bibjson().title,
57 application_date=dates.human_date(application.date_applied),
58 publisher_dashboard_url=app.config.get('BASE_URL', "https://doaj.org") + url_for("publisher.journals")
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