Files
site/WESP_REL/app/services/auto_update_runtime.py
T
2026-07-17 12:57:18 +03:00

76 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Запуск фоновой проверки обновлений (без автоустановки) при старте процесса."""
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)