leading docstring
add_parents function
add_parents source
def add_parents(tree: ast.AST) -> None: for node in ast.walk(tree): for child in ast.iter_child_nodes(node): child.parent = node if not hasattr(child, "parents"): child.parents = [node] child.parents.append(node) if isinstance(node, ast.ClassDef) and isinstance(child, ast.FunctionDef): child.type = "method" elif isinstance(child, ast.FunctionDef): child.type = "function" elif isinstance(child, ast.ClassDef): child.type = "class"
glob function
finds k
Parameters
markata
the markata object
glob source
def glob(markata: "MarkataDocs") -> None: """ finds k ## Parameters `markata` the markata object """ markata.py_files = list(Path().glob("**/*.py")) content_directories = list(set([f.parent for f in markata.py_files])) if "content_directories" in markata.__dict__.keys(): markata.content_directories.extend(content_directories) else: markata.content_directories = content_directories try: ignore = markata.config["glob"]["use_gitignore"] or True except KeyError: ignore = True if ignore and (Path(".gitignore").exists() or Path(".markataignore").exists()): import pathspec lines = [] if Path(".gitignore").exists(): lines.extend(Path(".gitignore").read_text().splitlines()) if Path(".markataignore").exists(): lines.extend(Path(".markataignore").read_text().splitlines()) spec = pathspec.PathSpec.from_lines("gitwildmatch", lines) markata.py_files = [ file for file in markata.py_files if not spec.match_file(str(file)) ]
make_article function
make_article source
def make_article(markata: "Markata", file: Path) -> frontmatter.Post: raw_source = file.read_text() tree = ast.parse(raw_source) add_parents(tree) nodes = [ n for n in ast.walk(tree) if isinstance(n, ast.FunctionDef) or isinstance(n, ast.ClassDef) ] edit_link = ( str(markata.config.get("repo_url", "https://github.com/")) + "edit/" + str(markata.config.get("repo_branch", "main")) + "/" + str(file) ) slug = f"{file.parent}/{file.stem}".lstrip("/").lstrip("./") jinja_env = jinja2.Environment() article = jinja_env.from_string( (Path(__file__).parent / "default_doc_template.md").read_text() ).render( ast=ast, file=file, slug=slug, edit_link=edit_link, tree=tree, datetime=datetime, nodes=nodes, raw_source=raw_source, indent=textwrap.indent, ) return frontmatter.loads(article)
load function
similar to glob
load source
def load(markata: "MarkataDocs") -> None: """ similar to [glob](../glob) """ if "articles" not in markata.__dict__: markata.articles = [] for py_file in markata.py_files: markata.articles.append(make_article(markata, py_file))
MarkataDocs class
MarkataDocs source
class MarkataDocs(Markata): py_files: List = [] content_directories: List = []