Интегрирован wesp в сайт
CI / quality (push) Canceled after 0s

This commit is contained in:
влад
2026-07-17 12:57:18 +03:00
parent 5dfa06ddbe
commit 355c0ef9f1
883 changed files with 194576 additions and 177 deletions
@@ -0,0 +1,144 @@
"""Полная настройка киоска Pi: wesp.env + systemd + киоск + одна перезагрузка."""
from __future__ import annotations
import os
from typing import Any, Dict, List
from app.services.kiosk_boot_service import get_kiosk_boot_status, set_kiosk_boot
from app.services.pi_platform_setup_service import (
apply_pi_platform_setup,
get_pi_platform_setup_status,
)
from app.services.system_restart_service import schedule_system_reboot
def _is_root() -> bool:
geteuid = getattr(os, "geteuid", None)
if geteuid is None:
return False
try:
return geteuid() == 0
except OSError:
return False
def _full_setup_reboot_delay(app_config: Dict[str, Any]) -> float:
try:
raw = app_config.get("WESP_FULL_SETUP_REBOOT_DELAY_SEC")
if raw is None:
raw = app_config.get("WESP_AUTO_REBOOT_DELAY_SEC", 10)
return max(5.0, float(raw))
except (TypeError, ValueError):
return 10.0
def get_full_kiosk_setup_status(app_config: Dict[str, Any]) -> Dict[str, Any]:
pi = get_pi_platform_setup_status(app_config)
kiosk = get_kiosk_boot_status(app_config)
ready = (
pi.get("running_as_root")
and pi.get("platform_ready")
and kiosk.get("kiosk_enabled")
and kiosk.get("kiosk_mode") == "system_labwc"
)
return {
"running_as_root": pi.get("running_as_root"),
"platform_ready": pi.get("platform_ready"),
"kiosk_enabled": kiosk.get("kiosk_enabled"),
"kiosk_mode": kiosk.get("kiosk_mode"),
"chromium_found": kiosk.get("chromium_found"),
"full_setup_ready": ready,
"env_path": pi.get("env_path"),
"systemd_unit": pi.get("systemd_unit"),
"gui_user": kiosk.get("gui_user"),
"active_url": kiosk.get("active_url"),
"message": (
"Киоск Pi полностью настроен"
if ready
else "Нажмите «Настроить киоск Pi» для env, киоска и перезагрузки"
),
}
def apply_full_kiosk_setup(
app_config: Dict[str, Any],
*,
hide_desktop: bool = True,
schedule_reboot: bool = True,
) -> Dict[str, Any]:
if not _is_root():
return {
"ok": False,
"code": "not_root",
"message": (
"Нужен WESP от root (myscript.service), "
"иначе нельзя записать /etc и labwc."
),
}
steps_done: List[str] = []
delay = _full_setup_reboot_delay(app_config)
pi = apply_pi_platform_setup(app_config, restart_service=False)
if not pi.get("ok"):
return {
"ok": False,
"code": pi.get("code") or "pi_platform_error",
"failed_step": "pi_platform",
"steps_completed": steps_done,
"message": pi.get("message") or "Ошибка настройки Pi",
"pi_platform": pi,
}
steps_done.append("pi_platform")
kiosk = set_kiosk_boot(
True,
app_config,
hide_desktop=hide_desktop,
schedule_reboot=False,
)
if not kiosk.get("ok"):
return {
"ok": False,
"code": kiosk.get("code") or "kiosk_error",
"failed_step": "kiosk",
"steps_completed": steps_done,
"message": kiosk.get("message") or "Ошибка включения киоска",
"pi_platform": pi,
"kiosk": kiosk,
}
steps_done.append("kiosk")
reboot: Dict[str, Any] = {"scheduled": False}
if schedule_reboot:
reboot = schedule_system_reboot(
app_config,
delay_sec=delay,
reason="полная настройка киоска",
)
if reboot.get("scheduled"):
steps_done.append("reboot")
parts = [
"Настроены wesp.env и systemd",
"киоск Chromium без рабочего стола",
]
if reboot.get("scheduled"):
parts.append(f"перезагрузка через {int(delay)} с")
msg = ". ".join(parts) + "."
st = get_full_kiosk_setup_status(app_config)
return {
"ok": True,
"code": "full_setup_applied",
"message": msg,
"steps_completed": steps_done,
"reboot_scheduled": bool(reboot.get("scheduled")),
"reboot_delay_sec": delay if reboot.get("scheduled") else None,
"reboot_message": reboot.get("message"),
"pi_platform": pi,
"kiosk": kiosk,
"full_setup_ready": st.get("full_setup_ready"),
"startup_screen_url": kiosk.get("target_url"),
}