Skip to content

Commit 6dc9eac

Browse files
committed
-
1 parent e39fab7 commit 6dc9eac

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

source_py3/python_toolbox/monkeypatching_tools.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ def change_defaults_(function_, new_defaults_):
116116
double=True,
117117
)
118118

119+
non_existing_arguments = set(new_defaults) - set(defaultful_parameters)
120+
if non_existing_arguments:
121+
raise Exception("Arguments %s are not defined, or do not have a "
122+
"default defined. (Can't create default value for "
123+
"argument that has no existing default.)"
124+
% non_existing_arguments)
125+
119126
for parameter_name in keyword_only_defaultful_parameters:
120127
if parameter_name in new_defaults_:
121128
kwdefaults[parameter_name] = new_defaults_[parameter_name]

source_py3/test_python_toolbox/test_monkeypatching_tools/test_change_defaults.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,17 @@ def f2(alpha, beta, *args, gamma=10, delta=20, **kwargs):
2323
def f3(alpha, beta, *args, gamma=10, delta=20, **kwargs):
2424
return (alpha, beta, args, gamma, delta, kwargs)
2525
assert f3(1, 2) == (1, 2, (), 1000, 20, {})
26+
27+
@monkeypatching_tools.change_defaults(new_defaults={'x': 'A', 'z': 'C'})
28+
def f4(x='a', y='b', z='c'):
29+
return (x, y, z)
30+
assert f4() == ('A', 'b', 'C')
31+
32+
with cute_testing.RaiseAssertor(Exception):
33+
@monkeypatching_tools.change_defaults(new_defaults={'x': 'A', 'z': 'C',
34+
'nonexistant': 7,})
35+
def f5(x='a', y='b', z='c'):
36+
return (x, y, z)
37+
38+
2639

0 commit comments

Comments
 (0)