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