Files
yidaima_tools/utils/config.py

42 lines
1.3 KiB
Python
Raw Permalink Normal View History

2026-04-09 14:55:54 +08:00
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
from typing import Any, Optional
import yaml
@dataclass(frozen=True)
class AppConfig:
umi_ocr_url: str
prefer_mss: bool = True
default_region: Optional[tuple[int, int, int, int]] = None # left, top, width, height
click_pause: float = 0.05
def load_config(path: str | Path) -> AppConfig:
p = Path(path)
data: dict[str, Any] = yaml.safe_load(p.read_text(encoding="utf-8")) or {}
umi_ocr = data.get("umi_ocr", {}) or {}
screenshot = data.get("screenshot", {}) or {}
click = data.get("click", {}) or {}
region = screenshot.get("default_region")
default_region: Optional[tuple[int, int, int, int]]
if region is None:
default_region = None
else:
if not (isinstance(region, (list, tuple)) and len(region) == 4):
raise ValueError("config.yaml screenshot.default_region 必须是 null 或 [left, top, width, height]")
default_region = (int(region[0]), int(region[1]), int(region[2]), int(region[3]))
return AppConfig(
umi_ocr_url=str(umi_ocr.get("url", "http://127.0.0.1:1224/api/ocr")),
prefer_mss=bool(screenshot.get("prefer_mss", True)),
default_region=default_region,
click_pause=float(click.get("pause", 0.05)),
)