From 358fca700c796a670dde95c30a5e1fe1ae6e0e71 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 11 Aug 2026 16:30:09 +0800 Subject: [PATCH] fix: monkey-patch DictObject.__getattr__ for get_module_dbname on all instances --- app/pccs.py | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/app/pccs.py b/app/pccs.py index ebbab0f..0010f40 100644 --- a/app/pccs.py +++ b/app/pccs.py @@ -5,32 +5,27 @@ pccs — 算力中心集群系统 (Pooled Computing Cluster System) import os, sys from ahserver.webapp import webapp -from ahserver.serverenv import ServerEnv - -from appbase.init import load_appbase -from rbac.init import load_rbac - -WORKDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - -def get_module_dbname(m): - return 'pccs' - - -def password_encode(s): - if s is None: - return '' - from ahserver.globalEnv import password_encode as _orig - return _orig(s) def init(): - env = ServerEnv() - env.get_module_dbname = get_module_dbname - env.password_encode = password_encode - # monkey-patch ServerEnv class so ALL instances get these methods - ServerEnv.get_module_dbname = staticmethod(get_module_dbname) - ServerEnv.password_encode = staticmethod(password_encode) + # 注入全局默认 module_dbname — ServerEnv DictObject 每个实例不同, + # 必须通过 monkey-patching DictObject.__getattr__ 来让所有实例有默认值 + from ahserver.serverenv import ServerEnv + 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 + + from appbase.init import load_appbase + from rbac.init import load_rbac load_appbase() load_rbac()