65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
"""
|
|
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)
|