from flask import Blueprint, request, redirect, flash, session from auth import require_level from config_utils import (flush_pending_to_queue, get_dashboard_pending, revert_snapshot_to_config, queued_msg) bp = Blueprint('actions', __name__) _VIEW = '/view/view_actions' @bp.route('/action/actions_cardpending_save', methods=['POST']) @require_level('administrator') def actions_cardpending_save(): session['apply_changes_immediately'] = 'apply_changes_immediately' in request.form flash('Preference saved.', 'success') return redirect(_VIEW) @bp.route('/action/actions_cardpending_applynow', methods=['POST']) @require_level('administrator') def actions_cardpending_applynow(): pending = get_dashboard_pending() if not pending: flash('No pending changes to apply.', 'info') return redirect(_VIEW) flush_pending_to_queue() if any(cmd != 'fix problems' for _, _, cmd, _ in pending): flash('Changes queued.', 'success') return redirect(_VIEW) @bp.route('/action/actions_cardhistory_revertselected', methods=['POST']) @require_level('administrator') def actions_cardhistory_revertselected(): selected_uuids = request.form.getlist('selected_uuids') if not selected_uuids: flash('No items selected.', 'info') return redirect(_VIEW) succeeded, failed = 0, 0 for uuid in selected_uuids: msg, ok = revert_snapshot_to_config(uuid) if ok: succeeded += 1 else: flash(msg, 'error') failed += 1 if succeeded: plural = 's' if succeeded != 1 else '' flash(f'{succeeded} change{plural} reverted.', 'success') return redirect(_VIEW)