Coverage for portality / bll / services / admin_alerts.py: 91%
33 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 00:09 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 00:09 +0100
1# ~~AdminAlerts:Service~~
2from portality import app_email
3from portality import models
4from portality.core import app
5from portality.ui import templates
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()
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
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
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)
33 return a
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
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