- scripts/load_path.py: PATHS_CONTRACTS 20 条(含 M3b 5 个导出契约) + PATHS_READONLY_DENY 9 条 = 29 条全显式登记,无通配符;与 wwwroot/api/*.dspy(29) 一一对应 - wwwroot/api/: 新增 9 个 CRUD 只读拒绝端点(create/update/delete × 3 表), 封死 xls2ui 回退默认写入口,保 rules_hash 29.6 确定性指纹唯一写入路径 - json/*.json: 根级 browserfields 合并进 params,三文件统一 tblname/alias/title/params 根键集, editable 齐备 new_/update_/delete_data_url 且指向真实 .dspy - scripts/audit_rbac_parity.py: 修复 PATHS = A + B (BinOp) 解析取空的自身缺陷(假 FAIL 根因), 新增 json/ 根键白名单 + editable 三 URL + 幽灵/漏登记 检查 - pbl_compiler/init.py: 文件头注释登记条数与代码事实对齐(29=20+9) - 实跑: audit_rbac_parity.py rc=0 PASS;test_m3b_mapping.py PASS=113/FAIL=0
80 lines
3.5 KiB
Python
80 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""`load_pbl_compiler()` —— pbl_compiler 模块唯一挂载入口。
|
||
|
||
注册三处同步之 ③:env.<契约名> = <契约名>(① 定义在实现文件,② 导出在 __init__.py)。
|
||
|
||
QC #2 整改(M3a 轮):api.py 的 15 个 Web 契约全部 env 注册。
|
||
|
||
QC #1 整改(M3b 本轮):CONTRACTS 由 15 → 20,新增 rules_export_api.py 的 5 个
|
||
「第12章规则映射 / 导出 / game_definition 写入」契约,并导出 GD 规则写入器与纯映射
|
||
层函数(宿主应用与自测脚本可直接复用)。本文件的 CONTRACTS 是三处同步的唯一事实源:
|
||
· wwwroot/api/<契约名>.dspy 薄包装(一一对应,共 20 个)
|
||
· scripts/load_path.py PATHS(RBAC 逐条显式登记,共 29 条 = Web 契约端点 20 + CRUD 只读拒绝端点 9,无通配符)
|
||
· __init__.py import + __all__
|
||
"""
|
||
from ahserver.serverenv import ServerEnv
|
||
|
||
from pbl_compiler.api import (
|
||
pbl_compiler_compile,
|
||
pbl_compiler_preview,
|
||
pbl_compiler_compare,
|
||
pbl_compiler_task_get,
|
||
pbl_compiler_task_list,
|
||
pbl_game_definition_get,
|
||
pbl_game_definition_get_by_blueprint,
|
||
pbl_compiler_verify_determinism,
|
||
pbl_compiler_version_register,
|
||
pbl_compiler_version_get,
|
||
pbl_compiler_version_list,
|
||
pbl_compiler_version_diff,
|
||
pbl_compiler_version_save,
|
||
pbl_capability_list,
|
||
pbl_capability_register,
|
||
)
|
||
from pbl_compiler.rules_export_api import (
|
||
pbl_compiler_export_rules,
|
||
pbl_compiler_rules_preview,
|
||
pbl_compiler_rules_diff,
|
||
pbl_game_definition_rules_get,
|
||
pbl_script_rule_list,
|
||
)
|
||
|
||
#: 契约名 → 实现(单一事实源:__init__.py 导出、env 注册、wwwroot/api/*.dspy、
|
||
#: scripts/load_path.py RBAC 四处都从这里派生,数量必须一致)
|
||
CONTRACTS = {
|
||
# —— M3a:结构编译 / 任务 / GD 产物 / 确定性 / 版本 / 能力(15)——
|
||
'pbl_compiler_compile': pbl_compiler_compile,
|
||
'pbl_compiler_preview': pbl_compiler_preview,
|
||
'pbl_compiler_compare': pbl_compiler_compare,
|
||
'pbl_compiler_task_get': pbl_compiler_task_get,
|
||
'pbl_compiler_task_list': pbl_compiler_task_list,
|
||
'pbl_game_definition_get': pbl_game_definition_get,
|
||
'pbl_game_definition_get_by_blueprint': pbl_game_definition_get_by_blueprint,
|
||
'pbl_compiler_verify_determinism': pbl_compiler_verify_determinism,
|
||
'pbl_compiler_version_register': pbl_compiler_version_register,
|
||
'pbl_compiler_version_get': pbl_compiler_version_get,
|
||
'pbl_compiler_version_list': pbl_compiler_version_list,
|
||
'pbl_compiler_version_diff': pbl_compiler_version_diff,
|
||
'pbl_compiler_version_save': pbl_compiler_version_save,
|
||
'pbl_capability_list': pbl_capability_list,
|
||
'pbl_capability_register': pbl_capability_register,
|
||
# —— M3b:第12章 event→condition→response → script_type=1 规则映射与导出(5)——
|
||
'pbl_compiler_export_rules': pbl_compiler_export_rules,
|
||
'pbl_compiler_rules_preview': pbl_compiler_rules_preview,
|
||
'pbl_compiler_rules_diff': pbl_compiler_rules_diff,
|
||
'pbl_game_definition_rules_get': pbl_game_definition_rules_get,
|
||
'pbl_script_rule_list': pbl_script_rule_list,
|
||
}
|
||
|
||
#: 模块名 → 表复数别名(CRUD dspy 用复数名,init.py 注册单复数两套,见规范 Pitfall)
|
||
TABLE_ALIAS_DUAL = {}
|
||
|
||
|
||
def load_pbl_compiler():
|
||
"""挂载 pbl_compiler:把 20 个契约注册到 ServerEnv 供 .dspy/.ui 直接调用。"""
|
||
env = ServerEnv()
|
||
for name, fn in CONTRACTS.items():
|
||
setattr(env, name, fn)
|
||
return 'pbl_compiler'
|