Exemple #1
0
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
Exemple #2
0
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