Skip to content
Snippets Groups Projects
Commit 4c08a805 authored by Philipp Schiffmann's avatar Philipp Schiffmann
Browse files

[TASK] The ConfigurationArgumentMatcher now returns the default values of...

[TASK] The ConfigurationArgumentMatcher now returns the default values of arguments with default values.
parent bb7be0ca
No related branches found
No related tags found
No related merge requests found
......@@ -81,7 +81,7 @@ class ConfigurationArgumentMatcher(object):
try:
return fn(*args, **kwargs)
except TypeError, te:
possible, required = self.get_constructor_arguments(args[0].__class__)
possible, required, _ = self.get_constructor_arguments(args[0].__class__)
missed = required.difference(kwargs)
invalid = set(kwargs) - possible
msg = 'The class {} with yaml tag {} requires the following parameters:\n{}\nand has the optional parameters:\n{}\n'
......@@ -108,6 +108,7 @@ class ConfigurationArgumentMatcher(object):
'''
possible_args = []
required_args = []
default_values = {}
mro = clas.__mro__
for cls in mro:
init_fn = cls.__init__
......@@ -120,13 +121,15 @@ class ConfigurationArgumentMatcher(object):
np_args, _, _, defaults = inspect.getargspec(init_fn)
if defaults:
nr_args = np_args[:-len(defaults)]
for i, d in enumerate(defaults):
default_values.setdefault(np_args[-(len(defaults) - i)], d)
else:
nr_args = np_args
required_args.extend(nr_args)
possible_args.extend(np_args)
if 'self' in possible_args: possible_args.remove('self')
if 'self' in required_args: required_args.remove('self')
return set(possible_args), set(required_args)
return set(possible_args), set(required_args), default_values
class NameResolver(object):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment