aboutsummaryrefslogtreecommitdiff
path: root/tools/cru-py/cru/config.py
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-11-11 01:12:29 +0800
committerYuqian Yang <crupest@crupest.life>2025-01-18 17:38:07 +0800
commit41f735ed9ddc9d96d27f7e1f2a6ca34af9cce9d9 (patch)
treeae0e509d11b974b6fda8fbef985f1e538913e6fd /tools/cru-py/cru/config.py
parentc0ba4d9d8d19d3faa7b4d2b3509546e37dd32364 (diff)
downloadcrupest-41f735ed9ddc9d96d27f7e1f2a6ca34af9cce9d9.tar.gz
crupest-41f735ed9ddc9d96d27f7e1f2a6ca34af9cce9d9.tar.bz2
crupest-41f735ed9ddc9d96d27f7e1f2a6ca34af9cce9d9.zip
HALF WORK: 2024.1.18
Diffstat (limited to 'tools/cru-py/cru/config.py')
-rw-r--r--tools/cru-py/cru/config.py68
1 files changed, 38 insertions, 30 deletions
diff --git a/tools/cru-py/cru/config.py b/tools/cru-py/cru/config.py
index 8558106..9efcd55 100644
--- a/tools/cru-py/cru/config.py
+++ b/tools/cru-py/cru/config.py
@@ -40,7 +40,6 @@ class ConfigItem(Generic[_T]):
self._value_type = value_type
self._value = value
self._default = default
- self._default_value: _T | None = None
@property
def name(self) -> str:
@@ -61,18 +60,25 @@ class ConfigItem(Generic[_T]):
@property
def value(self) -> _T:
if self._value is None:
- raise CruConfigError("Config value is not set.", self)
+ raise CruConfigError(
+ "Config value is not set.",
+ self,
+ user_message=f"Config item {self.name} is not set.",
+ )
return self._value
@property
- def value_or_default(self) -> _T:
- if self._value is not None:
- return self._value
- elif self._default_value is not None:
- return self._default_value
+ def value_str(self) -> str:
+ return self.value_type.convert_value_to_str(self.value)
+
+ def set_value(self, v: _T | str, allow_convert_from_str=False):
+ if allow_convert_from_str:
+ self._value = self.value_type.check_value_or_try_convert_from_str(v)
else:
- self._default_value = self.generate_default_value()
- return self._default_value
+ self._value = self.value_type.check_value(v)
+
+ def reset(self):
+ self._value = None
@property
def default(self) -> ValueGeneratorBase[_T] | _T | None:
@@ -82,21 +88,6 @@ class ConfigItem(Generic[_T]):
def can_generate_default(self) -> bool:
return self.default is not None
- def set_value(
- self, v: _T | str, *, empty_is_default=True, allow_convert_from_str=True
- ):
- if empty_is_default and v == "":
- self._value = None
- elif allow_convert_from_str:
- self._value = self.value_type.check_value_or_try_convert_from_str(v)
- else:
- self._value = self.value_type.check_value(v)
-
- def reset(self, clear_default_cache=False):
- if clear_default_cache:
- self._default_value = None
- self._value = None
-
def generate_default_value(self) -> _T:
if self.default is None:
raise CruConfigError(
@@ -122,12 +113,20 @@ class ConfigItem(Generic[_T]):
self.value,
self.default,
)
+
+ @property
+ def description_str(self) -> str:
+ return f"{self.name} ({self.value_type.name}): {self.description}"
class Configuration(CruUniqueKeyList[ConfigItem[Any], str]):
def __init__(self):
super().__init__(lambda c: c.name)
+ @property
+ def all_not_set(self) -> bool:
+ return self.cru_iter().all(lambda item: not item.is_set)
+
def add_text_config(
self,
name: str,
@@ -150,9 +149,21 @@ class Configuration(CruUniqueKeyList[ConfigItem[Any], str]):
self.add(item)
return item
- def reset_all(self, clear_default_cache=False) -> None:
+ def set_config_item(
+ self,
+ name: str,
+ value: Any | str,
+ allow_convert_from_str=True,
+ ) -> None:
+ item = self.get(name)
+ item.set_value(
+ value,
+ allow_convert_from_str=allow_convert_from_str,
+ )
+
+ def reset_all(self) -> None:
for item in self:
- item.reset(clear_default_cache)
+ item.reset()
def to_dict(self) -> dict[str, Any]:
return {item.name: item.value for item in self}
@@ -165,14 +176,11 @@ class Configuration(CruUniqueKeyList[ConfigItem[Any], str]):
def set_value_dict(
self,
value_dict: dict[str, Any],
- *,
- empty_is_default: bool = True,
- allow_convert_from_str: bool = True,
+ allow_convert_from_str: bool = False,
) -> None:
for name, value in value_dict.items():
item = self.get(name)
item.set_value(
value,
- empty_is_default=empty_is_default,
allow_convert_from_str=allow_convert_from_str,
)