diff --git a/nonebot_plugin_tetris_stats/config/config.py b/nonebot_plugin_tetris_stats/config/config.py index 3bb74cb..5186acc 100644 --- a/nonebot_plugin_tetris_stats/config/config.py +++ b/nonebot_plugin_tetris_stats/config/config.py @@ -1,3 +1,5 @@ +from pathlib import Path + from nonebot import get_driver, get_plugin_config from nonebot_plugin_localstore import get_plugin_cache_dir, get_plugin_data_dir from pydantic import BaseModel, Field @@ -14,11 +16,17 @@ class Proxy(BaseModel): top: str | None = None +class Dev(BaseModel): + enabled: bool = False + template_path: Path | None = None + enable_template_check: bool = True + + class ScopedConfig(BaseModel): request_timeout: float = 30.0 screenshot_quality: float = 2 proxy: Proxy = Field(default_factory=Proxy) - development: bool = False + dev: Dev = Field(default_factory=Dev) class Config(BaseModel): diff --git a/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py b/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py index 7af74a6..1e50665 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py @@ -137,7 +137,7 @@ async def get_tetra_league_data() -> None: await session.commit() -if not config.tetris.development: +if not config.tetris.dev.enabled: @driver.on_startup async def _() -> None: diff --git a/nonebot_plugin_tetris_stats/utils/browser.py b/nonebot_plugin_tetris_stats/utils/browser.py index 9891577..9053180 100644 --- a/nonebot_plugin_tetris_stats/utils/browser.py +++ b/nonebot_plugin_tetris_stats/utils/browser.py @@ -78,7 +78,7 @@ class BrowserManager: """启动浏览器实例""" playwright = await async_playwright().start() cls._browser = await playwright.firefox.launch( - headless=not config.tetris.development, + headless=not config.tetris.dev.enabled, firefox_user_prefs={ 'network.http.max-persistent-connections-per-server': 64, }, diff --git a/nonebot_plugin_tetris_stats/utils/host.py b/nonebot_plugin_tetris_stats/utils/host.py index 150d968..60bba97 100644 --- a/nonebot_plugin_tetris_stats/utils/host.py +++ b/nonebot_plugin_tetris_stats/utils/host.py @@ -45,7 +45,7 @@ class HostPage: async def __aenter__(self) -> str: return self.page_hash - if not config.tetris.development: + if not config.tetris.dev.enabled: async def __aexit__(self, exc_type, exc, tb) -> None: # noqa: ANN001 self.pages.pop(self.page_hash, None) diff --git a/nonebot_plugin_tetris_stats/utils/templates.py b/nonebot_plugin_tetris_stats/utils/templates.py index dc5d827..c2610a5 100644 --- a/nonebot_plugin_tetris_stats/utils/templates.py +++ b/nonebot_plugin_tetris_stats/utils/templates.py @@ -17,7 +17,8 @@ from ..config.config import CACHE_PATH, DATA_PATH, config driver = get_driver() -TEMPLATES_DIR = DATA_PATH / 'templates' +TEMPLATES_DIR = config.tetris.dev.template_path or DATA_PATH / 'templates' + alc = on_alconna(Alconna('更新模板', Option('--revision', Args['revision', str], alias={'-R'})), permission=SUPERUSER) @@ -111,16 +112,6 @@ async def check_tag(tag: str) -> bool: ).status_code != HTTPStatus.NOT_FOUND -@driver.on_startup -async def _(): - if (path := (TEMPLATES_DIR / 'hash.sha256')).is_file() and await check_hash(path): - logger.success('模板验证成功') - return - if not await init_templates('latest'): - msg = '模板初始化失败' - raise RuntimeError(msg) - - @alc.handle() async def _(revision: str | None = None): if revision is not None and not await check_tag(revision): @@ -129,3 +120,17 @@ async def _(revision: str | None = None): if await init_templates(revision or 'latest'): await alc.finish('更新模板成功') await alc.finish('更新模板失败') + + +if config.tetris.dev.enable_template_check: + # !https://github.com/python/mypy/issues/19516 + # 只能放def后面了( + + @driver.on_startup + async def _(): + if (path := (TEMPLATES_DIR / 'hash.sha256')).is_file() and await check_hash(path): + logger.success('模板验证成功') + return + if not await init_templates('latest'): + msg = '模板初始化失败' + raise RuntimeError(msg)