def module2md(self, module):
"""Takes an imported module object and create a Markdown string containing functions and classes.
"""
modname = module.__name__
path = self.get_src_path(module, append_base=False)
path = "[{}]({})".format(path, os.path.join(self.github_link, path))
found = []
classes = []
line_nos = []
for name, obj in getmembers(module, inspect.isclass):
# handle classes
found.append(name)
if not name.startswith("_") and hasattr(obj, "__module__") and obj.__module__ == modname:
classes.append(self.class2md(obj))
line_nos.append(self.get_line_no(obj) or 0)
classes = order_by_line_nos(classes, line_nos)
functions = []
line_nos = []
for name, obj in getmembers(module, inspect.isfunction):
# handle functions
found.append(name)
if not name.startswith("_") and hasattr(obj, "__module__") and obj.__module__ == modname:
functions.append(self.func2md(obj))
line_nos.append(self.get_line_no(obj) or 0)
functions = order_by_line_nos(functions, line_nos)
variables = []
line_nos = []
for name, obj in module.__dict__.items():
if not name.startswith("_") and name not in found:
if hasattr(obj, "__module__") and obj.__module__ != modname:
continue
if hasattr(obj, "__name__") and not obj.__name__.startswith(modname):
continue
comments = inspect.getcomments(obj)
comments = ": %s" % comments if comments else ""
variables.append("- **%s**%s" % (name, comments))
line_nos.append(self.get_line_no(obj) or 0)
variables = order_by_line_nos(variables, line_nos)
if variables:
new_list = ["**Global Variables**", "---------------"]
new_list.extend(variables)
variables = new_list
string = MODULE_TEMPLATE.format(path=path,
global_vars="\n".join(variables) if variables else "",
functions="\n".join(functions) if functions else "",
classes="".join(classes) if classes else "")
return string
评论列表
文章目录