""" pccs — 算力中心集群系统 (Pooled Computing Cluster System) 入口: webapp(init) 模式 """ import os, sys from contextlib import asynccontextmanager # ═══ 最早导入并 patch sqlor, 确保所有后续 import 拿到 patched 版本 ═══ import sqlor.dbpools as _dbp from appPublic.jsonConfig import getConfig as _getConfig from appPublic.dictObject import DictObject _workdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) _config = _getConfig(_workdir, NS={'workdir': _workdir}) _global_db = _dbp.DBPools(_config.databases) _orig_sor_ctx = _dbp.get_sor_context @asynccontextmanager async def _patched_sor_ctx(env, modulename, errorback=None): dbname = env.get_module_dbname(modulename) async with _global_db.sqlorContext(dbname) as sor: yield sor _dbp.get_sor_context = _patched_sor_ctx # DictObject patch — 所有 ServerEnv 默认 get_module_dbname _orig_getattr = DictObject.__getattr__ def _patched_getattr(self, key): if key == 'get_module_dbname': return lambda m: 'pccs' return _orig_getattr(self, key) DictObject.__getattr__ = _patched_getattr # 同时设置 dict 值 from ahserver.serverenv import set_serverenv set_serverenv('get_module_dbname', lambda m: 'pccs') # ═══ 导入 ahserver 后, 修正 globalEnv 中缓存的 get_sor_context ═══ from ahserver.webapp import webapp from ahserver.globalEnv import GlobalEnv GlobalEnv().get_sor_context = _patched_sor_ctx def init(): from appbase.init import load_appbase from rbac.init import load_rbac load_appbase() load_rbac() # 修正用户权限模块中的缓存引用 import rbac.userperm as _up _up.get_sor_context = _patched_sor_ctx if __name__ == '__main__': webapp(init)