P1 通用查询:auth/managers.py 新增 20 个查询方法(Role/Company/Department/Position/Menu/Tenant 六个 Manager);auth/ram.py 新增 RAMManager.ListPolicyResourceUUIDs;stats/manager.py 新增 StatsManager.ListAutoResetConfigs。 P2 App 体系:models.py 新增 App/TenantApp/CompanyApp/UserApp/AppConfig 五个 managed=False 镜像模型,字段与业务侧逐一对齐。 P3 工具下沉:新增 config.py 配置注入层与 money/json_encoder/celery_utils/exception_handler/redis_lock/ip_filter/storage/datetime_utils/string_utils 九个工具模块;model_utils.UUIDObj 增加 PascalCase 别名 Str/Bytes/UUID 与模块级转换函数。 同时移除 commission/stats/CashBook 镜像模型的重复索引声明,消除 Django models.E030。
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
"""模块:SDK 通用配置读取(可注入提供者)
|
||
|
||
SDK 内不得反向依赖业务层(gvsds.app_config),故提供配置读取钩子:
|
||
- 业务侧启动时调用 SetConfigProvider(gvsds.app_config.get, gvsds.app_config.getlist) 注入;
|
||
- 未注入时回退到环境变量 ``{SECTION}_{KEY}``(大写),与 gvsds.secrets 约定一致。
|
||
|
||
用法(业务侧 shim):
|
||
from gvsdsdk.config import SetConfigProvider
|
||
from gvsds.app_config import get, getlist
|
||
SetConfigProvider(get, getlist)
|
||
"""
|
||
import os
|
||
|
||
_ConfigGet = None
|
||
_ConfigGetList = None
|
||
|
||
|
||
def SetConfigProvider(Get, GetList):
|
||
"""注入配置读取器(Get(section,key,fallback) / GetList(section,key,fallback,separator))"""
|
||
global _ConfigGet, _ConfigGetList
|
||
_ConfigGet = Get
|
||
_ConfigGetList = GetList
|
||
|
||
|
||
def Get(section, key, fallback=None):
|
||
"""读取单项配置:优先注入的提供者,其次环境变量"""
|
||
if _ConfigGet is not None:
|
||
return _ConfigGet(section, key, fallback=fallback)
|
||
return os.environ.get(f'{section.upper()}_{key.upper()}', fallback)
|
||
|
||
|
||
def GetList(section, key, fallback=None, separator=','):
|
||
"""读取列表配置:优先注入的提供者,其次环境变量(分隔符切分)"""
|
||
if _ConfigGetList is not None:
|
||
return _ConfigGetList(section, key, fallback=fallback, separator=separator)
|
||
raw = os.environ.get(f'{section.upper()}_{key.upper()}')
|
||
if raw is None:
|
||
return fallback if fallback is not None else []
|
||
return [item.strip() for item in raw.split(separator) if item.strip()]
|