diff --git a/backup_box/config.py b/backup_box/config.py index 3d14142..0ef1637 100644 --- a/backup_box/config.py +++ b/backup_box/config.py @@ -5,7 +5,8 @@ from tomli_w import dump as toml_dump from typing import TypedDict, Literal EntryItem = TypedDict("EntryItem", { - "source": str, + "name": str, + "sources": list[str], "included": list[str], "ignored": list[str], }) @@ -24,7 +25,6 @@ RemoteStorageItem = TypedDict("RemoteStorageItem", { StorageItem = LocalStorageItem | RemoteStorageItem ConfigDict = TypedDict("ConfigDict", { - "_config": list[str], "entry": dict[str, EntryItem], "storage": dict[str, StorageItem], }) @@ -35,10 +35,10 @@ def _new_config() -> ConfigDict: return { "entry": {}, "storage": {}, - "_config": [], } _cfg: ConfigDict = _new_config() +_config: list[str] = [] def _override_dict(target: ConfigDict, top_dict: ConfigDict): for k, v in top_dict.items(): @@ -54,23 +54,21 @@ def apply_user_config(dir_or_path: str): if _pth.isdir(dir_or_path): dir_or_path = _pth.abspath(_pth.join(dir_or_path, CONFIG_FILE_NAME)) cfg_dir = _pth.dirname(dir_or_path) - if dir_or_path in _cfg["_config"]: + if dir_or_path in _config: return # skip if already added try: with open(dir_or_path, "rb") as f: config: ConfigDict = toml_load(f) # type: ignore except: config: ConfigDict = {} # type: ignore - # ignore config file list - if "_config" in config: - del config["_config"] # type: ignore # ensure default value config.setdefault("entry", {}) for item in config["entry"].values(): - item.setdefault("source", "") + item.setdefault("name", "") # path related to the config file. - if item["source"]: - item["source"] = _path_related_to(cfg_dir, item["source"]) + item.setdefault("sources", []) + for i, s in enumerate(item["sources"]): + item["sources"][i] = _path_related_to(cfg_dir, s) item.setdefault("included", []) item.setdefault("ignored", []) config.setdefault("storage", {}) @@ -83,7 +81,7 @@ def apply_user_config(dir_or_path: str): # update config _override_dict(_cfg, config) # append config file list - _cfg["_config"].append(dir_or_path) + _config.append(dir_or_path) def init_default_config(): global _cfg @@ -93,8 +91,9 @@ def init_default_config(): def reload_config(): global _cfg - cfg_list = _cfg["_config"] + cfg_list = _config _cfg = _new_config() + _config.clear() for cfg in cfg_list: apply_user_config(cfg)