| 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 = { | |
| # the type parameter of the format checker decorators | |
| "F": ("data", "jsonschema._format._FormatCheckCallable"), | |
| "_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("zenodo.org"), | |
| entire_domain("img.shields.io"), | |
| entire_domain("json-schema.slack.com"), | |
| "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 |