1
0
forked from VimPlug/jedi

raise multiple key errors also if they are an input to kwargs

This commit is contained in:
Dave Halter
2014-06-05 10:35:44 +02:00
parent acb4959a6a
commit 6f83eb65ce
2 changed files with 22 additions and 16 deletions

View File

@@ -91,12 +91,15 @@ def get_params(evaluator, func, var_args):
key, va_values = next(var_arg_iterator, (None, [])) key, va_values = next(var_arg_iterator, (None, []))
while key: while key:
keys_only = True keys_only = True
k = unicode(key)
try: try:
key_param = param_dict[unicode(key)] key_param = param_dict[unicode(key)]
except KeyError: except KeyError:
non_matching_keys.append((key, va_values)) non_matching_keys.append((key, va_values))
else: else:
k = unicode(key) result.append(_gen_param_name_copy(func, var_args, key_param,
values=va_values))
if k in keys_used: if k in keys_used:
had_multiple_value_error = True had_multiple_value_error = True
m = ("TypeError: %s() got multiple values for keyword argument '%s'." m = ("TypeError: %s() got multiple values for keyword argument '%s'."
@@ -107,8 +110,6 @@ def get_params(evaluator, func, var_args):
calling_va, message=m) calling_va, message=m)
else: else:
keys_used.add(k) keys_used.add(k)
result.append(_gen_param_name_copy(func, var_args, key_param,
values=va_values))
key, va_values = next(var_arg_iterator, (None, [])) key, va_values = next(var_arg_iterator, (None, []))
keys = [] keys = []
@@ -234,11 +235,14 @@ def _unpack_var_args(evaluator, var_args, params):
for i, p in enumerate(params): for i, p in enumerate(params):
if str(p.get_name()) == str(key) and not p.stars: if str(p.get_name()) == str(key) and not p.stars:
try: try:
if argument_list[i][0] is None: k, vs = argument_list[i]
argument_list[i][1].extend(values)
break
except IndexError: except IndexError:
pass pass
else:
if k is None:
if [v.parent for v in values] != [v.parent for v in vs]:
vs.extend(values)
break
else: else:
argument_list.append((key, values)) argument_list.append((key, values))
# Normal arguments (including key arguments). # Normal arguments (including key arguments).

View File

@@ -61,6 +61,8 @@ kwargs_nested()
kwargs_nested(c=2, d=4) kwargs_nested(c=2, d=4)
#! 13 type-error-multiple-values #! 13 type-error-multiple-values
kwargs_nested(c=2, a=4) kwargs_nested(c=2, a=4)
#! 13 type-error-multiple-values
kwargs_nested(b=3, c=2)
# ----------------- # -----------------
# mixed *args/**kwargs # mixed *args/**kwargs