Coverage for portality / bll / services / admin_alerts.py: 91%

33 statements  

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

1# ~~AdminAlerts:Service~~ 

2from portality import app_email 

3from portality import models 

4from portality.core import app 

5from portality.ui import templates 

6 

7 

8class AdminAlertsService(object): 

9 def alert(self, source, message): 

10 a = models.AdminAlert() 

11 a.source = source 

12 a.message = message 

13 a.state = models.AdminAlert.STATE_NEW 

14 a.save() 

15 

16 # now send an email to the sysadmin email 

17 email = app.config.get("ERROR_LOGGING_EMAIL", None) 

18 if email is None: 

19 return a 

20 

21 to = [email] 

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

23 subject = app.config.get("SERVICE_NAME", "") + " - admin alert from " + source 

24 

25 # ~~-> Email:Library ~~ 

26 app_email.send_mail(to=to, 

27 fro=fro, 

28 subject=subject, 

29 template_name=templates.EMAIL_NOTIFICATION, 

30 user=None, # no user for admin alerts 

31 message=message) 

32 

33 return a 

34 

35 def set_in_progress(self, alert_id: str, user: models.Account): 

36 # ~~-> Notifications:Query ~~ 

37 a = models.AdminAlert.pull(alert_id) 

38 if not a: 

39 return 

40 a.change_state(models.AdminAlert.STATE_IN_PROGRESS, user) 

41 a.save() 

42 return a 

43 

44 def set_closed(self, alert_id: str, user: models.Account): 

45 # ~~-> Notifications:Query ~~ 

46 a = models.AdminAlert.pull(alert_id) 

47 if not a: 

48 return 

49 a.change_state(models.AdminAlert.STATE_CLOSED, user) 

50 a.save() 

51 return a