improve config
This commit is contained in:
@@ -5,7 +5,8 @@ from tomli_w import dump as toml_dump
|
|||||||
from typing import TypedDict, Literal
|
from typing import TypedDict, Literal
|
||||||
|
|
||||||
EntryItem = TypedDict("EntryItem", {
|
EntryItem = TypedDict("EntryItem", {
|
||||||
"source": str,
|
"name": str,
|
||||||
|
"sources": list[str],
|
||||||
"included": list[str],
|
"included": list[str],
|
||||||
"ignored": list[str],
|
"ignored": list[str],
|
||||||
})
|
})
|
||||||
@@ -24,7 +25,6 @@ RemoteStorageItem = TypedDict("RemoteStorageItem", {
|
|||||||
StorageItem = LocalStorageItem | RemoteStorageItem
|
StorageItem = LocalStorageItem | RemoteStorageItem
|
||||||
|
|
||||||
ConfigDict = TypedDict("ConfigDict", {
|
ConfigDict = TypedDict("ConfigDict", {
|
||||||
"_config": list[str],
|
|
||||||
"entry": dict[str, EntryItem],
|
"entry": dict[str, EntryItem],
|
||||||
"storage": dict[str, StorageItem],
|
"storage": dict[str, StorageItem],
|
||||||
})
|
})
|
||||||
@@ -35,10 +35,10 @@ def _new_config() -> ConfigDict:
|
|||||||
return {
|
return {
|
||||||
"entry": {},
|
"entry": {},
|
||||||
"storage": {},
|
"storage": {},
|
||||||
"_config": [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_cfg: ConfigDict = _new_config()
|
_cfg: ConfigDict = _new_config()
|
||||||
|
_config: list[str] = []
|
||||||
|
|
||||||
def _override_dict(target: ConfigDict, top_dict: ConfigDict):
|
def _override_dict(target: ConfigDict, top_dict: ConfigDict):
|
||||||
for k, v in top_dict.items():
|
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):
|
if _pth.isdir(dir_or_path):
|
||||||
dir_or_path = _pth.abspath(_pth.join(dir_or_path, CONFIG_FILE_NAME))
|
dir_or_path = _pth.abspath(_pth.join(dir_or_path, CONFIG_FILE_NAME))
|
||||||
cfg_dir = _pth.dirname(dir_or_path)
|
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
|
return # skip if already added
|
||||||
try:
|
try:
|
||||||
with open(dir_or_path, "rb") as f:
|
with open(dir_or_path, "rb") as f:
|
||||||
config: ConfigDict = toml_load(f) # type: ignore
|
config: ConfigDict = toml_load(f) # type: ignore
|
||||||
except:
|
except:
|
||||||
config: ConfigDict = {} # type: ignore
|
config: ConfigDict = {} # type: ignore
|
||||||
# ignore config file list
|
|
||||||
if "_config" in config:
|
|
||||||
del config["_config"] # type: ignore
|
|
||||||
# ensure default value
|
# ensure default value
|
||||||
config.setdefault("entry", {})
|
config.setdefault("entry", {})
|
||||||
for item in config["entry"].values():
|
for item in config["entry"].values():
|
||||||
item.setdefault("source", "")
|
item.setdefault("name", "")
|
||||||
# path related to the config file.
|
# path related to the config file.
|
||||||
if item["source"]:
|
item.setdefault("sources", [])
|
||||||
item["source"] = _path_related_to(cfg_dir, item["source"])
|
for i, s in enumerate(item["sources"]):
|
||||||
|
item["sources"][i] = _path_related_to(cfg_dir, s)
|
||||||
item.setdefault("included", [])
|
item.setdefault("included", [])
|
||||||
item.setdefault("ignored", [])
|
item.setdefault("ignored", [])
|
||||||
config.setdefault("storage", {})
|
config.setdefault("storage", {})
|
||||||
@@ -83,7 +81,7 @@ def apply_user_config(dir_or_path: str):
|
|||||||
# update config
|
# update config
|
||||||
_override_dict(_cfg, config)
|
_override_dict(_cfg, config)
|
||||||
# append config file list
|
# append config file list
|
||||||
_cfg["_config"].append(dir_or_path)
|
_config.append(dir_or_path)
|
||||||
|
|
||||||
def init_default_config():
|
def init_default_config():
|
||||||
global _cfg
|
global _cfg
|
||||||
@@ -93,8 +91,9 @@ def init_default_config():
|
|||||||
|
|
||||||
def reload_config():
|
def reload_config():
|
||||||
global _cfg
|
global _cfg
|
||||||
cfg_list = _cfg["_config"]
|
cfg_list = _config
|
||||||
_cfg = _new_config()
|
_cfg = _new_config()
|
||||||
|
_config.clear()
|
||||||
for cfg in cfg_list:
|
for cfg in cfg_list:
|
||||||
apply_user_config(cfg)
|
apply_user_config(cfg)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user