Skip to content

Commit 4098303

Browse files
committed
refactor: miscellaneous updates across modules
1 parent 01aafc2 commit 4098303

82 files changed

Lines changed: 508 additions & 481 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

astrbot/cli/commands/cmd_init.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,9 @@ def init(
229229
click.echo("首次使用前请先设置管理员密码:")
230230
click.echo(" astrbot conf admin")
231231
click.echo()
232-
except Timeout:
232+
except Timeout as err:
233233
raise click.ClickException(
234234
"Cannot acquire lock file. Please check if another instance is running",
235-
)
235+
) from err
236236
except Exception as e:
237-
raise click.ClickException(f"Initialization failed: {e!s}")
237+
raise click.ClickException(f"Initialization failed: {e!s}") from e

astrbot/cli/commands/cmd_plug.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ def remove(name: str) -> None:
184184
except Exception as e:
185185
raise click.ClickException(
186186
t("plugin_uninstall_failed_ex", name=name, error=str(e)),
187-
)
187+
) from e
188188

189189

190190
@plug.command()

astrbot/cli/commands/cmd_run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ async def stream_logs() -> None:
361361
nl=False,
362362
)
363363
click.echo(f" {message}")
364-
except asyncio.TimeoutError:
364+
except TimeoutError:
365365
continue
366366
except asyncio.CancelledError:
367367
break

astrbot/cli/utils/plugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,4 @@ def manage_plugin(
254254
shutil.move(backup_path, target_path)
255255
raise click.ClickException(
256256
f"Error {'updating' if is_update else 'installing'} plugin {plugin_name}: {e}",
257-
)
257+
) from e

astrbot/core/agent/mcp_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ async def _quick_test_mcp_connection(config: dict) -> tuple[bool, str]:
156156
return True, ""
157157
return False, f"HTTP {response.status}: {response.reason}"
158158

159-
except asyncio.TimeoutError:
159+
except TimeoutError:
160160
return False, f"Connection timeout: {timeout} seconds"
161161
except Exception as e:
162162
return False, f"{e!s}"

astrbot/core/agent/message.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Inspired by MoonshotAI/kosong, credits to MoonshotAI/kosong authors for the original implementation.
22
# License: Apache License 2.0
33

4-
from typing import Any, ClassVar, Literal, TypeVar, cast
4+
from typing import Any, ClassVar, Literal, Self, TypeVar, cast
55

66
from pydantic import (
77
BaseModel,
@@ -12,7 +12,6 @@
1212
model_validator,
1313
)
1414
from pydantic_core import core_schema
15-
from typing_extensions import Self
1615

1716
ContentPartT = TypeVar("ContentPartT", bound="ContentPart")
1817

astrbot/core/agent/runners/coze/coze_agent_runner.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import base64
22
import json
3-
import sys
4-
from typing import Any
3+
from typing import Any, override
54

65
import astrbot.core.message.components as Comp
76
from astrbot import logger
87
from astrbot.core import sp
98
from astrbot.core.agent.hooks import BaseAgentRunHooks
9+
from astrbot.core.agent.message import is_checkpoint_message
1010
from astrbot.core.agent.response import AgentResponse, AgentResponseData
1111
from astrbot.core.agent.run_context import ContextWrapper, TContext
1212
from astrbot.core.agent.runners.base import AgentState, BaseAgentRunner
@@ -18,18 +18,8 @@
1818
)
1919
from astrbot.core.provider.provider import Provider
2020

21-
from ...hooks import BaseAgentRunHooks
22-
from ...message import is_checkpoint_message
23-
from ...response import AgentResponseData
24-
from ...run_context import ContextWrapper, TContext
25-
from ..base import AgentResponse, AgentState, BaseAgentRunner
2621
from .coze_api_client import CozeAPIClient
2722

28-
if sys.version_info >= (3, 12):
29-
from typing import override
30-
else:
31-
from typing_extensions import override
32-
3323

3424
class CozeAgentRunner(BaseAgentRunner[TContext]):
3525
"""Coze Agent Runner"""
@@ -375,7 +365,7 @@ async def _download_and_upload_image(
375365

376366
except Exception as e:
377367
logger.error(f"处理图片失败 {image_url}: {e!s}")
378-
raise Exception(f"处理图片失败: {e!s}")
368+
raise Exception(f"处理图片失败: {e!s}") from e
379369

380370
@override
381371
def done(self) -> bool:

astrbot/core/agent/runners/coze/coze_api_client.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ async def upload_file(
8181
try:
8282
result = await response.json()
8383
except json.JSONDecodeError:
84-
raise Exception(f"文件上传响应解析失败: {response_text}")
84+
raise Exception(f"文件上传响应解析失败: {response_text}") from None
8585

8686
if result.get("code") != 0:
8787
raise Exception(f"文件上传失败: {result.get('msg', '未知错误')}")
@@ -90,12 +90,12 @@ async def upload_file(
9090
logger.debug(f"[Coze] 图片上传成功,file_id: {file_id}")
9191
return file_id
9292

93-
except asyncio.TimeoutError:
93+
except TimeoutError:
9494
logger.error("文件上传超时")
95-
raise Exception("文件上传超时")
95+
raise Exception("文件上传超时") from None
9696
except Exception as e:
9797
logger.error(f"文件上传失败: {e!s}")
98-
raise Exception(f"文件上传失败: {e!s}")
98+
raise Exception(f"文件上传失败: {e!s}") from e
9999

100100
async def download_image(self, image_url: str) -> bytes:
101101
"""下载图片并返回字节数据
@@ -118,7 +118,7 @@ async def download_image(self, image_url: str) -> bytes:
118118

119119
except Exception as e:
120120
logger.error(f"下载图片失败 {image_url}: {e!s}")
121-
raise Exception(f"下载图片失败: {e!s}")
121+
raise Exception(f"下载图片失败: {e!s}") from e
122122

123123
async def chat_messages(
124124
self,
@@ -203,10 +203,10 @@ async def chat_messages(
203203
except json.JSONDecodeError:
204204
event_data = {"content": data_str}
205205

206-
except asyncio.TimeoutError:
207-
raise Exception(f"Coze API 流式请求超时 ({timeout}秒)")
206+
except TimeoutError:
207+
raise Exception(f"Coze API 流式请求超时 ({timeout}秒)") from None
208208
except Exception as e:
209-
raise Exception(f"Coze API 流式请求失败: {e!s}")
209+
raise Exception(f"Coze API 流式请求失败: {e!s}") from e
210210

211211
async def clear_context(self, conversation_id: str):
212212
"""清空会话上下文
@@ -234,12 +234,12 @@ async def clear_context(self, conversation_id: str):
234234
try:
235235
return json.loads(response_text)
236236
except json.JSONDecodeError:
237-
raise Exception("Coze API 返回非JSON格式")
237+
raise Exception("Coze API 返回非JSON格式") from None
238238

239-
except asyncio.TimeoutError:
240-
raise Exception("Coze API 请求超时")
239+
except TimeoutError:
240+
raise Exception("Coze API 请求超时") from None
241241
except aiohttp.ClientError as e:
242-
raise Exception(f"Coze API 请求失败: {e!s}")
242+
raise Exception(f"Coze API 请求失败: {e!s}") from e
243243

244244
async def get_message_list(
245245
self,
@@ -275,7 +275,7 @@ async def get_message_list(
275275

276276
except Exception as e:
277277
logger.error(f"获取Coze消息列表失败: {e!s}")
278-
raise Exception(f"获取Coze消息列表失败: {e!s}")
278+
raise Exception(f"获取Coze消息列表失败: {e!s}") from e
279279

280280
async def close(self) -> None:
281281
"""关闭会话"""
@@ -299,7 +299,7 @@ async def test_coze_api_client() -> None:
299299
async with await anyio.open_file("README.md", "rb") as f:
300300
file_data = await f.read()
301301
file_id = await client.upload_file(file_data)
302-
async for event in client.chat_messages(
302+
async for _event in client.chat_messages(
303303
bot_id=bot_id,
304304
user_id="test_user",
305305
additional_messages=[

astrbot/core/agent/runners/dashscope/dashscope_agent_runner.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
import functools
33
import queue
44
import re
5-
import sys
65
import threading
76
from collections.abc import AsyncGenerator
8-
from typing import Any
7+
from typing import Any, override
98

109
from dashscope import Application
1110
from dashscope.app.application_response import ApplicationResponse
@@ -24,11 +23,6 @@
2423
)
2524
from astrbot.core.provider.provider import Provider
2625

27-
if sys.version_info >= (3, 12):
28-
from typing import override
29-
else:
30-
from typing_extensions import override
31-
3226

3327
class DashscopeAgentRunner(BaseAgentRunner[TContext]):
3428
"""Dashscope Agent Runner"""

astrbot/core/agent/runners/deerflow/deerflow_agent_runner.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import asyncio
22
import hashlib
33
import json
4-
import sys
54
import typing as T
65
from collections import deque
76
from dataclasses import dataclass, field
8-
from typing import Any
7+
from typing import Any, override
98
from uuid import uuid4
109

1110
import astrbot.core.message.components as Comp
@@ -43,11 +42,6 @@
4342
get_message_id,
4443
)
4544

46-
if sys.version_info >= (3, 12):
47-
from typing import override
48-
else:
49-
from typing_extensions import override
50-
5145

5246
class DeerFlowAgentRunner(BaseAgentRunner[TContext]):
5347
"""DeerFlow Agent Runner via LangGraph HTTP API."""
@@ -687,7 +681,7 @@ async def _execute_deerflow_request(self):
687681

688682
if event_type == "end":
689683
break
690-
except (asyncio.TimeoutError, TimeoutError):
684+
except TimeoutError:
691685
logger.warning(
692686
"DeerFlow stream timed out after %ss for thread_id=%s; returning partial result.",
693687
self.timeout,

0 commit comments

Comments
 (0)