from flask import flash, redirect, render_template, url_for from flask_login import current_user, login_required, logout_user from . import bp, tasks from .forms import ( ChangePasswordForm, EditGeneralSettingsForm, EditInterfaceSettingsForm, EditNotificationSettingsForm ) from .. import db from ..models import JobStatusMailNotificationLevel @bp.route('', methods=['GET', 'POST']) @login_required def index(): change_password_form = ChangePasswordForm( current_user._get_current_object(), prefix='change_password_form' ) edit_general_settings_form = EditGeneralSettingsForm( current_user._get_current_object(), prefix='edit_general_settings_form' ) edit_interface_settings_form = EditInterfaceSettingsForm( prefix='edit_interface_settings_form' ) edit_notification_settings_form = EditNotificationSettingsForm( prefix='edit_notification_settings_form' ) 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_general_settings_form.submit.data and edit_general_settings_form.validate() ): current_user.email = edit_general_settings_form.email.data current_user.username = edit_general_settings_form.username.data db.session.commit() flash('Your changes have been saved') return redirect(url_for('.index')) if ( edit_interface_settings_form.submit.data and edit_interface_settings_form.validate() ): current_user.setting_dark_mode = \ edit_interface_settings_form.dark_mode.data db.session.commit() flash('Your changes have been saved') return redirect(url_for('.index')) if ( edit_notification_settings_form.submit.data and edit_notification_settings_form.validate() ): current_user.setting_job_status_mail_notification_level = \ JobStatusMailNotificationLevel[ edit_notification_settings_form.job_status_mail_notification_level.data # noqa ] db.session.commit() flash('Your changes have been saved') return redirect(url_for('.index')) edit_general_settings_form.email.data = current_user.email edit_general_settings_form.username.data = current_user.username edit_interface_settings_form.dark_mode.data = \ current_user.setting_dark_mode edit_notification_settings_form.job_status_mail_notification_level.data = \ current_user.setting_job_status_mail_notification_level.name return render_template( 'settings/index.html.j2', change_password_form=change_password_form, edit_general_settings_form=edit_general_settings_form, edit_interface_settings_form=edit_interface_settings_form, edit_notification_settings_form=edit_notification_settings_form, title='Settings' ) @bp.route('/delete') @login_required def delete(): """ View to delete current_user and all associated data. """ tasks.delete_user(current_user.id) logout_user() flash('Your account has been marked for deletion') return redirect(url_for('main.index'))