2026-08-10 10:16:25 +08:00
|
|
|
|
"""Example 插件全局运行时状态 — 统一容器
|
|
|
|
|
|
|
|
|
|
|
|
约定:
|
|
|
|
|
|
- 模块只做"声明默认值",不产生任何导入期副作用
|
|
|
|
|
|
- 所有值统一在 create_workers 中通过 set_global_var 显式写入
|
|
|
|
|
|
- set_global_var 仅允许写入 _ALLOWED 白名单,拼写错误会立即抛错
|
|
|
|
|
|
- require() 用于取"必须已初始化"的值,未初始化时抛清晰错误
|
|
|
|
|
|
"""
|
2026-07-23 17:45:44 +08:00
|
|
|
|
from typing import Any
|
2026-08-10 10:16:25 +08:00
|
|
|
|
|
2026-07-23 17:45:44 +08:00
|
|
|
|
from chongming_database import Database
|
|
|
|
|
|
|
2026-08-10 10:16:25 +08:00
|
|
|
|
# 允许写入的全局变量白名单(防止拼写错误静默创建无用的新变量)
|
|
|
|
|
|
_ALLOWED = frozenset({"db"})
|
2026-07-23 17:45:44 +08:00
|
|
|
|
|
2026-08-10 10:16:25 +08:00
|
|
|
|
# 显式声明所有运行时状态(默认 None,运行时由 create_workers 写入)
|
2026-07-23 17:45:44 +08:00
|
|
|
|
db: Database | None = None
|
2026-07-21 15:43:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_global_var(name: str, value: Any) -> None:
|
|
|
|
|
|
"""
|
2026-08-10 10:16:25 +08:00
|
|
|
|
白名单校验版 setter — 设置模块级运行时状态。
|
|
|
|
|
|
|
|
|
|
|
|
拼错变量名会立即抛 KeyError,而不是静默创建一个无用的新变量。
|
|
|
|
|
|
|
2026-07-21 15:43:39 +08:00
|
|
|
|
Args:
|
2026-08-10 10:16:25 +08:00
|
|
|
|
name: 必须在 _ALLOWED 白名单中的变量名
|
2026-07-21 15:43:39 +08:00
|
|
|
|
value: 任意值
|
|
|
|
|
|
"""
|
2026-08-10 10:16:25 +08:00
|
|
|
|
if name not in _ALLOWED:
|
|
|
|
|
|
raise KeyError(
|
|
|
|
|
|
f"global_var: 未知变量 '{name}'(允许: {sorted(_ALLOWED)})"
|
|
|
|
|
|
)
|
2026-07-21 15:43:39 +08:00
|
|
|
|
globals()[name] = value
|
|
|
|
|
|
|
2026-08-10 10:16:25 +08:00
|
|
|
|
|
|
|
|
|
|
def require(name: str) -> Any:
|
|
|
|
|
|
"""
|
|
|
|
|
|
获取必须已初始化的全局变量,未初始化时抛清晰错误。
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
name: 必须在 _ALLOWED 白名单中的变量名
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
对应全局变量的值
|
|
|
|
|
|
"""
|
|
|
|
|
|
if name not in _ALLOWED:
|
|
|
|
|
|
raise KeyError(f"global_var: 未知变量 '{name}'(允许: {sorted(_ALLOWED)})")
|
|
|
|
|
|
value = globals().get(name)
|
|
|
|
|
|
if value is None:
|
|
|
|
|
|
raise RuntimeError(
|
|
|
|
|
|
f"global_var: '{name}' 未初始化 —— 请确认插件 create_workers 已执行且配置正确"
|
|
|
|
|
|
)
|
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
__all__ = sorted(_ALLOWED) + ["set_global_var", "require"]
|