import datetime import os from pkg_resources import get_distribution extensions = ["sphinx.ext.autodoc"] templates_path = ["_templates"] source_suffix = ".rst" master_doc = "index" project = "vdirsyncer" copyright = "2014-{}, Markus Unterwaditzer & contributors".format( datetime.date.today().strftime("%Y") ) release = get_distribution("vdirsyncer").version version = ".".join(release.split(".")[:2]) # The short X.Y version. rst_epilog = ".. |vdirsyncer_version| replace:: %s" % release exclude_patterns = ["_build"] pygments_style = "sphinx" on_rtd = os.environ.get("READTHEDOCS", None) == "True" try: import sphinx_rtd_theme html_theme = "sphinx_rtd_theme" html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] except ImportError: html_theme = "default" if not on_rtd: print("-" * 74) print( "Warning: sphinx-rtd-theme not installed, building with default " "theme." ) print("-" * 74) html_static_path = ["_static"] htmlhelp_basename = "vdirsyncerdoc" latex_elements = {} latex_documents = [ ( "index", "vdirsyncer.tex", "vdirsyncer Documentation", "Markus Unterwaditzer", "manual", ), ] man_pages = [ ("index", "vdirsyncer", "vdirsyncer Documentation", ["Markus Unterwaditzer"], 1) ] texinfo_documents = [ ( "index", "vdirsyncer", "vdirsyncer Documentation", "Markus Unterwaditzer", "vdirsyncer", "Synchronize calendars and contacts.", "Miscellaneous", ), ] def github_issue_role(name, rawtext, text, lineno, inliner, options=None, content=()): options = options or {} try: issue_num = int(text) if issue_num <= 0: raise ValueError() except ValueError: msg = inliner.reporter.error(f"Invalid GitHub issue: {text}", line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] from docutils import nodes PROJECT_HOME = "https://github.com/pimutils/vdirsyncer" link = "{}/{}/{}".format( PROJECT_HOME, "issues" if name == "gh" else "pull", issue_num ) linktext = ("issue #{}" if name == "gh" else "pull request #{}").format(issue_num) node = nodes.reference(rawtext, linktext, refuri=link, **options) return [node], [] def setup(app): from sphinx.domains.python import PyObject app.add_object_type( "storage", "storage", "pair: %s; storage", doc_field_types=PyObject.doc_field_types, ) app.add_role("gh", github_issue_role) app.add_role("ghpr", github_issue_role)