diff options
| -rw-r--r-- | src/ipm/models/ipk.py | 2 | ||||
| -rw-r--r-- | src/ipm/models/lock.py | 22 | ||||
| -rw-r--r-- | src/ipm/models/requirement.py | 19 |
3 files changed, 22 insertions, 21 deletions
diff --git a/src/ipm/models/ipk.py b/src/ipm/models/ipk.py index fc77ac3..9b5b650 100644 --- a/src/ipm/models/ipk.py +++ b/src/ipm/models/ipk.py @@ -176,7 +176,7 @@ class InfiniProject(InfiniPackage): @property def requirements(self) -> Requirements: return Requirements( - self._data.get("requirements") or {}, + self._data.unwrap().get("requirements", {}), yggdrasils={ name: global_lock.get_yggdrasil_by_index(url) for name, url in self.yggdrasils.items() diff --git a/src/ipm/models/lock.py b/src/ipm/models/lock.py index 439d978..b599e82 100644 --- a/src/ipm/models/lock.py +++ b/src/ipm/models/lock.py @@ -13,7 +13,6 @@ import tomlkit if TYPE_CHECKING: from ipm.models import ipk from ipm.models.index import Yggdrasil - from ipm.models.ipk import InfiniFrozenPackage class IPMLock(metaclass=ABCMeta): @@ -153,26 +152,9 @@ class ProjectLock(IPMLock): for requirement in requirements: if requirement.is_local(): - packages.append( - tomlkit.item( - { - "name": requirement.name, - "version": requirement.version, - "path": requirement.path, - } - ) - ) + packages.append(tomlkit.item(requirement.as_dict())) else: - packages.append( - tomlkit.item( - { - "name": requirement.name, - "version": requirement.version, - "yggdrasil": requirement.yggdrasil.index, - "url": requirement.url, - } - ) - ) + packages.append(tomlkit.item(requirement.as_dict())) lock._data.add("package", packages) return lock diff --git a/src/ipm/models/requirement.py b/src/ipm/models/requirement.py index 04e33cb..d324be1 100644 --- a/src/ipm/models/requirement.py +++ b/src/ipm/models/requirement.py @@ -32,6 +32,10 @@ class Requirement: self.version = version self.path = path self.url = url or yggdrasil.get_url(name, version) + if not self.url: + raise ProjectError( + f"规则包 [bold red]{name}[/] 不存在版本 [bold yellow]{version}[/]" + ) self.yggdrasil = yggdrasil self.hash = hash @@ -45,6 +49,21 @@ class Requirement: def is_local(self) -> bool: return bool(self.path) + def as_dict(self) -> dict: + if self.is_local(): + return { + "name": self.name, + "version": self.version, + "path": self.path, + } + else: + return { + "name": self.name, + "version": self.version, + "yggdrasil": self.yggdrasil.index, + "url": self.url, + } + class Requirements(List[Requirement]): def __init__( |
