|
"""Configuration file for the Sphinx documentation builder. |
|
|
|
This file only contains a selection of the most common options. For a full |
|
list see the documentation: |
|
https://www.sphinx-doc.org/en/master/usage/configuration.html |
|
""" |
|
|
|
|
|
import os |
|
import sys |
|
import inspect |
|
import warnings |
|
|
|
from pathlib import Path |
|
from typing import Any, Dict |
|
|
|
import openfactcheck |
|
from sphinx.application import Sphinx |
|
from sphinx.locale import _ |
|
|
|
sys.path.insert(0, os.path.abspath('../../src/openfactcheck')) |
|
sys.path.append(str(Path(".").resolve())) |
|
|
|
|
|
|
|
project = 'OpenFactCheck' |
|
copyright = '2024, MBZUAI' |
|
author = 'OpenFactCheck Team and Contributors' |
|
|
|
|
|
|
|
extensions = [ |
|
"sphinx.ext.napoleon", |
|
"sphinx.ext.autodoc", |
|
"sphinx.ext.autosummary", |
|
"sphinx.ext.todo", |
|
"sphinx.ext.viewcode", |
|
"sphinx.ext.intersphinx", |
|
"sphinx.ext.graphviz", |
|
"sphinx.ext.linkcode", |
|
"sphinx.ext.coverage", |
|
"sphinx.ext.doctest", |
|
"sphinx.ext.extlinks", |
|
"sphinx.ext.ifconfig", |
|
"sphinx.ext.mathjax", |
|
"sphinxext.rediraffe", |
|
"sphinx_design", |
|
"sphinx_copybutton", |
|
"sphinx_togglebutton", |
|
"sphinx_favicon", |
|
"myst_parser", |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"_extension.gallery_directive", |
|
"_extension.component_directive", |
|
] |
|
|
|
|
|
|
|
|
|
templates_path = ["_templates"] |
|
|
|
|
|
|
|
|
|
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "**.ipynb_checkpoints"] |
|
|
|
intersphinx_mapping = {"sphinx": ("https://www.sphinx-doc.org/en/master", None)} |
|
|
|
|
|
|
|
|
|
if not os.environ.get("READTHEDOCS"): |
|
extensions += ["sphinx_sitemap"] |
|
|
|
html_baseurl = os.environ.get("SITEMAP_URL_BASE", "http://127.0.0.1:8000/") |
|
sitemap_locales = [None] |
|
sitemap_url_scheme = "{link}" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
language = "en" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
graphviz_output_format = "svg" |
|
inheritance_graph_attrs = dict( |
|
rankdir="LR", |
|
fontsize=14, |
|
ratio="compress", |
|
) |
|
|
|
|
|
togglebutton_hint = str(_("Click to expand")) |
|
togglebutton_hint_hide = str(_("Click to collapse")) |
|
|
|
|
|
|
|
|
|
|
|
copybutton_selector = ":not(.prompt) > div.highlight pre" |
|
|
|
|
|
|
|
html_theme = "pydata_sphinx_theme" |
|
html_logo = "_static/logo/logo.svg" |
|
html_favicon = "_static/favicon.svg" |
|
html_sourcelink_suffix = "" |
|
html_last_updated_fmt = "" |
|
|
|
|
|
json_url = "https://openfactcheck.readthedocs.io/en/latest/_static/versions.json" |
|
|
|
|
|
version_match = os.environ.get("READTHEDOCS_VERSION") |
|
release = openfactcheck.__version__ |
|
|
|
|
|
|
|
|
|
if not version_match or version_match.isdigit() or version_match == "latest": |
|
|
|
if "dev" in release or "rc" in release: |
|
version_match = "dev" |
|
|
|
|
|
json_url = "_static/versions.json" |
|
else: |
|
version_match = f"v{release}" |
|
elif version_match == "stable": |
|
version_match = f"v{release}" |
|
|
|
html_theme_options = { |
|
"external_links": [], |
|
"header_links_before_dropdown": 4, |
|
"icon_links": [ |
|
{ |
|
"name": "GitHub", |
|
"url": "https://github.com/hasaniqbal777/openfactcheck", |
|
"icon": "fa-brands fa-github", |
|
}, |
|
{ |
|
"name": "PyPI", |
|
"url": "https://pypi.org/project/openfactcheck", |
|
"icon": "fa-custom fa-pypi", |
|
}, |
|
{ |
|
"name": "HuggingFace Space", |
|
"url": "https://huggingface.co/spaces/hasaniqbal777/OpenFactCheck", |
|
"icon": "fa-solid fa-rocket", |
|
}, |
|
], |
|
|
|
|
|
|
|
"logo": { |
|
"image_light": "_static/logo/logo_dark.svg", |
|
"image_dark": "_static/logo/logo_light.svg", |
|
}, |
|
"use_edit_page_button": True, |
|
"show_toc_level": 1, |
|
"navbar_align": "left", |
|
|
|
|
|
"show_version_warning_banner": True, |
|
|
|
|
|
"navbar_end": ["version-switcher", "theme-switcher", "navbar-icon-links"], |
|
|
|
"primary_sidebar_end": ["sidebar-ethical-ads"], |
|
|
|
|
|
"footer_start": ["copyright"], |
|
|
|
"secondary_sidebar_items": { |
|
"**/*": ["page-toc", "edit-this-page", "sourcelink"], |
|
"examples/no-sidebar": [], |
|
}, |
|
"switcher": { |
|
"json_url": json_url, |
|
"version_match": version_match, |
|
}, |
|
"back_to_top_button": False, |
|
} |
|
|
|
html_context = { |
|
"github_user": "hasaniqbal777", |
|
"github_repo": "openfactcheck", |
|
"github_version": "main", |
|
"doc_path": "docs", |
|
} |
|
|
|
|
|
|
|
|
|
html_static_path = ["_static"] |
|
html_css_files = [ |
|
"_css/custom.css", |
|
] |
|
html_js_files = ["custom-icons.js"] |
|
todo_include_todos = True |
|
|
|
|
|
rediraffe_redirects = {} |
|
|
|
|
|
|
|
|
|
|
|
favicons = [ |
|
|
|
"favicon-32x32.png", |
|
"favicon-16x16.png", |
|
{"rel": "shortcut icon", "sizes": "any", "href": "favicon.ico"}, |
|
|
|
"android-chrome-192x192.png", |
|
"android-chrome-512x512.png", |
|
|
|
{"rel": "mask-icon", "href": "favicon.svg"}, |
|
{"rel": "apple-touch-icon", "href": "apple-touch-icon.png"} |
|
] |
|
|
|
|
|
autosummary_generate = True |
|
autodoc_typehints = "description" |
|
autodoc_member_order = "groupwise" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def linkcode_resolve(domain, info) -> str | None: |
|
""" |
|
Determine the URL corresponding to Python object |
|
""" |
|
if domain != "py": |
|
return None |
|
|
|
modname = info["module"] |
|
fullname = info["fullname"] |
|
|
|
submod = sys.modules.get(modname) |
|
if submod is None: |
|
return None |
|
|
|
obj = submod |
|
for part in fullname.split("."): |
|
try: |
|
with warnings.catch_warnings(): |
|
|
|
warnings.simplefilter("ignore", FutureWarning) |
|
obj = getattr(obj, part) |
|
except AttributeError: |
|
return None |
|
|
|
try: |
|
fn = inspect.getsourcefile(inspect.unwrap(obj)) |
|
except TypeError: |
|
try: |
|
fn = inspect.getsourcefile(inspect.unwrap(obj.fget)) |
|
except (AttributeError, TypeError): |
|
fn = None |
|
if not fn: |
|
return None |
|
|
|
try: |
|
source, lineno = inspect.getsourcelines(obj) |
|
except TypeError: |
|
try: |
|
source, lineno = inspect.getsourcelines(obj.fget) |
|
except (AttributeError, TypeError): |
|
lineno = None |
|
except OSError: |
|
lineno = None |
|
|
|
if lineno: |
|
linespec = f"#L{lineno}-L{lineno + len(source) - 1}" |
|
else: |
|
linespec = "" |
|
|
|
fn = os.path.relpath(fn, start=os.path.dirname(openfactcheck.__file__)) |
|
|
|
if "+" in openfactcheck.__version__: |
|
return f"https://github.com/hasaniqbal777/openfactcheck/blob/main/src/openfactcheck/{fn}{linespec}" |
|
else: |
|
return ( |
|
f"https://github.com/hasaniqbal777/openfactcheck/blob/" |
|
f"v{openfactcheck.__version__}/src/openfactcheck/{fn}{linespec}" |
|
) |
|
|
|
def setup_to_main( |
|
app: Sphinx, pagename: str, templatename: str, context, doctree |
|
) -> None: |
|
"""Add a function that jinja can access for returning an "edit this page" link pointing to `main`.""" |
|
|
|
def to_main(link: str) -> str: |
|
"""Transform "edit on github" links and make sure they always point to the main branch. |
|
|
|
Args: |
|
link: the link to the github edit interface |
|
|
|
Returns: |
|
the link to the tip of the main branch for the same file |
|
""" |
|
links = link.split("/") |
|
idx = links.index("edit") |
|
return "/".join(links[: idx + 1]) + "/main/" + "/".join(links[idx + 2 :]) |
|
|
|
context["to_main"] = to_main |
|
|
|
def setup(app: Sphinx) -> Dict[str, Any]: |
|
"""Add custom configuration to sphinx app. |
|
|
|
Args: |
|
app: the Sphinx application |
|
Returns: |
|
the 2 parallel parameters set to ``True``. |
|
""" |
|
app.connect("html-page-context", setup_to_main) |
|
|
|
return { |
|
"parallel_read_safe": True, |
|
"parallel_write_safe": True, |
|
} |