feat(cli): 实现 nyahome config 命令
允许通过 nyahome 终端命令修改设置 同时再次调整数据库有关的内部常量的位置
This commit is contained in:
@@ -15,6 +15,11 @@ T = TypeVar("T")
|
||||
|
||||
|
||||
class ConfigManager:
|
||||
"""
|
||||
ConfigManager 携带一个初始化的 Config 实例。在 Config 初始化时,所有的默认设置键的值就都已经加载。
|
||||
因此,如果不 load_config,ConfigManager 也将持有一套默认设置。
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
CONFIG_PATH.parent.mkdir(exist_ok=True)
|
||||
self._config = Config()
|
||||
@@ -76,6 +81,47 @@ class ConfigManager:
|
||||
"""
|
||||
return getattr(self._config, key, default) # type: ignore[return-value]
|
||||
|
||||
def set(self, key: str, value: T) -> None:
|
||||
"""
|
||||
设置配置项。
|
||||
|
||||
Args:
|
||||
key: 配置键名
|
||||
value: 配置键的新值,可以是(且仅支持)字符串、整型以及列表。
|
||||
"""
|
||||
try:
|
||||
old_value = self.get(key)
|
||||
except AttributeError as e:
|
||||
raise e
|
||||
|
||||
match old_value:
|
||||
case str():
|
||||
new_value = str(value)
|
||||
case int():
|
||||
new_value = int(value)
|
||||
case bool():
|
||||
new_value = bool(value)
|
||||
case list():
|
||||
new_value = [x for x in value]
|
||||
case _:
|
||||
raise TypeError(f"不支持 {type(old_value).__name__} 类型的设置项。({key})")
|
||||
setattr(self._config, key, new_value)
|
||||
|
||||
def reset(self, key: str) -> None:
|
||||
"""
|
||||
将配置项恢复至默认值。
|
||||
|
||||
Args:
|
||||
key: 配置键名
|
||||
|
||||
"""
|
||||
ci = Config()
|
||||
try:
|
||||
default_value = getattr(ci, key)
|
||||
except AttributeError as e:
|
||||
raise e
|
||||
setattr(self._config, key, default_value)
|
||||
|
||||
def get_config(self) -> dict[str, Any]:
|
||||
config = {}
|
||||
for attr in dir(self._config):
|
||||
|
||||
Reference in New Issue
Block a user