File tree Expand file tree Collapse file tree 1 file changed +26
-0
lines changed
source_py3/python_toolbox Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Original file line number Diff line number Diff line change 44'''Tools for monkeypatching.'''
55
66import sys
7+ import inspect
78import types
89
910from python_toolbox import misc_tools
11+ from python_toolbox import dict_tools
1012from python_toolbox import decorator_tools
1113from python_toolbox import caching
1214
@@ -84,3 +86,27 @@ def decorator(function):
8486
8587 return decorator
8688
89+
90+ def change_defaults (function , new_defaults = {}):
91+ def change_defaults_ (function_ , new_defaults_ ):
92+ signature = inspect .Signature .from_function (function_ )
93+ defaults = list (function_ .__defaults__ )
94+ defaultful_parameters = dict_tools .filter_items (
95+ signature .parameters ,
96+ lambda name , parameter : parameter .default != inspect ._empty
97+ )
98+ for i , (name , parameter ) in enumerate (defaultful_parameters ):
99+ if name in new_defaults_ :
100+ defaults [i ] = new_defaults [name ]
101+
102+ if not callable (function ) and new_defaults == {}:
103+ # Decorator mode:
104+ actual_new_defaults = function
105+ return lambda function_ : change_defaults_ (function_ ,
106+ actual_new_defaults )
107+ else :
108+ # Normal usage mode:
109+ change_defaults (function , new_defaults )
110+
111+
112+
You can’t perform that action at this time.
0 commit comments