diff options
| author | 2024-01-22 12:31:14 +0800 | |
|---|---|---|
| committer | 2024-01-22 12:31:14 +0800 | |
| commit | b2db4075da3af6eb7880d2a85b1e8dde13ffeb6f (patch) | |
| tree | 7d7c8fd8ae9bb157b05178970eab5f793f22be42 | |
| parent | 158949a0241c4e97a45caf10f6c41e0e0ff18000 (diff) | |
| download | ipm-b2db4075da3af6eb7880d2a85b1e8dde13ffeb6f.tar.gz ipm-b2db4075da3af6eb7880d2a85b1e8dde13ffeb6f.zip | |
:bug: fix(loader): fix remote downloader
| -rw-r--r-- | src/ipm/api.py | 6 | ||||
| -rw-r--r-- | src/ipm/utils/loader.py | 24 |
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 |
