Coverage for portality / events / consumers / journal_discontinuing_soon_notify.py: 92%
38 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# ~~JournalDiscontinuingSoonNotify:Consumer~~
2import json
3import urllib.parse
5from portality.util import url_for
6from portality.events.consumer import EventConsumer
7from portality.core import app
8from portality import constants
9from portality import models
10from portality.bll import DOAJ, exceptions
11from portality.lib import edges
12from portality import dao
14class JournalDiscontinuingSoonNotify(EventConsumer):
15 ID = "journal:maned:discontinuing_soon:notify"
17 @classmethod
18 def should_consume(cls, event):
19 return event.id == constants.EVENT_JOURNAL_DISCONTINUING_SOON and \
20 event.context.get("journal") is not None and \
21 event.context.get("discontinue_date") is not None
23 @classmethod
24 def consume(cls, event):
25 journal_id = event.context.get("journal")
26 discontinued_date = event.context.get("discontinue_date")
28 journal = models.Journal.pull(journal_id)
29 if journal is None:
30 return None
32 if not journal.editor_group:
33 return None
35 eg = models.EditorGroup.pull_by_key("name", journal.editor_group)
36 managing_editor = eg.maned
37 if not managing_editor:
38 return None
40 # ~~-> Notifications:Service ~~
41 svc = DOAJ.notificationsService()
43 notification = models.Notification()
44 notification.who = managing_editor
45 notification.created_by = cls.ID
46 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS
47 notification.long = svc.long_notification(cls.ID).format(
48 days=app.config.get('DISCONTINUED_DATE_DELTA',0),
49 title=journal.bibjson().title,
50 id=journal.id
51 )
52 notification.short = svc.short_notification(cls.ID)
53 notification.action = url_for("admin.journal_page", journal_id=journal.id)
55 svc.notify(notification)
56 return notification