summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2024-01-22 16:39:56 +0800
committer苏向夜 <fu050409@163.com>2024-01-22 16:39:56 +0800
commitad199c534a36c843f47bac56aca65801579b75d4 (patch)
tree398b34dbcb245a15382ae7305f69856fb3f07578 /src
parentc3baa78c50cd0f58d37af74417bc17c126ed0f3d (diff)
downloadipm-ad199c534a36c843f47bac56aca65801579b75d4.tar.gz
ipm-ad199c534a36c843f47bac56aca65801579b75d4.zip
:sparkles: feat(lock): allow disable lock auto completion
Diffstat (limited to 'src')
-rw-r--r--src/ipm/models/lock.py58
1 files changed, 33 insertions, 25 deletions
diff --git a/src/ipm/models/lock.py b/src/ipm/models/lock.py
index 4422738..0515b9c 100644
--- a/src/ipm/models/lock.py
+++ b/src/ipm/models/lock.py
@@ -3,7 +3,7 @@ from abc import ABCMeta
from . import ipk
from ..typing import Dict, List, StrPath, Any
from ..const import IPM_PATH, ATTENSION
-from ..exceptions import SyntaxError
+from ..exceptions import SyntaxError, FileNotFoundError
from ..utils.uuid import generate_uuid
import toml
@@ -17,36 +17,44 @@ class IpmLock(metaclass=ABCMeta):
storages: List[Dict[str, Any]]
source_path: Path
- def __init__(self, source_path: StrPath = IPM_PATH / "infini.lock") -> None:
+ def __init__(self, source_path: StrPath, auto_load: bool = True) -> None:
IPM_PATH.mkdir(parents=True, exist_ok=True)
self.source_path = source_path
- self.load()
+ return self.load() if auto_load else None
- def load(self):
+ def load(self, auto_completion: bool = True):
if not self.source_path.exists():
- self.metadata = {
- "host": socket.gethostname(),
- "uuid": generate_uuid(),
- }
- self.indexes = []
- self.packages = []
- self.storages = []
- self.dumps()
- else:
- loaded_data = toml.load(self.source_path.open("r", encoding="utf-8"))
- self.metadata = (
- loaded_data["metadata"]
- if "metadata" in loaded_data.keys()
- else {
- "host": socket.gethostname(),
- "uuid": generate_uuid(),
- }
- )
- if "uuid" not in self.metadata.keys():
+ if auto_completion:
self.metadata = {
"host": socket.gethostname(),
"uuid": generate_uuid(),
}
+ self.indexes = []
+ self.packages = []
+ self.storages = []
+ self.dumps()
+ else:
+ raise FileNotFoundError(f"锁文件不存在!")
+ else:
+ loaded_data = toml.load(self.source_path.open("r", encoding="utf-8"))
+
+ if "metadata" not in loaded_data.keys():
+ if not auto_completion:
+ raise SyntaxError(f"锁文件缺失[metadata]项.")
+ else:
+ self.metadata = {
+ "host": socket.gethostname(),
+ "uuid": generate_uuid(),
+ }
+ else:
+ self.metadata = loaded_data["metadata"]
+
+ if "uuid" not in self.metadata.keys():
+ if auto_completion:
+ self.metadata["uuid"] = generate_uuid()
+ else:
+ raise SyntaxError(f"锁文件[metadata]项缺失[uuid]项.")
+
self.indexes = (
loaded_data["indexes"] if "indexes" in loaded_data.keys() else []
)
@@ -75,8 +83,8 @@ class IpmLock(metaclass=ABCMeta):
class PackageLock(IpmLock):
"""全局包锁"""
- def __init__(self) -> None:
- super().__init__()
+ def __init__(self, source_path: StrPath | None = None) -> None:
+ super().__init__(source_path=source_path or IPM_PATH / "infini.lock")
def add_index(
self, index_uri: str, host: str, uuid: str, dump: bool = False