@@ -0,0 +1,75 @@
|
||||
"""Запуск фоновой проверки обновлений (без автоустановки) при старте процесса."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import atexit
|
||||
import logging
|
||||
import threading
|
||||
import time
|
||||
from typing import Any, Optional
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
_started = False
|
||||
|
||||
|
||||
def get_auto_updater() -> Any:
|
||||
"""Singleton AutoUpdater или None, если проверка не инициализирована."""
|
||||
try:
|
||||
from update import auto_updater
|
||||
|
||||
return auto_updater
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def schedule_update_checker(app, *, delay_sec: Optional[float] = None) -> None:
|
||||
"""Стартует фоновый цикл check_for_updates, если включено в recipes.db."""
|
||||
global _started
|
||||
if _started or app.config.get("TESTING"):
|
||||
return
|
||||
_started = True
|
||||
|
||||
if delay_sec is None:
|
||||
from app.services.startup_defer import default_startup_delay_sec
|
||||
|
||||
delay_sec = default_startup_delay_sec(
|
||||
"WESP_STARTUP_UPDATE_CHECK_DELAY_SEC", arm_default=20.0, other_default=5.0
|
||||
)
|
||||
|
||||
def _run() -> None:
|
||||
sec = max(0.0, float(delay_sec or 0))
|
||||
if sec > 0:
|
||||
log.info("Проверка обновлений: старт через %.1f с", sec)
|
||||
time.sleep(sec)
|
||||
try:
|
||||
from update import init_auto_updater
|
||||
|
||||
init_auto_updater()
|
||||
except Exception:
|
||||
log.exception("Не удалось инициализировать проверку обновлений")
|
||||
|
||||
threading.Thread(target=_run, daemon=True, name="wesp-update-check-defer").start()
|
||||
|
||||
|
||||
def reload_update_checker() -> None:
|
||||
"""Перечитать настройки из recipes.db без перезапуска процесса."""
|
||||
try:
|
||||
from update import init_auto_updater
|
||||
|
||||
init_auto_updater(reload=True)
|
||||
except Exception:
|
||||
log.exception("Не удалось перезагрузить проверку обновлений")
|
||||
|
||||
|
||||
def stop_update_checker() -> None:
|
||||
try:
|
||||
from update import stop_auto_updater
|
||||
|
||||
stop_auto_updater()
|
||||
except Exception:
|
||||
log.debug("stop_update_checker: ошибка остановки", exc_info=True)
|
||||
|
||||
|
||||
def register_update_checker_shutdown() -> None:
|
||||
atexit.register(stop_update_checker)
|
||||
Reference in New Issue
Block a user