Skip to content

Commit 1f3e2b4

Browse files
committed
Add sort args to delegates
1 parent 7386537 commit 1f3e2b4

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

fastcore/meta.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ def _f(f):
110110
# %% ../nbs/07_meta.ipynb
111111
def delegates(to:FunctionType=None, # Delegatee
112112
keep=False, # Keep `kwargs` in decorated function?
113-
but:list=None): # Exclude these parameters from signature
113+
but:list=None,
114+
sort_args=False): # Exclude these parameters from signature
114115
"Decorator: replace `**kwargs` in signature with params from `to`"
115116
if but is None: but = []
116117
def _f(f):
@@ -124,6 +125,7 @@ def _f(f):
124125
k = sigd.pop('kwargs')
125126
s2 = {k:v.replace(kind=inspect.Parameter.KEYWORD_ONLY) for k,v in inspect.signature(to_f).parameters.items()
126127
if v.default != inspect.Parameter.empty and k not in sigd and k not in but}
128+
if sort_args: s2 = dict(sorted(s2.items()))
127129
anno = {k:v for k,v in getattr(to_f, "__annotations__", {}).items() if k not in sigd and k not in but}
128130
sigd.update(s2)
129131
if keep: sigd['kwargs'] = k

nbs/07_meta.ipynb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,8 @@
904904
"#|export\n",
905905
"def delegates(to:FunctionType=None, # Delegatee\n",
906906
" keep=False, # Keep `kwargs` in decorated function?\n",
907-
" but:list=None): # Exclude these parameters from signature\n",
907+
" but:list=None,\n",
908+
" sort_args=False): # Exclude these parameters from signature\n",
908909
" \"Decorator: replace `**kwargs` in signature with params from `to`\"\n",
909910
" if but is None: but = []\n",
910911
" def _f(f):\n",
@@ -918,6 +919,7 @@
918919
" k = sigd.pop('kwargs')\n",
919920
" s2 = {k:v.replace(kind=inspect.Parameter.KEYWORD_ONLY) for k,v in inspect.signature(to_f).parameters.items()\n",
920921
" if v.default != inspect.Parameter.empty and k not in sigd and k not in but}\n",
922+
" if sort_args: s2 = dict(sorted(s2.items()))\n",
921923
" anno = {k:v for k,v in getattr(to_f, \"__annotations__\", {}).items() if k not in sigd and k not in but}\n",
922924
" sigd.update(s2)\n",
923925
" if keep: sigd['kwargs'] = k\n",

0 commit comments

Comments
 (0)