25 lines
642 B
Python
25 lines
642 B
Python
"""加载并校验 rules.yaml。"""
|
|
|
|
from __future__ import annotations
|
|
from functools import lru_cache
|
|
from pathlib import Path
|
|
import yaml
|
|
|
|
from fastapi_modules.fastapi_leaudit.govdoc_engine.dsl.schema import RuleSet
|
|
|
|
|
|
def _load_uncached(path: Path) -> RuleSet:
|
|
with open(path, encoding="utf-8") as f:
|
|
data = yaml.safe_load(f)
|
|
return RuleSet.model_validate(data)
|
|
|
|
|
|
@lru_cache(maxsize=32)
|
|
def _load_cached(path_str: str, mtime: float) -> RuleSet:
|
|
return _load_uncached(Path(path_str))
|
|
|
|
|
|
def load_rules(path: str | Path) -> RuleSet:
|
|
path = Path(path)
|
|
return _load_cached(str(path.resolve()), path.stat().st_mtime)
|