improve config

This commit is contained in:
2025-11-06 11:08:59 +08:00
parent 01b0e56d46
commit d934aff5bf

View File

@@ -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)