blob: 4f8d9f157ad4a7300a06f8edb05fc968a65a4905 [file] [log] [blame] [edit]
from pathlib import Path
import importlib.metadata
import re
ROOT = Path(__file__).parent.parent
PACKAGE_SRC = ROOT / "jsonschema"
project = "jsonschema"
author = "Julian Berman"
copyright = "2013, " + author
release = importlib.metadata.version("jsonschema")
version = release.partition("-")[0]
language = "en"
default_role = "any"
extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.autosectionlabel",
"sphinx.ext.coverage",
"sphinx.ext.doctest",
"sphinx.ext.extlinks",
"sphinx.ext.imgconverter",
"sphinx.ext.intersphinx",
"sphinx.ext.napoleon",
"sphinx.ext.viewcode",
"sphinx_copybutton",
"sphinx_json_schema_spec",
"sphinxcontrib.spelling",
"sphinxext.opengraph",
]
cache_path = "_cache"
pygments_style = "lovelace"
pygments_dark_style = "one-dark"
html_theme = "furo"
# See sphinx-doc/sphinx#10785
_TYPE_ALIASES = {
"jsonschema._format._F": ("data", "_F"),
"_typing.id_of": ("data", "jsonschema._typing.id_of"),
}
def _resolve_broken_refs(app, env, node, contnode):
if node["refdomain"] != "py":
return
if node["reftarget"].startswith("referencing."): # :( :( :( :( :(
node["reftype"] = "data"
from sphinx.ext import intersphinx
return intersphinx.resolve_reference_in_inventory(
env, "referencing", node, contnode,
)
kind, target = _TYPE_ALIASES.get(node["reftarget"], (None, None))
if kind is not None:
return app.env.get_domain("py").resolve_xref(
env,
node["refdoc"],
app.builder,
kind,
target,
node,
contnode,
)
def setup(app):
app.connect("missing-reference", _resolve_broken_refs)
# = Builders =
doctest_global_setup = """
from jsonschema import *
from jsonschema import exceptions
import jsonschema.validators
"""
def entire_domain(host):
return r"http.?://" + re.escape(host) + r"($|/.*)"
linkcheck_ignore = [
entire_domain("img.shields.io"),
"https://github.com/python-jsonschema/jsonschema/actions",
"https://github.com/python-jsonschema/jsonschema/workflows/CI/badge.svg",
]
# = Extensions =
# -- autoapi --
suppress_warnings = [
"autoapi.python_import_resolution",
"autoapi.toc_reference",
"epub.duplicated_toc_entry",
]
autoapi_root = "api"
autoapi_ignore = [
"*/_[a-z]*.py",
"*/__main__.py",
"*/benchmarks/*",
"*/cli.py",
"*/tests/*",
]
autoapi_options = [
"members",
"undoc-members",
"show-module-summary",
"imported-members",
]
autoapi_type = "python"
autoapi_dirs = [PACKAGE_SRC]
# -- autosectionlabel --
autosectionlabel_prefix_document = True
# -- intersphinx --
intersphinx_mapping = {
"python": ("https://docs.python.org/3", None),
"referencing": ("https://referencing.readthedocs.io/en/stable/", None),
}
# -- extlinks --
extlinks = {
"ujs": ("https://json-schema.org/understanding-json-schema%s", None),
}
extlinks_detect_hardcoded_links = True
# -- sphinx-copybutton --
copybutton_prompt_text = r">>> |\.\.\. |\$"
copybutton_prompt_is_regexp = True
# -- sphinxcontrib-spelling --
spelling_word_list_filename = "spelling-wordlist.txt"
spelling_show_suggestions = True