[ENH] Add support to auto-generate a barebones docstring if None is provided
This commit is contained in:
1 parent
ffe4f70819
commit
4540900adf
3 files changed
+35
-1
No files matched your search
@@ -2205,6 +2205,10 @@ typedef struct {
|
||||
if self.binary_numeric_operators:
|
||||
tp_flags.add("Py_TPFLAGS_CHECKTYPES")
|
||||
self.slots.setdefault("tp_flags", '|'.join(tp_flags))
|
||||
|
||||
if docstring is None:
|
||||
docstring = self.generate_docstring()
|
||||
|
||||
self.slots.setdefault("tp_doc", (docstring is None and 'NULL'
|
||||
or "\"%s\"" % (docstring,)))
|
||||
dict_ = self.slots
|
||||
@@ -2227,6 +2231,10 @@ typedef struct {
|
||||
|
||||
self.pytype.generate(code_sink)
|
||||
|
||||
def generate_docstring(self):
|
||||
name = self.get_python_name()
|
||||
return "\\n".join(sorted([c.generate_docstring(name) for c in self.constructors],
|
||||
key=len, reverse=True))
|
||||
|
||||
def _generate_constructor(self, code_sink):
|
||||
"""generate the constructor, if any"""
|
||||
|
||||
+15
-1
@@ -406,12 +406,23 @@ class CppMethod(ForwardWrapperBase):
|
||||
def get_py_method_def(self, method_name):
|
||||
"Get the PyMethodDef entry suitable for this method"
|
||||
flags = self.get_py_method_def_flags()
|
||||
|
||||
if self.docstring is None:
|
||||
self.docstring = self.generate_docstring(method_name)
|
||||
|
||||
return "{(char *) \"%s\", (PyCFunction) %s, %s, %s }," % \
|
||||
(method_name, self.wrapper_actual_name, '|'.join(flags),
|
||||
(self.docstring is None and "NULL" or ('"'+self.docstring+'"')))
|
||||
|
||||
def generate_docstring(self, name):
|
||||
parameters = self.parameters
|
||||
signature = "{0}({1})".format(name, ", ".join([p.name for p in parameters]))
|
||||
params = "\\n".join(["type: {0}: {1}".format(p.name, p.ctype)
|
||||
for p in parameters])
|
||||
string = signature + "\\n\\n" + params
|
||||
return string
|
||||
|
||||
def __str__(self):
|
||||
|
||||
if self.class_ is None:
|
||||
cls_name = "???"
|
||||
else:
|
||||
@@ -736,6 +747,9 @@ class CppConstructor(ForwardWrapperBase):
|
||||
code_sink.writeln('return 0;')
|
||||
self.write_close_wrapper(code_sink)
|
||||
|
||||
def generate_docstring(self, name):
|
||||
return "{0}({1})".format(name, ', '.join([p.name for p in self.parameters]))
|
||||
|
||||
def __str__(self):
|
||||
if not hasattr(self, '_class'):
|
||||
return object.__str__(self)
|
||||
|
||||
@@ -289,10 +289,22 @@ class Function(ForwardWrapperBase):
|
||||
assert isinstance(self.wrapper_return, string_types)
|
||||
assert isinstance(self.wrapper_actual_name, string_types)
|
||||
assert isinstance(self.wrapper_args, list)
|
||||
|
||||
if self.docstring is None:
|
||||
self.docstring = self.generate_docstring(name)
|
||||
|
||||
return "{(char *) \"%s\", (PyCFunction) %s, %s, %s }," % \
|
||||
(name, self.wrapper_actual_name, '|'.join(flags),
|
||||
(self.docstring is None and "NULL" or ('"'+self.docstring+'"')))
|
||||
|
||||
def generate_docstring(self, name):
|
||||
parameters = self.parameters
|
||||
signature = "{0}({1})".format(name, ", ".join([p.name for p in parameters]))
|
||||
params = "\\n".join(["type: {0}: {1}".format(p.name, p.ctype)
|
||||
for p in parameters])
|
||||
string = signature + "\\n\\n" + params
|
||||
return string
|
||||
|
||||
|
||||
class CustomFunctionWrapper(Function):
|
||||
"""
|
||||
|
||||
Reference in new issue
Block a user