Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-05-13 12:01:11 +02:00
parent 50c0b4d012
commit f96c656385
22 changed files with 4352 additions and 4032 deletions

86
routes/system_routes.py Normal file
View File

@@ -0,0 +1,86 @@
"""PiCopy Blueprint: /api/sysinfo, /api/update/*, /api/format/*, /api/system/*."""
import subprocess
import threading
from flask import Blueprint, jsonify, request
from picopy.usb import usb_devices
from picopy.state import copy_state
from picopy.system import (
get_sysinfo, update_state, update_lock,
format_state, FORMAT_FILESYSTEMS,
check_for_updates, install_update, do_format,
)
system_bp = Blueprint('system', __name__)
@system_bp.route('/api/sysinfo')
def r_sysinfo():
return jsonify(get_sysinfo())
@system_bp.route('/api/update/status')
def r_update_status():
with update_lock:
return jsonify(dict(update_state))
@system_bp.route('/api/update/check', methods=['POST'])
def r_update_check():
threading.Thread(target=check_for_updates, daemon=True).start()
return jsonify(ok=True)
@system_bp.route('/api/update/install', methods=['POST'])
def r_update_install():
from picopy.config import log
try:
install_update()
return jsonify(ok=True)
except SyntaxError as e:
return jsonify(error=f'Update-Datei ungültig: {e}'), 500
except Exception as e:
log.exception('Update fehlgeschlagen')
return jsonify(error=str(e)), 500
@system_bp.route('/api/format/status')
def r_format_status():
return jsonify(dict(format_state))
@system_bp.route('/api/format', methods=['POST'])
def r_format():
if format_state['running']:
return jsonify(error='Formatierung läuft bereits'), 409
if copy_state.get('running'):
return jsonify(error='Kopiervorgang läuft bitte warten'), 409
body = request.get_json(force=True)
fs = body.get('fs', '').lower()
name = (body.get('name') or 'PICOPY').upper()
dev = body.get('device', '')
if fs not in FORMAT_FILESYSTEMS:
return jsonify(error=f'Unbekanntes Dateisystem: {fs}'), 400
if not dev.startswith('/dev/'):
return jsonify(error='Ungültiges Gerät'), 400
# Sicherheitscheck: Gerät muss ein bekanntes USB-Gerät sein
known = [d['device'] for d in usb_devices()]
if dev not in known:
return jsonify(error='Gerät nicht als USB-Laufwerk erkannt'), 400
threading.Thread(target=do_format, args=(fs, name, dev), daemon=True).start()
return jsonify(ok=True)
@system_bp.route('/api/system/reboot', methods=['POST'])
def r_system_reboot():
threading.Thread(target=lambda: (
__import__('time').sleep(1),
subprocess.Popen(['reboot'])
), daemon=True).start()
return jsonify(ok=True)