76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
# -*- 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())
|