pbls/app/pbls.py

148 lines
5.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
pbls 应用唯一入口PBL Agent OS Phase 0/1
约定web-application-spec
- 一个应用 = 一个入口 = 一个端口(本项目 9300与 conf/config.json、
projects/pbls/env/{test,prod}.json 三方同值)
- init() 内 ServerEnv() 先于 load_rbac(),再逐个显式 load_XXX()
- 模块取库名一律走 ServerEnv().get_module_dbname('模块名'),禁止硬编码 DBNAME
- 挂载顺序以 projects/pbls/pbls_spec.json 的 load_order 为准23 个模块)
- HTTP 服务只由 ahserver 提供,不引入任何第三方 Web 框架或自建路由/序列化装饰器
"""
import os
import sys
from ahserver.webapp import webapp
from ahserver.serverenv import ServerEnv
# ---- 基础层(已存在,直接复用,不重复开发)----
from appbase.init import load_appbase
from rbac.init import load_rbac
from pybricks.init import load_pybricks
# ---- PBL 公共内核(必须最先挂载,其余 pbl_* 模块依赖它)----
from pbl_common.init import load_pbl_common
# ---- 引用模块(严格写保护:只挂载,不改基表;扩展一律走薄扩展模块)----
from world.init import load_world
from scene.init import load_scene
from entity.init import load_entity
from scense.init import load_scense
from scense_runtime.init import load_scense_runtime
from script_engine.init import load_script_engine
from kdb.init import load_kdb
from world_snapshot.init import load_world_snapshot
# ---- PBL 业务模块M1~M15----
from pbl_appcodes.init import load_pbl_appcodes
from pbl_blueprint.init import load_pbl_blueprint
from pbl_validation.init import load_pbl_validation
from pbl_compiler.init import load_pbl_compiler
from pbl_agent_runtime.init import load_pbl_agent_runtime
from pbl_evidence.init import load_pbl_evidence
from pbl_assessment.init import load_pbl_assessment
from pbl_kdb_ext.init import load_pbl_kdb_ext
from pbl_domain_ext.init import load_pbl_domain_ext
from pbl_scense_ext.init import load_pbl_scense_ext
from pbl_runtime_ext.init import load_pbl_runtime_ext
from pbl_template.init import load_pbl_template
from pbl_analytics.init import load_pbl_analytics
from pbl_governance.init import load_pbl_governance
# 主库名(可被环境变量覆盖,默认 pbls
DBNAME = os.environ.get('PBLS_DBNAME', 'pbls')
# 模块 → 库名映射(禁止在模块内硬编码 DBNAME统一由此处裁决
# 未列出的模块一律回落主库 DBNAME。
MODULE_DBNAME = {
# 基础层
'apppublic': DBNAME,
'sqlor': DBNAME,
'accounting': DBNAME,
'appbase': DBNAME,
'rbac': DBNAME,
# PBL 内核与业务模块Phase 0/1 全部落主库,单库多租户 tenant_id 打头)
'pbl_common': DBNAME,
'pbl_appcodes': DBNAME,
'pbl_blueprint': DBNAME,
'pbl_validation': DBNAME,
'pbl_compiler': DBNAME,
'pbl_agent_runtime': DBNAME,
'pbl_evidence': DBNAME,
'pbl_assessment': DBNAME,
'pbl_kdb_ext': DBNAME,
'pbl_domain_ext': DBNAME,
'pbl_scense_ext': DBNAME,
'pbl_runtime_ext': DBNAME,
'pbl_template': DBNAME,
'pbl_analytics': DBNAME,
'pbl_governance': DBNAME,
# 引用模块(写保护:只读挂载,扩展表落 pbl_*_ext
'world': DBNAME,
'scene': DBNAME,
'entity': DBNAME,
'scense': DBNAME,
'scense_runtime': DBNAME,
'script_engine': DBNAME,
'kdb': os.environ.get('PBLS_KDB_DBNAME', DBNAME),
'world_snapshot': DBNAME,
}
def get_module_dbname(module_name):
"""模块 → 库名映射(挂到 ServerEnv供各模块 ServerEnv().get_module_dbname(x) 调用)"""
return MODULE_DBNAME.get(module_name, DBNAME)
def init():
"""应用初始化:显式按 load_order 逐个挂载 23 个模块"""
env = ServerEnv()
# 注入库名裁决函数(必须先于任何 load_*,模块建表/取连接都依赖它)
env.get_module_dbname = get_module_dbname
env.app_name = 'pbls'
# ---- 基础层ServerEnv() 之后、load_rbac 之前的固定次序)----
load_appbase(env)
load_rbac(env)
load_pybricks(env)
# ---- PBL 公共内核(其余 pbl_* 的依赖底座)----
load_pbl_common(env)
# ---- 引用模块(写保护,仅挂载复用)----
load_world(env)
load_scene(env)
load_entity(env)
load_scense(env)
load_scense_runtime(env)
load_script_engine(env)
load_kdb(env)
load_world_snapshot(env)
# ---- PBL 业务模块(枚举注入 → 蓝图 → 校验 → 编译 → Agent 运行时 → 证据 → 评估
# → 四个薄扩展 → 模板/分析/治理)----
load_pbl_appcodes(env)
load_pbl_blueprint(env)
load_pbl_validation(env)
load_pbl_compiler(env)
load_pbl_agent_runtime(env)
load_pbl_evidence(env)
load_pbl_assessment(env)
load_pbl_kdb_ext(env)
load_pbl_domain_ext(env)
load_pbl_scense_ext(env)
load_pbl_runtime_ext(env)
load_pbl_template(env)
load_pbl_analytics(env)
load_pbl_governance(env)
return env
if __name__ == '__main__':
sys.exit(0)
webapp(init)