Files
bonobo/bin/update_apidoc.py
2018-08-11 16:15:26 +02:00

67 lines
1.7 KiB
Python

import os
from jinja2 import DictLoader, Environment
__path__ = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__), ".."))
apidoc_root = "docs/reference/api"
class Module:
def __init__(self, name, title=None, *, automodule_options=None):
self.name = name
self.title = title or " ".join(map(str.title, self.name.split(".")[1:]))
self.automodule_options = automodule_options or list()
def __repr__(self):
return "<{} ({})>".format(self.title, self.name)
def asdict(self):
return {"name": self.name, "title": self.title, "automodule_options": self.automodule_options}
def get_path(self):
return os.path.join(__path__, apidoc_root, *self.name.split(".")) + ".rst"
modules = [
Module("bonobo", title="Bonobo"),
Module("bonobo.config"),
Module("bonobo.constants", automodule_options=["no-members"]),
Module("bonobo.execution"),
Module("bonobo.execution.contexts"),
Module("bonobo.execution.events"),
Module("bonobo.execution.strategies"),
Module("bonobo.util"),
]
def underlined_filter(txt, chr):
return txt + "\n" + chr * len(txt)
env = Environment(
loader=DictLoader(
{
"module": """
{{ (':mod:`'~title~' <'~name~'>`') | underlined('=') }}
.. currentmodule:: {{ name }}
:Module: :mod:`{{ name }}`
.. automodule:: {{ name }}
{% for opt in automodule_options %} :{{ opt }}:{{ "\n" }}{% endfor %}
"""[
1:-1
]
+ "\n"
}
)
)
env.filters["underlined"] = underlined_filter
for module in modules:
with open(module.get_path(), "w+") as f:
f.write(env.get_template("module").render(module.asdict()))