From 77553aa89bab120b1a001cc9a10dc56d4985d2d9 Mon Sep 17 00:00:00 2001 From: Hommy <16620803786@163.com> Date: Thu, 16 Apr 2026 16:43:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=8D=89=E7=A8=BF=E5=A4=B1=E8=B4=A5=E7=9A=84=E5=AE=B9=E9=94=99?= =?UTF-8?q?=E5=A4=84=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/draft_downloader.py | 70 +++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/src/utils/draft_downloader.py b/src/utils/draft_downloader.py index f6fd55e..0a87878 100644 --- a/src/utils/draft_downloader.py +++ b/src/utils/draft_downloader.py @@ -14,6 +14,10 @@ import config import subprocess import os +_REQUEST_CONNECT_TIMEOUT = 10 +_REQUEST_READ_TIMEOUT = 30 +_MAX_RETRIES = 3 + def safe_write_file(file_path: str, file_content: bytes, is_binary: bool = True): """ @@ -129,35 +133,47 @@ def get_draft_files_list(draft_url: str) -> list: Returns: list: 文件URL列表 """ - try: - response = requests.get(draft_url) - - if response.status_code != 200: - logger.error(f"获取草稿文件列表失败,状态码: {response.status_code}") - return [] - - # 解析JSON响应 + for attempt in range(_MAX_RETRIES + 1): try: - json_data = response.json() - except json.JSONDecodeError as e: - logger.error(f"解析草稿JSON响应失败: {e}") + response = requests.get( + draft_url, + timeout=(_REQUEST_CONNECT_TIMEOUT, _REQUEST_READ_TIMEOUT), + ) + + if response.status_code != 200: + logger.error(f"获取草稿文件列表失败,状态码: {response.status_code}") + return [] + + # 解析JSON响应 + try: + json_data = response.json() + except json.JSONDecodeError as e: + logger.error(f"解析草稿JSON响应失败: {e}") + return [] + + # 检查响应状态 + if json_data.get('code') != 0: + logger.error(f"获取草稿文件列表失败: {json_data.get('message', '未知错误')}") + return [] + + # 返回files列表 + files = json_data.get('files', []) + logger.info(f"获取到 {len(files)} 个草稿文件") + return files + except requests.exceptions.RequestException as e: + if attempt >= _MAX_RETRIES: + logger.error(f"网络请求错误,获取草稿文件列表失败,已重试{_MAX_RETRIES}次: {e}") + return [] + + retry_no = attempt + 1 + backoff_seconds = retry_no + logger.warning( + f"网络请求错误,获取草稿文件列表准备重试({retry_no}/{_MAX_RETRIES}): {e}" + ) + time.sleep(backoff_seconds) + except Exception as e: + logger.error(f"获取草稿文件列表时发生未知错误: {e}") return [] - - # 检查响应状态 - if json_data.get('code') != 0: - logger.error(f"获取草稿文件列表失败: {json_data.get('message', '未知错误')}") - return [] - - # 返回files列表 - files = json_data.get('files', []) - logger.info(f"获取到 {len(files)} 个草稿文件") - return files - except requests.exceptions.RequestException as e: - logger.error(f"网络请求错误,获取草稿文件列表失败: {e}") - return [] - except Exception as e: - logger.error(f"获取草稿文件列表时发生未知错误: {e}") - return [] def download_all_files(files: list, target_dir: str, draft_id: str) -> bool: