Skip to content

Commit 2f80feb

Browse files
ChiefMilesEdgeworthWillAyd
authored andcommitted
BUG: Partial fix for docstring validation for parameters (#28765)
1 parent 18a9e4c commit 2f80feb

File tree

2 files changed

+36
-7
lines changed

2 files changed

+36
-7
lines changed

scripts/tests/test_validate_docstrings.py

+19
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import functools
12
import io
23
import random
34
import string
@@ -68,6 +69,23 @@ def sample(self):
6869
"""
6970
return random.random()
7071

72+
@functools.lru_cache(None)
73+
def decorated_sample(self, max):
74+
"""
75+
Generate and return a random integer between 0 and max.
76+
77+
Parameters
78+
----------
79+
max : int
80+
The maximum value of the random number.
81+
82+
Returns
83+
-------
84+
int
85+
Random number generated.
86+
"""
87+
return random.randint(0, max)
88+
7189
def random_letters(self):
7290
"""
7391
Generate and return a sequence of random letters.
@@ -870,6 +888,7 @@ def test_good_class(self, capsys):
870888
"plot",
871889
"swap",
872890
"sample",
891+
"decorated_sample",
873892
"random_letters",
874893
"sample_values",
875894
"head",

scripts/validate_docstrings.py

+17-7
Original file line numberDiff line numberDiff line change
@@ -430,24 +430,34 @@ def doc_parameters(self):
430430

431431
@property
432432
def signature_parameters(self):
433+
def add_stars(param_name: str, info: inspect.Parameter):
434+
"""
435+
Add stars to *args and **kwargs parameters
436+
"""
437+
if info.kind == inspect.Parameter.VAR_POSITIONAL:
438+
return f"*{param_name}"
439+
elif info.kind == inspect.Parameter.VAR_KEYWORD:
440+
return f"**{param_name}"
441+
else:
442+
return param_name
443+
433444
if inspect.isclass(self.obj):
434445
if hasattr(self.obj, "_accessors") and (
435446
self.name.split(".")[-1] in self.obj._accessors
436447
):
437448
# accessor classes have a signature but don't want to show this
438449
return tuple()
439450
try:
440-
sig = inspect.getfullargspec(self.obj)
451+
sig = inspect.signature(self.obj)
441452
except (TypeError, ValueError):
442453
# Some objects, mainly in C extensions do not support introspection
443454
# of the signature
444455
return tuple()
445-
params = sig.args
446-
if sig.varargs:
447-
params.append("*" + sig.varargs)
448-
if sig.varkw:
449-
params.append("**" + sig.varkw)
450-
params = tuple(params)
456+
457+
params = tuple(
458+
add_stars(parameter, sig.parameters[parameter])
459+
for parameter in sig.parameters
460+
)
451461
if params and params[0] in ("self", "cls"):
452462
return params[1:]
453463
return params

0 commit comments

Comments
 (0)