scrub_rules.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. # -*- coding: utf-8 -*-
  2. """对外脱敏规则入口 —— sim_sys_server.py 的唯一依赖 (scrub / residual)。
  3. ★ 使用者侧恢复 (2026-09-11), 原因:
  4. v0.2.0 包里**缺这个文件**。release/sim_sys_server.py 第 36 行
  5. `from scrub_rules import scrub, residual` 因此 ModuleNotFoundError,
  6. /sim/sys/ 分系统合页直接 502 (证据: logs/sim_sys.log 的 traceback,
  7. check/serve 里该模块 [DOWN])。
  8. 这里**不新写、也不复制任何脱敏规则**, 只把包内唯一那份规则表
  9. src/windscada/deid_public.py 转出来 —— 它就是全项目实际在用的那一份
  10. (windscada_serve.py 的 scrub_or_die、上云件、云端问答都走它)。
  11. 这样同时也满足 sim_sys_server.py 的要求:
  12. "规则表唯一正本…禁止在此另抄一份" —— 规则仍然只有一处。
  13. 若日后拿到交付方的原版 release/scrub_rules.py, 直接覆盖本文件即可。
  14. """
  15. import pathlib
  16. import sys
  17. ROOT = pathlib.Path(__file__).resolve().parent.parent # release/ -> 项目根
  18. if str(ROOT) not in sys.path:
  19. sys.path.insert(0, str(ROOT))
  20. from src.windscada.deid_public import audit, scrub, scrub_or_die # noqa: E402
  21. def residual(text):
  22. """回扫脱敏后的文本 → [(类别, 命中次数, 样例)]; 空列表 = 干净。
  23. 对应 deid_public.audit: "过了脱敏"只能由回扫结果说, 不能由"我替换过了"说。
  24. """
  25. return audit(text)
  26. __all__ = ['scrub', 'residual', 'scrub_or_die']