diff options
| author | 2024-01-23 11:44:49 +0800 | |
|---|---|---|
| committer | 2024-01-23 11:44:49 +0800 | |
| commit | fc077a37ea8698f2554412ca86d60824e7e2a16d (patch) | |
| tree | 28bc5b2eed689651b4e892ac12c3e324cd9082f3 /src | |
| parent | 5374ff370e488323cde32384f4d3e1333eedae3f (diff) | |
| download | ipm-fc077a37ea8698f2554412ca86d60824e7e2a16d.tar.gz ipm-fc077a37ea8698f2554412ca86d60824e7e2a16d.zip | |
:recycle: refactor(ipk): refact InfiniPackage abstract class and add require, unrequire and add, remove method
Diffstat (limited to 'src')
| -rw-r--r-- | src/ipm/models/ipk.py | 64 |
1 files changed, 55 insertions, 9 deletions
diff --git a/src/ipm/models/ipk.py b/src/ipm/models/ipk.py index f2fadf3..dcdbfe8 100644 --- a/src/ipm/models/ipk.py +++ b/src/ipm/models/ipk.py @@ -1,10 +1,12 @@ from pathlib import Path from . import lock -from ..typing import List, Dict, Literal +from ..typing import List, Dict, Literal, StrPath, Any from ..exceptions import SyntaxError, TomlLoadFailed import toml +ProjectLock = lock.ProjectLock + class Author: name: str @@ -49,12 +51,10 @@ class InfiniProject(InfiniPackage): authors: Authors license: str - requirements: dict - dependencies: dict - - lock: lock.ProjectLock + requirements: Dict[str, Any] + dependencies: Dict[str, Any] - def __init__(self, path: str | Path = ".") -> None: + def __init__(self, path: StrPath = ".") -> None: self.source_path = Path(path).resolve() toml_path = self.source_path / "infini.toml" @@ -75,10 +75,8 @@ class InfiniProject(InfiniPackage): self.requirements = data_load["requirements"] self.dependencies = data_load["dependencies"] - # self.lock = ProjectLock - # TODO 项目锁 - def export_dict(self) -> dict: + def dumps(self) -> dict: return { "infini": { "name": self.source_path.name, @@ -94,6 +92,54 @@ class InfiniProject(InfiniPackage): "dependencies": self.dependencies, } + def dump(self) -> str: + return toml.dump( + self.dumps(), (self.source_path / "infini.toml").open("w", encoding="utf-8") + ) + + def require(self, name: str, version: str, dump: bool = False) -> None: + for requirement in self.requirements.keys(): + if requirement == name: + self.requirements.pop(name) + break + + self.requirements[name] = version or "latest" + self.dump() if dump else "" + + def unrequire(self, name: str, dump: bool = False) -> None: + name = name.strip() + for requirement in self.requirements: + if requirement == name: + self.requirements.pop(name) + break + self.dump() if dump else "" + + def add(self, name: str, version: str, dump: bool = False) -> None: + for dependency in self.dependencies: + if "name" not in dependency.keys(): + raise SyntaxError("异常的锁文件!") + if dependency["name"] == name: + self.dependencies.remove(dependency) + break + + self.dependencies.append( + { + "name": name, + "version": version, + } + ) + self.dump() if dump else "" + + def remove(self, name: str, dump: bool = False) -> None: + name = name.strip() + for dependency in self.dependencies: + if "name" not in dependency.keys(): + raise SyntaxError("异常的锁文件!") + if dependency["name"] == name: + self.dependencies.remove(dependency) + break + self.dump() if dump else "" + class InfiniFrozenPackage(InfiniPackage): name: str | None |
