From ccb5f3cee9ebb5f20e33f31432a46579f8e9bf8e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 23 Jan 2017 12:37:00 +0200 Subject: [PATCH] Issue #29338: The help of a builtin or extension class now includes the constructor signature if __text_signature__ is provided for the class. --- Lib/pydoc.py | 32 +++++++++++++++++++++++++++++--- Misc/NEWS | 3 +++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 39db3915dc..f0c7cfce2e 100644 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -909,7 +909,21 @@ class HTMLDoc(Doc): for base in bases: parents.append(self.classlink(base, object.__module__)) title = title + '(%s)' % ', '.join(parents) - doc = self.markup(getdoc(object), self.preformat, funcs, classes, mdict) + + decl = '' + try: + signature = inspect.signature(object) + except (ValueError, TypeError): + signature = None + if signature: + argspec = str(signature) + if argspec: + decl = name + self.escape(argspec) + '\n\n' + + doc = getdoc(object) + if decl: + doc = decl + (doc or '') + doc = self.markup(doc, self.preformat, funcs, classes, mdict) doc = doc and '%s
 
' % doc return self.section(title, '#000000', '#ffc8d8', contents, 3, doc) @@ -1213,10 +1227,22 @@ location listed above. parents = map(makename, bases) title = title + '(%s)' % ', '.join(parents) - doc = getdoc(object) - contents = doc and [doc + '\n'] or [] + contents = [] push = contents.append + try: + signature = inspect.signature(object) + except (ValueError, TypeError): + signature = None + if signature: + argspec = str(signature) + if argspec: + push(name + argspec + '\n') + + doc = getdoc(object) + if doc: + push(doc + '\n') + # List the mro, if non-trivial. mro = deque(inspect.getmro(object)) if len(mro) > 2: diff --git a/Misc/NEWS b/Misc/NEWS index 5d1e9c1117..1f3bd79b8c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -215,6 +215,9 @@ Core and Builtins Library ------- +- Issue #29338: The help of a builtin or extension class now includes the + constructor signature if __text_signature__ is provided for the class. + - Issue #29335: Fix subprocess.Popen.wait() when the child process has exited to a stopped instead of terminated state (ex: when under ptrace). -- 2.40.0