Skip to content
Snippets Groups Projects

Dev2

Merged Alkaid Cheng requested to merge dev2 into master
2 files
+ 24
9
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 12
8
@@ -8,7 +8,8 @@ import fnmatch
from .enums import GeneralEnum
from .abstract_object import AbstractObject
from dataclasses import MISSING
from dataclasses import MISSING, _MISSING_TYPE
class BasicConfigTypes(GeneralEnum):
NONE = (0, lambda x: x is None)
@@ -198,7 +199,8 @@ class ConfigComponent(object):
self.choice = choice
self.default = default
self.default_factory = default_factory
if (self.default is not MISSING) and (self.default_factory is not MISSING):
if ((not isinstance(self.default, _MISSING_TYPE)) and
(not isinstance(self.default_factory, _MISSING_TYPE))):
raise ValueError('cannot specify both default and default_factory')
self.description = description
self.example = example
@@ -212,17 +214,18 @@ class ConfigComponent(object):
f'Allowed types: {", ".join([dtype.name for dtype in self.dtypes])}')
def has_default(self):
return (self.default is not MISSING) or (self.default_factory is not MISSING)
return ((not isinstance(self.default, _MISSING_TYPE)) or
(not isinstance(self.default_factory, _MISSING_TYPE)))
def get_default(self):
if self.default is not MISSING:
if not isinstance(self.default, _MISSING_TYPE):
return self.default
if self.default_factory is not MISSING:
if not isinstance(self.default_factory, _MISSING_TYPE):
return self.default_factory()
raise RuntimeError('default value not set')
def validate(self, value=MISSING):
if (value == MISSING):
if isinstance(value, _MISSING_TYPE):
# throw error if missing value but no default value available
if self.required or (self.required_strict and (not self.has_default())):
raise RuntimeError(f'Missing value for the config component "{self.name}":\n'
@@ -239,8 +242,8 @@ class ConfigComponent(object):
"dtype" : "|".join([dtype.name for dtype in self.dtypes]),
"required" : str(self.required),
}
if self.default is not MISSING:
components["default"] = str(self.default)
if self.has_default():
components["default"] = str(self.get_default())
components["description"] = self.description
if self.example is not None:
components["example"] = self.example
@@ -286,6 +289,7 @@ class ConfigParser(AbstractObject):
def set_components_requirement(self, required_components:Optional[List[str]]=None,
optional_components:Optional[List[str]]=None):
# require everything by default
if required_components is None:
required_components = ["*"]
Loading