linuxrouter/docker/routlin-dash/app/action_actions.py
2026-05-25 22:44:37 -04:00

64 lines
2.2 KiB
Python

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,
_is_locked, _format_timing, _seconds_until_next_run)
bp = Blueprint('action_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():
if not get_dashboard_pending():
flash('No pending changes to apply.', 'info')
return redirect(_VIEW)
flush_pending_to_queue()
if _is_locked():
msg = 'Changes queued. They are being applied now.'
else:
timing = _format_timing(_seconds_until_next_run())
if timing:
msg = f'Changes queued. They will be applied {timing}.'
else:
msg = 'Changes queued. The processing service is not running.'
flash(msg, 'success')
return redirect(_VIEW)
@bp.route('/action/queue_core_apply', methods=['POST'])
@require_level('administrator')
def queue_core_apply():
flash(queued_msg('core apply', action_label='Apply 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)