Skip to content

Commit

Permalink
feat(requirement): add as_dict method for requirement
Browse files Browse the repository at this point in the history
  • Loading branch information
fu050409 committed Apr 2, 2024
1 parent b03151c commit e0727ee
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/ipm/models/ipk.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def dependencies(self) -> Dict[str, str]:
@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()
Expand Down
22 changes: 2 additions & 20 deletions src/ipm/models/lock.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
if TYPE_CHECKING:
from ipm.models import ipk
from ipm.models.index import Yggdrasil
from ipm.models.ipk import InfiniFrozenPackage


class IPMLock(metaclass=ABCMeta):
Expand Down Expand Up @@ -153,26 +152,9 @@ def init_from_project(

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
Expand Down
19 changes: 19 additions & 0 deletions src/ipm/models/requirement.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ def __init__(
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

Expand All @@ -45,6 +49,21 @@ def __eq__(self, __value: "Requirement") -> bool:
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__(
Expand Down

0 comments on commit e0727ee

Please sign in to comment.