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

1# ~~JournalDiscontinuingSoonNotify:Consumer~~ 

2import json 

3import urllib.parse 

4 

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 

13 

14class JournalDiscontinuingSoonNotify(EventConsumer): 

15 ID = "journal:maned:discontinuing_soon:notify" 

16 

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 

22 

23 @classmethod 

24 def consume(cls, event): 

25 journal_id = event.context.get("journal") 

26 discontinued_date = event.context.get("discontinue_date") 

27 

28 journal = models.Journal.pull(journal_id) 

29 if journal is None: 

30 return None 

31 

32 if not journal.editor_group: 

33 return None 

34 

35 eg = models.EditorGroup.pull_by_key("name", journal.editor_group) 

36 managing_editor = eg.maned 

37 if not managing_editor: 

38 return None 

39 

40 # ~~-> Notifications:Service ~~ 

41 svc = DOAJ.notificationsService() 

42 

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) 

54 

55 svc.notify(notification) 

56 return notification