Coverage for portality / events / consumers / application_publisher_assigned_notify.py: 95%

43 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-04 09:41 +0100

1# ~~ApplicationPublisherAssignedNotify:Consumer~~ 

2from portality.events import consumer_utils 

3from portality.models import Account 

4from portality.util import url_for 

5from portality.events.consumer import EventConsumer 

6from portality import constants 

7from portality import models 

8from portality.bll import DOAJ 

9from portality.bll import exceptions 

10from portality.lib import dates 

11from portality.core import app 

12 

13 

14class ApplicationPublisherAssignedNotify(EventConsumer): 

15 ID = "application:publisher:assigned:notify" 

16 

17 @classmethod 

18 def should_consume(cls, event): 

19 if event.id != constants.EVENT_APPLICATION_ASSED_ASSIGNED: 

20 return False 

21 

22 if not Account.is_enable_publisher_email(): 

23 return False 

24 

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

26 if app_source is None: 

27 return False 

28 

29 if event.context.get("old_editor") not in [None, ""]: 

30 return False 

31 

32 if event.context.get("new_editor") in [None, ""]: 

33 return False 

34 

35 application = consumer_utils.parse_application(app_source) 

36 is_new_application = application.application_type == constants.APPLICATION_TYPE_NEW_APPLICATION 

37 return is_new_application 

38 

39 @classmethod 

40 def consume(cls, event): 

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

42 

43 application = consumer_utils.parse_application(app_source) 

44 if not application.owner: 

45 raise exceptions.NoSuchPropertyException("Application {x} does not have property `owner`".format(x=application.id)) 

46 

47 # ~~-> Notifications:Service ~~ 

48 svc = DOAJ.notificationsService() 

49 

50 notification = models.Notification() 

51 notification.who = application.owner 

52 notification.created_by = cls.ID 

53 notification.classification = constants.NOTIFICATION_CLASSIFICATION_ASSIGN 

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 volunteers_url=app.config.get('BASE_URL', "https://doaj.org") + url_for("doaj.volunteers"), 

58 ) 

59 notification.short = svc.short_notification(cls.ID).format( 

60 issns=application.bibjson().issns_as_text() 

61 ) 

62 # note that there is no action url 

63 

64 svc.notify(notification) 

65 return notification