mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
🐛 修复添加插件依赖更新
This commit is contained in:
parent
d0b1024566
commit
2b3aaf4246
183
poetry.lock
generated
183
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@ -43,6 +43,7 @@ aiocache = "^0.12.2"
|
|||||||
py-cpuinfo = "^9.0.0"
|
py-cpuinfo = "^9.0.0"
|
||||||
nonebot-plugin-uninfo = "^0.4.1"
|
nonebot-plugin-uninfo = "^0.4.1"
|
||||||
nonebot-plugin-alconna = "^0.54.0"
|
nonebot-plugin-alconna = "^0.54.0"
|
||||||
|
tenacity = "^9.0.0"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
nonebug = "^0.4"
|
nonebug = "^0.4"
|
||||||
|
|||||||
@ -44,14 +44,14 @@ _matcher = on_alconna(
|
|||||||
)
|
)
|
||||||
|
|
||||||
_matcher.shortcut(
|
_matcher.shortcut(
|
||||||
r"添加插件",
|
r"(添加|安装)插件",
|
||||||
command="插件商店",
|
command="插件商店",
|
||||||
arguments=["add", "{%0}"],
|
arguments=["add", "{%0}"],
|
||||||
prefix=True,
|
prefix=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
_matcher.shortcut(
|
_matcher.shortcut(
|
||||||
r"移除插件",
|
r"(移除|卸载)插件",
|
||||||
command="插件商店",
|
command="插件商店",
|
||||||
arguments=["remove", "{%0}"],
|
arguments=["remove", "{%0}"],
|
||||||
prefix=True,
|
prefix=True,
|
||||||
|
|||||||
@ -232,8 +232,9 @@ class ShopManage:
|
|||||||
raise ValueError("所有API获取插件文件失败,请检查网络连接")
|
raise ValueError("所有API获取插件文件失败,请检查网络连接")
|
||||||
if module_path == ".":
|
if module_path == ".":
|
||||||
module_path = ""
|
module_path = ""
|
||||||
|
replace_module_path = module_path.replace(".", "/")
|
||||||
files = repo_api.get_files(
|
files = repo_api.get_files(
|
||||||
module_path=module_path.replace(".", "/") + ("" if is_dir else ".py"),
|
module_path=replace_module_path + ("" if is_dir else ".py"),
|
||||||
is_dir=is_dir,
|
is_dir=is_dir,
|
||||||
)
|
)
|
||||||
download_urls = [await repo_info.get_raw_download_urls(file) for file in files]
|
download_urls = [await repo_info.get_raw_download_urls(file) for file in files]
|
||||||
@ -248,8 +249,12 @@ class ShopManage:
|
|||||||
else:
|
else:
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
plugin_path = base_path / "/".join(module_path.split("."))
|
plugin_path = base_path / "/".join(module_path.split("."))
|
||||||
req_files = repo_api.get_files(REQ_TXT_FILE_STRING, False)
|
req_files = repo_api.get_files(
|
||||||
req_files.extend(repo_api.get_files("requirement.txt", False))
|
f"{replace_module_path}/{REQ_TXT_FILE_STRING}", False
|
||||||
|
)
|
||||||
|
req_files.extend(
|
||||||
|
repo_api.get_files(f"{replace_module_path}/requirement.txt", False)
|
||||||
|
)
|
||||||
logger.debug(f"获取插件依赖文件列表: {req_files}", "插件管理")
|
logger.debug(f"获取插件依赖文件列表: {req_files}", "插件管理")
|
||||||
req_download_urls = [
|
req_download_urls = [
|
||||||
await repo_info.get_raw_download_urls(file) for file in req_files
|
await repo_info.get_raw_download_urls(file) for file in req_files
|
||||||
|
|||||||
16
zhenxun/utils/decorator/retry.py
Normal file
16
zhenxun/utils/decorator/retry.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from httpx import ConnectError, HTTPStatusError, TimeoutException
|
||||||
|
from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed
|
||||||
|
|
||||||
|
|
||||||
|
class Retry:
|
||||||
|
@staticmethod
|
||||||
|
def api():
|
||||||
|
"""接口调用重试"""
|
||||||
|
return retry(
|
||||||
|
reraise=True,
|
||||||
|
stop=stop_after_attempt(3),
|
||||||
|
wait=wait_fixed(1),
|
||||||
|
retry=retry_if_exception_type(
|
||||||
|
(TimeoutException, ConnectError, HTTPStatusError)
|
||||||
|
),
|
||||||
|
)
|
||||||
@ -7,6 +7,7 @@ import time
|
|||||||
from typing import Any, ClassVar, Literal
|
from typing import Any, ClassVar, Literal
|
||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
|
from anyio import EndOfStream
|
||||||
import httpx
|
import httpx
|
||||||
from httpx import ConnectTimeout, HTTPStatusError, Response
|
from httpx import ConnectTimeout, HTTPStatusError, Response
|
||||||
from nonebot_plugin_alconna import UniMessage
|
from nonebot_plugin_alconna import UniMessage
|
||||||
@ -311,12 +312,17 @@ class AsyncHttpx:
|
|||||||
completed=response.num_bytes_downloaded,
|
completed=response.num_bytes_downloaded,
|
||||||
)
|
)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"下载 {u} 成功.. "
|
f"下载 {u} 成功.. Path:{path.absolute()}"
|
||||||
f"Path:{path.absolute()}"
|
|
||||||
)
|
)
|
||||||
return True
|
return True
|
||||||
except (TimeoutError, ConnectTimeout, HTTPStatusError):
|
except (TimeoutError, ConnectTimeout, HTTPStatusError):
|
||||||
logger.warning(f"下载 {u} 失败.. 尝试下一个地址..")
|
logger.warning(f"下载 {u} 失败.. 尝试下一个地址..")
|
||||||
|
except EndOfStream as e:
|
||||||
|
logger.warning(
|
||||||
|
f"下载 {url} EndOfStream 异常 Path:{path.absolute()}", e=e
|
||||||
|
)
|
||||||
|
if path.exists():
|
||||||
|
return True
|
||||||
logger.error(f"下载 {url} 下载超时.. Path:{path.absolute()}")
|
logger.error(f"下载 {url} 下载超时.. Path:{path.absolute()}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"下载 {url} 错误 Path:{path.absolute()}", e=e)
|
logger.error(f"下载 {url} 错误 Path:{path.absolute()}", e=e)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user