@@ -1587,23 +1587,35 @@ def foo(ax, *args, **kwargs)
1587
1587
replace_names = set (replace_names )
1588
1588
1589
1589
def param (func ):
1590
- if six .PY2 :
1590
+ new_sig = None
1591
+ ver_info = sys .version_info
1592
+ _python_has_signature = ver_info .major > 2 and ver_info .minor > 2
1593
+ if not _python_has_signature :
1591
1594
arg_spec = inspect .getargspec (func )
1592
1595
_arg_names = arg_spec .args
1593
1596
_has_no_varargs = arg_spec .varargs is None
1594
1597
_has_varkwargs = arg_spec .keywords is not None
1595
- elif six . PY3 :
1598
+ else :
1596
1599
sig = inspect .signature (func )
1597
1600
_has_no_varargs = True
1598
1601
_has_varkwargs = False
1599
1602
_arg_names = []
1600
- for p in sig .parameters .values ():
1603
+ params = list (sig .parameters .values ())
1604
+ for p in params :
1601
1605
if p .kind is p .VAR_POSITIONAL :
1602
1606
_has_no_varargs = False
1603
1607
elif p .kind is p .VAR_KEYWORD :
1604
1608
_has_varkwargs = True
1605
1609
else :
1606
1610
_arg_names .append (p .name )
1611
+ data_param = inspect .Parameter ('data' ,
1612
+ inspect .Parameter .KEYWORD_ONLY ,
1613
+ default = None )
1614
+ if _has_varkwargs :
1615
+ params .insert (- 1 , data_param )
1616
+ else :
1617
+ params .append (data_param )
1618
+ new_sig = sig .replace (parameters = params )
1607
1619
# Import-time check: do we have enough information to replace *args?
1608
1620
arg_names_at_runtime = False
1609
1621
# there can't be any positional arguments behind *args and no
@@ -1777,6 +1789,8 @@ def inner(ax, *args, **kwargs):
1777
1789
_repl = _repl .format (names = "', '" .join (replace_names ))
1778
1790
inner .__doc__ = (pre_doc +
1779
1791
_DATA_DOC_APPENDIX .format (replaced = _repl ))
1792
+ if new_sig is not None :
1793
+ inner .__signature__ = new_sig
1780
1794
return inner
1781
1795
return param
1782
1796
0 commit comments