From fcaf7de164d28b7c6c3a633d10b2d8f3f6a1e86b Mon Sep 17 00:00:00 2001 From: 苏向夜 Date: Mon, 18 Mar 2024 18:56:18 +0800 Subject: feat(ipk): add some useful fields for ipk model --- src/ipm/models/ipk.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ipm/models/ipk.py b/src/ipm/models/ipk.py index aa7513f..5b327a1 100644 --- a/src/ipm/models/ipk.py +++ b/src/ipm/models/ipk.py @@ -175,6 +175,20 @@ class InfiniProject(InfiniPackage): def plain_dict(self) -> TOMLDocument: return self._data + @property + def metadata(self) -> dict: + return self._data["project"] # type: ignore + + @property + def readme(self) -> str: + project = self._data.get("project") + if not project: + raise ProjectError("项目文件中不存在`project`项!") + path = self._source_path.joinpath(project["readme"]) + if not path.exists(): + raise ProjectError("配置文件中的自述文件不存在!") + return path.read_text(encoding="utf-8") + @property def name(self) -> str: return self._data["project"]["name"] # type: ignore @@ -192,8 +206,8 @@ class InfiniProject(InfiniPackage): return Authors(self._data["project"]["authors"]) # type: ignore @property - def webpage(self) -> str: - return self._data["project"]["webpage"] # type: ignore + def homepage(self) -> str: + return self._data["project"]["urls"]["homepage"] # type: ignore @property def unzip(self) -> Union[str, int]: @@ -220,6 +234,10 @@ class InfiniProject(InfiniPackage): for name, index in self._data.get("yggdrasils", {}).items() } or {} + @property + def topics(self) -> List[str]: + return self._data["project"]["topics"] # type: ignore + class InfiniFrozenPackage(InfiniPackage): def __init__(self, source_path: Union[str, Path], name: str, version: str) -> None: -- cgit v1.2.3-70-g09d2