Coverage for portality/bll/services/notifications.py: 100%

22 statements  

« prev     ^ index     » next       coverage.py v6.4.2, created at 2022-11-09 15:10 +0000

1# ~~Notifications:Service~~ 

2from portality import models 

3from portality.core import app 

4from portality import app_email 

5from portality.ui.messages import Messages 

6from portality.bll.exceptions import NoSuchObjectException, NoSuchPropertyException 

7 

8 

9class NotificationsService(object): 

10 def notify(self, notification): 

11 # first just save the notification 

12 notification.save() 

13 

14 # now send an email to the notification target 

15 acc = models.Account.pull(notification.who) 

16 if acc is None: 

17 raise NoSuchObjectException(Messages.EXCEPTION_NOTIFICATION_NO_ACCOUNT.format(x=notification.who)) 

18 

19 if acc.email is None: 

20 raise NoSuchPropertyException(Messages.EXCEPTION_NOTIFICATION_NO_EMAIL.format(x=notification.who)) 

21 

22 to = [acc.email] 

23 fro = app.config.get('SYSTEM_EMAIL_FROM', 'helpdesk@doaj.org') 

24 subject = app.config.get("SERVICE_NAME", "") + " - " + notification.short 

25 

26 app_email.send_markdown_mail(to=to, 

27 fro=fro, 

28 subject=subject, 

29 template_name="email/notification_email.jinja2", 

30 markdown_template_name="email/notification_email.jinja2", # for the moment the markdown and plaintext templates are the same 

31 user=acc, 

32 message=notification.long, 

33 action=notification.action, 

34 url_root=app.config.get("BASE_URL")) 

35 

36 return notification 

37 

38 def long_notification(self, message_id): 

39 return app.jinja_env.globals["data"]["notifications"].get(message_id, {}).get("long") 

40 

41 def short_notification(self, message_id): 

42 return app.jinja_env.globals["data"]["notifications"].get(message_id, {}).get("short", Messages.NOTIFY__DEFAULT_SHORT_NOTIFICATION)