def format_doc(obj, in_table=False): doc = inspect.getdoc(obj) body = doc or "" code_blocks = re.findall(r"```(.*?)```", body, re.DOTALL) for num, block in enumerate(code_blocks): body = body.replace(block, f"$CODEBLOCK{num}", 1) body = re.sub( "(?<!\n)\n{1}(?!\n)", " ", format_lists(body) ) # removes poorly placed newlines body = body.replace("```", "\n```") lines = body.split("\n") cleaned = "\n".join([clean_line(line) for line in lines]) if in_table: cleaned = cleaned.replace("\n", "<br>").replace("```", "") for num, block in enumerate(code_blocks): if in_table: block = block[block.startswith("python") and 6 :].lstrip("\n") block = ( '<pre class="language-python"><code class="language-python">' + format_code(block).replace("\n", "<br>").replace("*", r"\*") + "</code></pre>" ) cleaned = cleaned.replace(f"$CODEBLOCK{num}", block.rstrip(" ")) if in_table: return f'<p class="methods">{cleaned}</p>' else: return cleaned
def format_doc(obj, in_table=False): doc = inspect.getdoc(obj) # if the object is a Class and doesn't implement an __init__, then we want to # "inherit" the doc of its immediate parent class. if inspect.isclass(obj): for parent in obj.mro()[1:]: # first object in MRO is the class itself if obj.__init__ is parent.__init__: try: parent_name = create_absolute_path(parent) except: parent_name = parent.__name__ doc = "\n\n".join([ doc, f"#### Parent Class Documentation (`{parent_name}`):", format_doc(parent, in_table=in_table), ]) body = doc or "" code_blocks = re.findall(r"```(.*?)```", body, re.DOTALL) for num, block in enumerate(code_blocks): body = body.replace(block, f"$CODEBLOCK{num}", 1) body = re.sub("(?<!\n)\n{1}(?!\n)", " ", format_lists(body)) # removes poorly placed newlines body = body.replace("```", "\n```") lines = body.split("\n") cleaned = "\n".join([clean_line(line) for line in lines]) if in_table: cleaned = cleaned.replace("\n", "<br>").replace("```", "") for num, block in enumerate(code_blocks): if in_table: block = block[block.startswith("python") and 6:].lstrip("\n") block = ( '<pre class="language-python"><code class="language-python">' + format_code(block).replace("\n", "<br>").replace("*", "\*") + "</code></pre>") cleaned = cleaned.replace(f"$CODEBLOCK{num}", block.rstrip(" ")) if in_table: return f'<p class="methods">{cleaned}</p>' else: return cleaned