aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2024-01-22 12:31:14 +0800
committer苏向夜 <fu050409@163.com>2024-01-22 12:31:14 +0800
commitb2db4075da3af6eb7880d2a85b1e8dde13ffeb6f (patch)
tree7d7c8fd8ae9bb157b05178970eab5f793f22be42
parent158949a0241c4e97a45caf10f6c41e0e0ff18000 (diff)
downloadipm-b2db4075da3af6eb7880d2a85b1e8dde13ffeb6f.tar.gz
ipm-b2db4075da3af6eb7880d2a85b1e8dde13ffeb6f.zip
:bug: fix(loader): fix remote downloader
-rw-r--r--src/ipm/api.py6
-rw-r--r--src/ipm/utils/loader.py24
2 files changed, 22 insertions, 8 deletions
diff --git a/src/ipm/api.py b/src/ipm/api.py
index 5f3fbb9..866355c 100644
--- a/src/ipm/api.py
+++ b/src/ipm/api.py
@@ -77,11 +77,13 @@ def install(uri: str, index: str = "", echo: bool = False) -> None:
# TODO
...
elif urlparser.is_valid_url(uri):
- filename = uri.rstrip("/").split("/")[-1]
+ info(f"检定给定的 URI 地址[{uri}]为远程路径.", echo)
+ filename = uri.rstrip("/").rpartition("/")[-1]
ifp = loader.load_from_remote(
"temp",
- uri.rstrip("/").rsplit("/")[0],
+ uri.rstrip("/").rpartition("/")[0],
filename,
+ echo=echo,
)
else:
info(f"检定给定的 URI 地址[{uri}]为本地路径.", echo)
diff --git a/src/ipm/utils/loader.py b/src/ipm/utils/loader.py
index d06a0e2..a751584 100644
--- a/src/ipm/utils/loader.py
+++ b/src/ipm/utils/loader.py
@@ -1,6 +1,7 @@
from pathlib import Path
from .freeze import extract_ipk
from ..const import STORAGE
+from ..logging import info, success
from ..models.ipk import InfiniFrozenPackage
import requests
@@ -9,13 +10,18 @@ import shutil
def load_from_remote(
- name: str, baseurl: str = "", filename: str = ""
+ name: str, baseurl: str = "", filename: str = "", echo: bool = False
) -> InfiniFrozenPackage:
- ipk_bytes = requests.get(baseurl.rstrip("/") + "/" + filename).content
- hash_bytes = requests.get(baseurl.rstrip("/") + "/" + filename + ".hash").content
+ ipk_uri = baseurl.rstrip("/") + "/" + filename
+ hash_uri = baseurl.rstrip("/") + "/" + filename + ".hash"
+ info(f"开始下载[.ipk]文件[{ipk_uri}]...", echo)
+ ipk_bytes = requests.get(ipk_uri).content
+ info(f"开始下载哈希验证文件[{hash_uri}]...", echo)
+ hash_bytes = requests.get(hash_uri).content
temp_dir = tempfile.TemporaryDirectory()
temp_path = Path(temp_dir.name).resolve()
+ info(f"创建临时目录[{temp_dir}], 开始释放文件...", echo)
ipk_path = temp_path / f"{name}.ipk"
ipk_file = ipk_path.open("w+b")
@@ -27,18 +33,24 @@ def load_from_remote(
hash_file.write(hash_bytes)
hash_file.close()
- temp_ipk = extract_ipk(ipk_file, temp_path)
+ info("解压中...", echo)
+ temp_ipk = extract_ipk(ipk_path, temp_path)
+ success(f"包[{temp_ipk.name}]解压完成.")
move_to = STORAGE / temp_ipk.name
move_to.mkdir(parents=True, exist_ok=True)
- shutil.copy2(ipk_file, move_to / temp_ipk.default_name)
- shutil.copy2(hash_file, move_to / (temp_ipk.default_name + ".hash"))
+ info("转存缓存文件中...", echo)
+ shutil.copy2(ipk_path, move_to / temp_ipk.default_name)
+ shutil.copy2(hash_path, move_to / (temp_ipk.default_name + ".hash"))
+ info(f"缓存文件转存至[{move_to}]完毕.", echo)
ifp = InfiniFrozenPackage(
move_to / temp_ipk.default_name, name=temp_ipk.name, version=temp_ipk.version
)
+ info("任务完成, 开始清理下载临时文件...")
temp_dir.cleanup()
+ info("下载临时文件清理完毕.")
return ifp