diff --git a/hshetl/__init__.py b/hshetl/__init__.py index bd49b071a20e9e4986d6d783788aa2128d7212f6..d7c43e00df9034f35dc9faadaafb4dfe6ca5a66c 100644 --- a/hshetl/__init__.py +++ b/hshetl/__init__.py @@ -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):