Coverage for portality / events / consumers / update_request_publisher_accepted_notify.py: 93%

43 statements  

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

1# ~~UpdateRequestPublisherAcceptedNotify:Consumer~~ 

2from portality.events import consumer_utils 

3from portality.models import Account 

4from portality.util import url_for 

5 

6from portality.events.consumer import EventConsumer 

7from portality import constants 

8from portality import models 

9from portality.lib import edges, dates 

10from portality.bll import DOAJ, exceptions 

11from portality.core import app 

12 

13 

14class UpdateRequestPublisherAcceptedNotify(EventConsumer): 

15 ID = "update_request:publisher:accepted:notify" 

16 

17 @classmethod 

18 def should_consume(cls, event): 

19 if event.id != constants.EVENT_APPLICATION_STATUS: 

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("new_status") != constants.APPLICATION_STATUS_ACCEPTED: 

30 return False 

31 

32 application = consumer_utils.parse_application(app_source) 

33 is_update_request = application.application_type == constants.APPLICATION_TYPE_UPDATE_REQUEST 

34 return is_update_request 

35 

36 @classmethod 

37 def consume(cls, event): 

38 if not Account.is_enable_publisher_email(): 

39 return None 

40 

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

42 

43 application = consumer_utils.parse_application(app_source) 

44 if not application.owner: 

45 return None 

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_STATUS_CHANGE 

54 

55 notification.long = svc.long_notification(cls.ID).format( 

56 application_title=application.bibjson().title, 

57 application_date=dates.human_date(application.date_applied), 

58 publisher_dashboard_url=app.config.get('BASE_URL', "https://doaj.org") + url_for("publisher.journals") 

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