diff --git a/app/models.py b/app/models.py index 8ab09e6d80ef5656b17edcaa79519b079e77c5c3..38c440204f013428e215c6fb4eca1f82d0386b6e 100644 --- a/app/models.py +++ b/app/models.py @@ -127,6 +127,8 @@ class IntEnumColumn(db.TypeDecorator): return value.value elif isinstance(value, int): return self.enum_type(value).value + elif isinstance(value, str): + return self.enum_type[value].value else: return TypeError() @@ -144,8 +146,7 @@ class ContainerColumn(db.TypeDecorator): def process_bind_param(self, value, dialect): if isinstance(value, self.container_type): return json.dumps(value) - elif (isinstance(value, str) - and isinstance(json.loads(value), self.container_type)): + elif isinstance(value, str) and isinstance(json.loads(value), self.container_type): return value else: return TypeError() diff --git a/app/settings/forms.py b/app/settings/forms.py index 552799270c7c3c6e0c174e0052ba8925b8bc2f75..e90d9ddaa17fa68ec178690d7a1a240550922cca 100644 --- a/app/settings/forms.py +++ b/app/settings/forms.py @@ -1,24 +1,7 @@ from flask_wtf import FlaskForm -from wtforms import ( - BooleanField, - FileField, - PasswordField, - SelectField, - StringField, - SubmitField, - TextAreaField, - ValidationError -) -from wtforms.validators import ( - DataRequired, - InputRequired, - Email, - EqualTo, - Length, - Regexp -) -from app.models import User, UserSettingJobStatusMailNotificationLevel -from app.auth import USERNAME_REGEX +from wtforms import PasswordField, SelectField, SubmitField, ValidationError +from wtforms.validators import DataRequired, EqualTo +from app.models import UserSettingJobStatusMailNotificationLevel class ChangePasswordForm(FlaskForm): @@ -47,18 +30,14 @@ class ChangePasswordForm(FlaskForm): if not self.user.verify_password(field.data): raise ValidationError('Invalid password') + class EditNotificationSettingsForm(FlaskForm): job_status_mail_notification_level = SelectField( 'Job status mail notification level', - choices=[('', 'Choose your option')], + choices=[ + (x.name, x.name.capitalize()) + for x in UserSettingJobStatusMailNotificationLevel + ], validators=[DataRequired()] ) submit = SubmitField() - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.job_status_mail_notification_level.choices += [ - (x.name, x.name.capitalize()) - for x in UserSettingJobStatusMailNotificationLevel - ] - diff --git a/app/settings/routes.py b/app/settings/routes.py index 754a98cde6d9ab2ce58777942336a1a305e48106..a07869b838b9b16c700637280d2497e70f803104 100644 --- a/app/settings/routes.py +++ b/app/settings/routes.py @@ -1,12 +1,9 @@ -from flask import abort, flash, redirect, render_template, url_for +from flask import flash, redirect, render_template, url_for from flask_login import current_user, login_required from app import db -from app.models import ProfilePrivacySettings, UserSettingJobStatusMailNotificationLevel +from app.models import UserSettingJobStatusMailNotificationLevel from . import bp -from .forms import ( - ChangePasswordForm, - EditNotificationSettingsForm -) +from .forms import ChangePasswordForm, EditNotificationSettingsForm @bp.route('', methods=['GET', 'POST']) @@ -20,22 +17,20 @@ def settings(): data=current_user.to_json_serializeable(), prefix='edit-notification-settings-form' ) + # region handle change_password_form POST if change_password_form.submit.data and change_password_form.validate(): current_user.password = change_password_form.new_password.data db.session.commit() flash('Your changes have been saved') - return redirect(url_for('.index')) - - if (edit_notification_settings_form.submit - and edit_notification_settings_form.validate()): - current_user.setting_job_status_mail_notification_level = ( - UserSettingJobStatusMailNotificationLevel[ - edit_notification_settings_form.job_status_mail_notification_level.data # noqa - ] - ) + return redirect(url_for('.settings')) + # endregion handle change_password_form POST + # region handle edit_notification_settings_form POST + if edit_notification_settings_form.submit and edit_notification_settings_form.validate(): + current_user.setting_job_status_mail_notification_level = edit_notification_settings_form.job_status_mail_notification_level.data db.session.commit() flash('Your changes have been saved') return redirect(url_for('.settings')) + # endregion handle edit_notification_settings_form POST return render_template( 'settings/settings.html.j2', change_password_form=change_password_form,