pccs/app/pccs.py

55 lines
1.3 KiB
Python

"""
pccs — 算力中心集群系统 (Pooled Computing Cluster System)
入口: webapp(init) 模式
"""
import os, sys
# ═══ 最早导入并 patch sqlor, 确保所有后续 import 拿到 patched 版本 ═══
import sqlor.dbpools as _dbp
from appPublic.jsonConfig import getConfig as _getConfig
_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
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 =════
from appPublic.dictObject import DictObject
_orig_getattr = DictObject.__getattr__
def _patched_getattr(self, key):
if key == 'get_module_dbname':
return lambda m: 'pccs'
if key == 'password_encode':
return lambda s: s
return _orig_getattr(self, key)
DictObject.__getattr__ = _patched_getattr
# ═══ 现在才 import 其他模块 ═══
from ahserver.webapp import webapp
def init():
from appbase.init import load_appbase
from rbac.init import load_rbac
load_appbase()
load_rbac()
if __name__ == '__main__':
webapp(init)