✨ feat(http_utils): 添加可选的 accept_status_codes 参数以支持自定义状态码处理 (#2096)

- 在 AsyncHttpx 类中,新增 accept_status_codes 参数,允许用户指定哪些 HTTP 状态码不视为错误。
- 更新了单次请求的逻辑,以便在响应状态码符合 accept_status_codes 时不调用 raise_for_status 方法。

✨ feat(message): 增加随机失败提示消息功能

- 在 MessageUtils 类中,添加可爱风格的失败提示消息列表和获取随机消息的方法。

✨ feat(github_utils): 引入动态查询外部插件分组的功能

- 在 AliyunFileInfo 类中,新增 list_group_repositories 方法以列出分组下的所有仓库,并实现通过仓库名称获取仓库ID的逻辑。

✨ feat(virtual_env_package_manager): 增加清理 requirements 文件的功能

- 新增 _clean_requirements_file 方法,清理 requirements 文件中的非ASCII注释,避免 Windows 上 pip 使用 GBK 编码读取 UTF-8 文件时出错。

✨ feat(repo_utils): 优化阿里云仓库 URL 处理逻辑

- 更新 prepare_aliyun_url 方法以支持指定分组名称,并新增 get_aliyun_group_for_repo 方法以获取仓库所属的阿里云分组名。
This commit is contained in:
HibiKier
2026-02-06 16:45:48 +08:00
committed by GitHub
parent b95acce800
commit 5c067bcf04
7 changed files with 368 additions and 22 deletions
+25 -3
View File
@@ -219,8 +219,12 @@ class AsyncHttpx:
) -> Response:
"""
执行单次HTTP请求的私有方法,内置了默认的重试逻辑。
accept_status_codes: 若提供,这些状态码不视为错误,不调用 raise_for_status。
"""
client_kwargs, request_kwargs = cls._split_kwargs(kwargs)
accept_status_codes: Sequence[int] | None = request_kwargs.pop(
"accept_status_codes", None
)
async with cls._get_active_client_context(
client=client, **client_kwargs
@@ -228,7 +232,11 @@ class AsyncHttpx:
response = await cls()._execute_request_inner(
active_client, method, url, **request_kwargs
)
response.raise_for_status()
if (
accept_status_codes is None
or response.status_code not in accept_status_codes
):
response.raise_for_status()
return response
@classmethod
@@ -292,6 +300,7 @@ class AsyncHttpx:
*,
follow_redirects: bool = True,
check_status_code: int | None = None,
accept_status_codes: Sequence[int] | None = None,
client: AsyncClient | None = None,
**kwargs,
) -> Response:
@@ -301,6 +310,8 @@ class AsyncHttpx:
url: 单个请求 URL 或一个 URL 列表。
follow_redirects: 是否跟随重定向。
check_status_code: (可选) 若提供,将检查响应状态码是否匹配,否则抛出异常。
accept_status_codes: (可选) 这些状态码不视为错误,
如 (302,) 用于接受重定向响应。
client: (可选) 指定一个活动的HTTP客户端实例。若提供,则忽略
`**kwargs`中的客户端配置。
**kwargs: 其他所有传递给 httpx.get 的参数 (如 `params`, `headers`,
@@ -316,6 +327,8 @@ class AsyncHttpx:
async def worker(current_url: str, **worker_kwargs) -> Response:
logger.info(f"开始获取 {current_url}..", "AsyncHttpx:get")
if accept_status_codes is not None:
worker_kwargs["accept_status_codes"] = accept_status_codes
response = await cls._single_request(
"GET", current_url, follow_redirects=follow_redirects, **worker_kwargs
)
@@ -342,11 +355,20 @@ class AsyncHttpx:
@classmethod
async def post(
cls, url: str | list[str], *, client: AsyncClient | None = None, **kwargs
cls,
url: str | list[str],
*,
accept_status_codes: Sequence[int] | None = None,
client: AsyncClient | None = None,
**kwargs,
) -> Response:
"""发送 POST 请求,并返回第一个成功的响应。"""
"""发送 POST 请求,并返回第一个成功的响应。
accept_status_codes: (可选) 这些状态码不视为错误,如 (302,) 用于接受重定向响应。
"""
async def worker(current_url: str, **worker_kwargs) -> Response:
if accept_status_codes is not None:
worker_kwargs["accept_status_codes"] = accept_status_codes
return await cls._single_request("POST", current_url, **worker_kwargs)
return await cls._execute_with_fallbacks(url, worker, client=client, **kwargs)