"""Backend API for the appalerts app"""
from djangoplugins.models import Plugin
from appalerts.models import AppAlert, ALERT_LEVELS
[docs]class AppAlertAPI:
"""App Alerts backend API"""
[docs] @classmethod
def get_model(cls):
"""
Return AppAlert model for direct model access.
:returns: AppAlert class
"""
return AppAlert
[docs] @classmethod
def add_alert(
cls,
app_name,
alert_name,
user,
message,
level='INFO',
url=None,
project=None,
):
"""
Create an AppAlert.
:param app_name: Name of app plugin which creates the alert (string)
:param alert_name: Internal alert name string
:param user: User object for user receiving the alert
:param message: Message string (can contain HTML)
:param level: Alert level string (INFO, SUCCESS, WARNING or DANGER)
:param url: URL for following up on alert (string, optional)
:param project: Project the alert belongs to (Project object, optional)
:raise: ValueError if the plugin is not found or the level is invalid
:return: AppAlert object
"""
app_plugin = None # None = projectroles
if app_name != 'projectroles':
try:
app_plugin = Plugin.objects.get(name=app_name)
except Plugin.DoesNotExist:
raise ValueError(
'Plugin not found with name: {}'.format(app_name)
)
if level not in ALERT_LEVELS:
raise ValueError(
'Invalid level "{}", accepted values: {}'.format(
level, ', '.join(ALERT_LEVELS)
)
)
return AppAlert.objects.create(
app_plugin=app_plugin,
alert_name=alert_name,
user=user,
message=message,
level=level,
url=url,
project=project,
)
[docs] @classmethod
def add_alerts(
cls,
app_name,
alert_name,
users,
message,
level='INFO',
url=None,
project=None,
):
"""
Create an AppAlert for multiple users.
:param app_name: Name of app plugin which creates the alert (string)
:param alert_name: Internal alert name string
:param users: list of User objects
:param message: Message string (can contain HTML)
:param level: Alert level string (INFO, SUCCESS, WARNING or DANGER)
:param url: URL for following up on alert (string, optional)
:param project: Project the alert belongs to (Project object, optional)
:raise: ValueError if the plugin is not found or the level is invalid
"""
for user in users:
cls.add_alert(
app_name,
alert_name,
user,
message,
level,
url,
project,
)