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

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 

11 

12 

13class ApplicationPublisherAcceptedNotify(EventConsumer): 

14 ID = "application:publisher:accepted:notify" 

15 

16 @classmethod 

17 def should_consume(cls, event): 

18 if event.id != constants.EVENT_APPLICATION_STATUS: 

19 return False 

20 

21 if not Account.is_enable_publisher_email(): 

22 return False 

23 

24 app_source = event.context.get("application") 

25 if app_source is None: 

26 return False 

27 

28 if event.context.get("new_status") != constants.APPLICATION_STATUS_ACCEPTED: 

29 return False 

30 

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 

34 

35 @classmethod 

36 def consume(cls, event): 

37 if not Account.is_enable_publisher_email(): 

38 return None 

39 

40 app_source = event.context.get("application") 

41 

42 application = consumer_utils.parse_application(app_source) 

43 if not application.owner: 

44 return None 

45 

46 # ~~-> Notifications:Service ~~ 

47 svc = DOAJ.notificationsService() 

48 

49 notification = models.Notification() 

50 notification.who = application.owner 

51 notification.created_by = cls.ID 

52 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS_CHANGE 

53 

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 ) 

63 

64 notification.action = url_for("publisher.journals") 

65 

66 svc.notify(notification) 

67 return notification