diff options
| author | 2019-06-29 22:26:28 +0100 | |
|---|---|---|
| committer | 2019-06-29 22:26:28 +0100 | |
| commit | 19f716ab4cc73592d19128d239848002678af736 (patch) | |
| tree | f2adb6ac388eaafa083bf475974499d9a664a9b6 /src | |
| parent | Automatically format `example` text for OptionsSetting (showing options) (diff) | |
| signature | ||
Implemnt _options_factory for OptionsSetting to have dynamic options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Exports.py | 19 | ||||
| -rw-r--r-- | src/utils/__init__.py | 19 |
2 files changed, 25 insertions, 13 deletions
diff --git a/src/Exports.py b/src/Exports.py index cad2cc6d..a9fe3175 100644 --- a/src/Exports.py +++ b/src/Exports.py @@ -26,8 +26,10 @@ class Exports(object): self._context_exports[context][setting].append(value) def _get_keys(self): - return set(list(self._exports.keys()) - +list(self._context_exports.keys())) + keys = list(self._exports.keys()) + for context in self._context_exports.keys(): + keys += list(self._context_exports[context].keys()) + return list(set(keys)) def get_all(self, setting: str) -> typing.List[typing.Any]: return self._exports.get(setting, []) + sum([ @@ -38,13 +40,12 @@ class Exports(object): values = self.get_all(setting) return values[0] if values else default - def find_one(self, setting_prefix: str, default: typing.Any=None - ) -> typing.Optional[typing.Any]: - keys = self._get_keys() - for key in keys: + def find(self, setting_prefix: str) -> typing.List[typing.Any]: + found = [] + for key in self._get_keys(): if key.startswith(setting_prefix): - return key - return default + found.append(key) + return found def purge_context(self, context: str): if context in self._context_exports: @@ -62,3 +63,5 @@ class ExportsContext(object): def get_one(self, setting: str, default: typing.Any=None ) -> typing.Optional[typing.Any]: return self._parent.get_one(setting, default) + def find(self, setting_prefix: str) -> typing.List[typing.Any]: + return self._parent.find(setting_prefix) diff --git a/src/utils/__init__.py b/src/utils/__init__.py index 887e8ab2..027a72af 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -230,7 +230,7 @@ def is_main_thread() -> bool: return threading.current_thread() is threading.main_thread() class Setting(object): - example: str = None + example: typing.Optional[str] = None def __init__(self, name: str, help: str=None, example: str=None): self.name = name self.help = help @@ -269,17 +269,26 @@ class IntSetting(Setting): class OptionsSetting(Setting): def __init__(self, name: str, options: typing.List[str], help: str=None, - example: str=None): + example: str=None, + options_factory: typing.Callable[[], typing.List[str]]=None): self._options = options + self._options_factory = options_factory Setting.__init__(self, name, help, example) + def _get_options(self): + if not self._options_factory == None: + return self._options_factory() + else: + return self._options + def parse(self, value: str) -> typing.Any: value_lower = value.lower() - for option in self._options: + for option in self._get_options(): if option.lower() == value_lower: return option return None def _format_example(self): - options = ["'%s'" % option for option in self._options] - return "Options: %s" % ", ".join(options) + options = self._get_options() + options_str = ["'%s'" % option for option in options] + return "Options: %s" % ", ".join(options_str) |
