aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2024-01-23 11:44:49 +0800
committer苏向夜 <fu050409@163.com>2024-01-23 11:44:49 +0800
commitfc077a37ea8698f2554412ca86d60824e7e2a16d (patch)
tree28bc5b2eed689651b4e892ac12c3e324cd9082f3
parent5374ff370e488323cde32384f4d3e1333eedae3f (diff)
downloadipm-fc077a37ea8698f2554412ca86d60824e7e2a16d.tar.gz
ipm-fc077a37ea8698f2554412ca86d60824e7e2a16d.zip
:recycle: refactor(ipk): refact InfiniPackage abstract class and add require, unrequire and add, remove method
-rw-r--r--src/ipm/models/ipk.py64
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