fix RetryException

This commit is contained in:
jxxghp
2025-08-02 11:32:42 +08:00
parent 418e6bd085
commit 0fb7a73fc9
2 changed files with 29 additions and 26 deletions
+7 -3
View File
@@ -20,6 +20,10 @@ from app.utils.http import RequestUtils
from app.utils.string import StringUtils from app.utils.string import StringUtils
class RetryException(Exception):
pass
class Telegram: class Telegram:
_ds_url = f"http://127.0.0.1:{settings.PORT}/api/v1/message?token={settings.API_TOKEN}" _ds_url = f"http://127.0.0.1:{settings.PORT}/api/v1/message?token={settings.API_TOKEN}"
_event = Event() _event = Event()
@@ -516,7 +520,7 @@ class Telegram:
logger.error(f"编辑消息失败:{str(e)}") logger.error(f"编辑消息失败:{str(e)}")
return False return False
@retry(Exception, logger=logger) @retry(RetryException, logger=logger)
def __send_request(self, userid: Optional[str] = None, image="", caption="", def __send_request(self, userid: Optional[str] = None, image="", caption="",
reply_markup: Optional[InlineKeyboardMarkup] = None) -> bool: reply_markup: Optional[InlineKeyboardMarkup] = None) -> bool:
""" """
@@ -541,7 +545,7 @@ class Telegram:
parse_mode="Markdown", parse_mode="Markdown",
reply_markup=reply_markup) reply_markup=reply_markup)
if ret is None: if ret is None:
raise Exception("发送图片消息失败") raise RetryException("发送图片消息失败")
return True return True
# 按4096分段循环发送消息 # 按4096分段循环发送消息
ret = None ret = None
@@ -557,7 +561,7 @@ class Telegram:
parse_mode="Markdown", parse_mode="Markdown",
reply_markup=reply_markup) reply_markup=reply_markup)
if ret is None: if ret is None:
raise Exception("发送文本消息失败") raise RetryException("发送文本消息失败")
return True if ret else False return True if ret else False
def register_commands(self, commands: Dict[str, dict]): def register_commands(self, commands: Dict[str, dict]):
+22 -23
View File
@@ -15,6 +15,10 @@ from app.utils.url import UrlUtils
lock = threading.Lock() lock = threading.Lock()
class RetryException(Exception):
pass
class WeChat: class WeChat:
# 企业微信Token # 企业微信Token
_access_token = None _access_token = None
@@ -68,7 +72,7 @@ class WeChat:
""" """
return True if self.__get_access_token() else False return True if self.__get_access_token() else False
@retry(Exception, logger=logger) @retry(RetryException, logger=logger)
def __get_access_token(self, force=False): def __get_access_token(self, force=False):
""" """
获取微信Token 获取微信Token
@@ -84,23 +88,19 @@ class WeChat:
if not token_flag or force: if not token_flag or force:
if not self._corpid or not self._appsecret: if not self._corpid or not self._appsecret:
return None return None
try: token_url = self._token_url.format(corpid=self._corpid, corpsecret=self._appsecret)
token_url = self._token_url.format(corpid=self._corpid, corpsecret=self._appsecret) res = RequestUtils().get_res(token_url)
res = RequestUtils().get_res(token_url) if res:
if res: ret_json = res.json()
ret_json = res.json() if ret_json.get("errcode") == 0:
if ret_json.get("errcode") == 0: self._access_token = ret_json.get("access_token")
self._access_token = ret_json.get("access_token") self._expires_in = ret_json.get("expires_in")
self._expires_in = ret_json.get("expires_in") self._access_token_time = datetime.now()
self._access_token_time = datetime.now() elif res is not None:
elif res is not None: logger.error(f"获取微信access_token失败,错误码:{res.status_code},错误原因:{res.reason}")
logger.error(f"获取微信access_token失败,错误码:{res.status_code},错误原因:{res.reason}") else:
else: logger.error(f"获取微信access_token失败,未获取到返回信息")
logger.error(f"获取微信access_token失败,未获取到返回信息") raise RetryException("获取微信access_token失败,重试中...")
raise Exception("获取微信access_token失败,网络连接失败")
except Exception as e:
logger.error(f"获取微信access_token失败,错误信息:{str(e)}")
return None
return self._access_token return self._access_token
@staticmethod @staticmethod
@@ -307,7 +307,8 @@ class WeChat:
return False return False
def send_torrents_msg(self, torrents: List[Context], def send_torrents_msg(self, torrents: List[Context],
userid: Optional[str] = None, title: Optional[str] = None, link: Optional[str] = None) -> Optional[bool]: userid: Optional[str] = None, title: Optional[str] = None,
link: Optional[str] = None) -> Optional[bool]:
""" """
发送列表消息 发送列表消息
""" """
@@ -359,7 +360,7 @@ class WeChat:
logger.error(f"发送消息失败:{e}") logger.error(f"发送消息失败:{e}")
return False return False
@retry(Exception, logger=logger) @retry(RetryException, logger=logger)
def __post_request(self, url: str, req_json: dict) -> bool: def __post_request(self, url: str, req_json: dict) -> bool:
""" """
向微信发送请求 向微信发送请求
@@ -384,7 +385,7 @@ class WeChat:
self.__get_access_token(force=True) self.__get_access_token(force=True)
error_msg = (f"access_token 已过期,尝试重新获取 access_token," error_msg = (f"access_token 已过期,尝试重新获取 access_token,"
f"errcode: {ret_json.get('errcode')}, errmsg: {ret_json.get('errmsg')}") f"errcode: {ret_json.get('errcode')}, errmsg: {ret_json.get('errmsg')}")
raise Exception(error_msg) raise RetryException(error_msg)
else: else:
logger.error(f"发送请求失败,错误信息:{ret_json.get('errmsg')}") logger.error(f"发送请求失败,错误信息:{ret_json.get('errmsg')}")
return False return False
@@ -464,7 +465,6 @@ class WeChat:
}) })
except Exception as e: except Exception as e:
logger.error(f"创建菜单失败:{e}") logger.error(f"创建菜单失败:{e}")
return False
def delete_menus(self): def delete_menus(self):
""" """
@@ -477,4 +477,3 @@ class WeChat:
RequestUtils().get(req_url) RequestUtils().get(req_url)
except Exception as e: except Exception as e:
logger.error(f"删除菜单失败:{e}") logger.error(f"删除菜单失败:{e}")
return False