fix: SMSEngine 缺百度短信环境变量不抛异常(延迟检查),避免 load_smssend 中断致 sms_engine 未注册 NameError

This commit is contained in:
yumoqing 2026-08-17 14:08:38 +08:00
parent 387daacfd5
commit 2503203f6d

View File

@ -78,18 +78,19 @@ class SMSEngine:
self.access_key_secret = os.getenv('BAIDU_SMS_ACCESS_KEY_SECRET')
self.host = os.getenv('BAIDU_SMS_HOST')
self.signature_id = os.getenv('BAIDU_SMS_SIGNATURE_ID')
# 检查必需的环境变量是否都已设置,若缺失则抛出异常
required_vars = [self.access_key, self.access_key_secret, self.host, self.signature_id]
if not all(required_vars):
missing = [name for name, val in zip(
['BAIDU_SMS_ACCESS_KEY', 'BAIDU_SMS_ACCESS_KEY_SECRET', 'BAIDU_SMS_HOST', 'BAIDU_SMS_SIGNATURE_ID'],
required_vars) if val is None]
raise EnvironmentError(f"Missing required environment variables: {', '.join(missing)}")
self.sms_client = self.create_client()
self.sms_client = None
self.sms_types = {}
# 缺环境变量不抛异常(否则 load_smssend 中断 → sms_engine 未注册 → dspy 里 NameError
# 延迟到真正发送时检查,返回明确错误。
missing = [name for name, val in zip(
['BAIDU_SMS_ACCESS_KEY', 'BAIDU_SMS_ACCESS_KEY_SECRET', 'BAIDU_SMS_HOST', 'BAIDU_SMS_SIGNATURE_ID'],
[self.access_key, self.access_key_secret, self.host, self.signature_id]) if not val]
if missing:
error(f'百度短信未配置,缺少环境变量: {", ".join(missing)}(发送短信时会返回错误)')
return
self.sms_client = self.create_client()
def create_client(self):
baiDuSmsConfig = BceClientConfiguration(
credentials=BceCredentials(self.access_key, self.access_key_secret),
@ -98,6 +99,8 @@ class SMSEngine:
return sms.SmsClient(baiDuSmsConfig)
async def send(self, stype, template_id, phone, params) -> dict:
if self.sms_client is None:
return {'status': False, 'msg': '百度短信未配置,请设置 BAIDU_SMS_ACCESS_KEY 等环境变量'}
try:
f = partial(self.sms_client.send_message, signature_id=self.signature_id,
template_id=template_id,