Source code for medikit.feature.sphinx
from pip._vendor.distlib.util import parse_requirement
from medikit.events import subscribe
from . import SUPPORT_PRIORITY, Feature
[docs]class SphinxConfig(Feature.Config):
def __init__(self):
self._theme = None
[docs] def set_theme(self, theme):
"""
Sets the theme. Prefer using the .theme property.
:param theme: Requirement for theme
"""
self._theme = parse_requirement(theme)
[docs] def get_theme(self):
"""
Gets the theme. Prefer using the .theme property.
:return: parsed requirement
"""
return self._theme
theme = property(
fget=get_theme, fset=set_theme, doc="Sphinx theme to use, that should be parsable as a requirement."
)
[docs]class SphinxFeature(Feature):
Config = SphinxConfig
[docs] @subscribe("medikit.feature.python.on_generate")
def on_python_generate(self, event):
event.config["python"].add_requirements(dev=["sphinx ~=1.7"])
theme = event.config["sphinx"].get_theme()
if theme:
event.config["python"].add_requirements(dev=[theme.requirement])
[docs] @subscribe("medikit.feature.make.on_generate", priority=SUPPORT_PRIORITY)
def on_make_generate(self, event):
makefile = event.makefile
makefile["SPHINX_BUILD"] = "$(PYTHON_DIRNAME)/sphinx-build"
makefile["SPHINX_OPTIONS"] = ""
makefile["SPHINX_SOURCEDIR"] = "docs"
makefile["SPHINX_BUILDDIR"] = "$(SPHINX_SOURCEDIR)/_build"
makefile.add_target(
"$(SPHINX_SOURCEDIR)",
"""
$(SPHINX_BUILD) -b html -D latex_paper_size=a4 $(SPHINX_OPTIONS) $(SPHINX_SOURCEDIR) $(SPHINX_BUILDDIR)/html
""",
deps=("install-dev",),
phony=True,
)