def evaluate(self, expression) -> object:
if not isinstance(expression, collections.abc.Mapping):
return expression
try:
import_path = expression['class']
except KeyError:
return expression
f = self.import_(import_path)
args = expression.get('*', ())
if isinstance(args, str) or \
not isinstance(args, collections.abc.Sequence):
raise ConfigValueError(
'"*" field must be a list, not ' + repr(args)
)
kw = {k: v for k, v in expression.items() if k not in ('class', '*')}
if self.recurse:
args = map(self.evaluate, args)
kw = {k: self.evaluate(v) for k, v in kw.items()}
return f(*args, **kw)
评论列表
文章目录