Source code for hawat.blueprints.settings_reporting.forms
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# -------------------------------------------------------------------------------
# This file is part of Mentat system (https://mentat.cesnet.cz/).
#
# Copyright (C) since 2011 CESNET, z.s.p.o (http://www.ces.net/)
# Use of this source is governed by the MIT license, see LICENSE file.
# -------------------------------------------------------------------------------
"""
This module contains custom reporting settings management forms for Hawat.
"""
__author__ = "Jan Mach <jan.mach@cesnet.cz>"
__credits__ = "Pavel Kácha <pavel.kacha@cesnet.cz>, Andrea Kropáčová <andrea.kropacova@cesnet.cz>"
import os
import pytz
import wtforms
from wtforms_sqlalchemy.fields import QuerySelectField
from babel import Locale
from flask_babel import lazy_gettext
import hawat.const
import hawat.forms
import hawat.db
import mentat.const
from mentat.datatype.sqldb import GroupModel
REPORT_TRANSLATIONS = '/etc/mentat/templates/reporter/translations'
[docs]def get_available_groups():
"""
Query the database for list of all available groups.
"""
return hawat.db.db_query(GroupModel).order_by(GroupModel.name).all()
[docs]def get_available_locales():
"""
Get list available report translations.
"""
locale_list = [['en', 'en']]
if os.path.isdir(REPORT_TRANSLATIONS):
for translation in os.listdir(REPORT_TRANSLATIONS):
if translation[0] == '.':
continue
if os.path.isdir(os.path.join(REPORT_TRANSLATIONS, translation)):
locale_list.append([translation, translation])
locale_list = sorted(locale_list, key=lambda x: x[0])
for translation in locale_list:
locale_obj = Locale.parse(translation[0])
translation[1] = locale_obj.language_name.lower()
return locale_list
[docs]class BaseSettingsReportingForm(hawat.forms.BaseItemForm):
"""
Class representing base reporting settings form.
"""
mode = wtforms.SelectField(
lazy_gettext('Reporting mode:'),
validators=[
wtforms.validators.Optional(),
],
choices=[
('', lazy_gettext('<< system default >>')),
(mentat.const.REPORTING_MODE_SUMMARY, lazy_gettext('summary')),
(mentat.const.REPORTING_MODE_EXTRA, lazy_gettext('extra')),
(mentat.const.REPORTING_MODE_BOTH, lazy_gettext('both')),
(mentat.const.REPORTING_MODE_NONE, lazy_gettext('none'))
],
filters=[lambda x: x or None]
)
emails_low = hawat.forms.CommaListField(
lazy_gettext('Target emails - low severity:'),
validators=[
wtforms.validators.Optional(),
hawat.forms.check_email_list
]
)
emails_medium = hawat.forms.CommaListField(
lazy_gettext('Target emails - medium severity:'),
validators=[
wtforms.validators.Optional(),
hawat.forms.check_email_list
]
)
emails_high = hawat.forms.CommaListField(
lazy_gettext('Target emails - high severity:'),
validators=[
wtforms.validators.Optional(),
hawat.forms.check_email_list
]
)
emails_critical = hawat.forms.CommaListField(
lazy_gettext('Target emails - critical severity:'),
validators=[
wtforms.validators.Optional(),
hawat.forms.check_email_list
]
)
redirect = hawat.forms.RadioFieldWithNone(
lazy_gettext('Report redirection:'),
validators=[
wtforms.validators.Optional(),
],
choices=[
(None, lazy_gettext('System default')),
(True, lazy_gettext('Enabled')),
(False, lazy_gettext('Disabled'))
],
filters=[hawat.forms.str_to_bool_with_none],
coerce=hawat.forms.str_to_bool_with_none
)
locale = wtforms.SelectField(
lazy_gettext('Locale:'),
validators=[
wtforms.validators.Optional(),
],
choices=[('', lazy_gettext('<< system default >>'))] + get_available_locales(),
filters=[lambda x: x or None]
)
timezone = wtforms.SelectField(
lazy_gettext('Timezone:'),
validators=[
wtforms.validators.Optional(),
],
choices=[('', lazy_gettext('<< system default >>'))] + list(zip(pytz.common_timezones, pytz.common_timezones)),
filters=[lambda x: x or None]
)
submit = wtforms.SubmitField(
lazy_gettext('Submit')
)
cancel = wtforms.SubmitField(
lazy_gettext('Cancel')
)
[docs]class CreateSettingsReportingForm(BaseSettingsReportingForm):
"""
Class representing reporting settings create form.
"""
group = QuerySelectField(
lazy_gettext('Group:'),
query_factory=get_available_groups,
allow_blank=False
)
[docs]class UpdateSettingsReportingForm(BaseSettingsReportingForm):
"""
Class representing reporting settings update form.
"""