# -*- coding: utf-8 -*- """pbl_validation 模块路径注册(scripts/load_path.py)。 作用:把模块包目录加入 sys.path,并声明契约接口路径,供应用启动器 (app/pbls.py init())与部署脚本按统一约定发现模块。 用法: python3 scripts/load_path.py # 打印模块路径与契约清单 from scripts.load_path import load_path; load_path() """ from __future__ import annotations import json import os import sys MODULE_NAME = "pbl_validation" # 模块根目录(scripts/ 的上一级) MODULE_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 契约接口路径(5 个,与 api.API_REGISTRY 一一对应) API_PATHS = [ "/pbl_validation/api/pbl_validation_run.dspy", "/pbl_validation/api/pbl_validation_get.dspy", "/pbl_validation/api/pbl_validation_list.dspy", "/pbl_validation/api/pbl_validation_rule_list.dspy", "/pbl_validation/api/pbl_validation_rule_save.dspy", ] # 数据表(2 张) TABLES = ["pbl_validation_rule", "pbl_validation_result"] # 挂载入口 LOAD_FUNC = "pbl_validation.init.load_pbl_validation" def load_path(verbose: bool = False) -> str: """把模块根目录加入 sys.path(幂等),返回模块根目录。""" if MODULE_ROOT not in sys.path: sys.path.insert(0, MODULE_ROOT) if verbose: print("[%s] sys.path += %s" % (MODULE_NAME, MODULE_ROOT)) return MODULE_ROOT def manifest() -> dict: """模块自描述清单(路径 / 契约 / 表 / 挂载入口)。""" return { "module": MODULE_NAME, "root": MODULE_ROOT, "package_dir": os.path.join(MODULE_ROOT, MODULE_NAME), "load_func": LOAD_FUNC, "api_paths": list(API_PATHS), "tables": list(TABLES), "sql": os.path.join(MODULE_ROOT, "sql", "pbl_validation.sql"), "tests": os.path.join(MODULE_ROOT, "tests", "test_validation_engine.py"), } def main() -> int: load_path(verbose=True) info = manifest() print(json.dumps(info, ensure_ascii=False, indent=2)) try: from pbl_validation.init import module_manifest # noqa: WPS433 print(json.dumps(module_manifest(), ensure_ascii=False, indent=2)) except Exception as exc: # 平台依赖缺失时只报路径信息,不失败 print("[WARN] module_manifest 不可用:%s" % exc) return 0 if __name__ == "__main__": sys.exit(main())