diff options
| author | 2024-01-23 11:46:30 +0800 | |
|---|---|---|
| committer | 2024-01-23 11:46:30 +0800 | |
| commit | 6355973a3aa847b43ed1b8e8e2347c61c245a41f (patch) | |
| tree | d555b3f400c26a378e19c58fb2bcb7ed5a8c925f | |
| parent | 09e28ce5d22c9a76c4240325e67c17455a1023f7 (diff) | |
| download | ipm-6355973a3aa847b43ed1b8e8e2347c61c245a41f.tar.gz ipm-6355973a3aa847b43ed1b8e8e2347c61c245a41f.zip | |
:sparkles: feat(api): new require, unrequire and add remove method
| -rw-r--r-- | src/ipm/api.py | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/src/ipm/api.py b/src/ipm/api.py index 9c514e0..7e0eda1 100644 --- a/src/ipm/api.py +++ b/src/ipm/api.py @@ -11,7 +11,7 @@ from .exceptions import ( ) from .utils.version import require_update from .models.ipk import InfiniProject, InfiniFrozenPackage -from .models.lock import PackageLock +from .models.lock import PackageLock, ProjectLock from .models.index import Yggdrasil import toml @@ -186,3 +186,73 @@ def uninstall(name: str, confirm: bool = False, echo: bool = False) -> None: lock.remove_package(name, dump=True) success(f"规则包[{name}]卸载完成!", echo) + + +def require(name: str, index: str = "", echo: bool = False) -> None: + # TODO 输出 + pkg_lock = PackageLock() + lock = ProjectLock() + ipk = InfiniProject() + splited_name = name.split("==") # TODO 支持 >= <= > < 标识 + name = splited_name[0] + + if len(splited_name) > 1: + version = splited_name[1] + else: + version = None + + if not pkg_lock.has_package(name): + install( + f"name=={version}" if version else name, + index=index, + upgrade=True, + force=True, + echo=True, + ) + + ipk.require(name, version, dump=True) + lock.require(name, version, dump=True) + + +def unrequire(name: str): + # TODO 输出 + ipk = InfiniProject() + lock = ProjectLock() + + ipk.unrequire(name, dump=True) + lock.unrequire(name, dump=True) + + +def add(name: str, index: str = "", echo: bool = False) -> None: + # TODO 输出 + pkg_lock = PackageLock() + lock = ProjectLock() + ipk = InfiniProject() + splited_name = name.split("==") # TODO 支持 >= <= > < 标识 + name = splited_name[0] + + if len(splited_name) > 1: + version = splited_name[1] + else: + version = None + + if not pkg_lock.has_package(name): + install( + f"name=={version}" if version else name, + index=index, + upgrade=True, + force=True, + echo=True, + ) + + ipk.add(name, version, dump=True) + lock.add(name, version, dump=True) + + +def remove(name: str): + # TODO 输出 + ipk = InfiniProject() + lock = ProjectLock() + + ipk.remove(name, dump=True) + lock.remove(name, dump=True) |
