Path: blob/develop/src/sage_docbuild/ext/inventory_builder.py
6378 views
"""1Inventory builder23A customized builder which only generates intersphinx "object.inv"4inventory files. The documentation files are not written.5"""6from __future__ import annotations78from os import path9from pathlib import Path10from typing import TYPE_CHECKING, Any11from urllib.parse import quote1213from sphinx.builders.dummy import DummyBuilder14from sphinx.util.inventory import InventoryFile1516if TYPE_CHECKING:17from collections.abc import Iterable1819from sphinx.application import Sphinx2021INVENTORY_FILENAME = "objects.inv"222324class InventoryBuilder(DummyBuilder):25"""26A customized builder which only generates intersphinx "object.inv"27inventory files. The documentation files are not written.28"""29name = "inventory"30format = "inventory"31epilog = "The inventory file is in %(outdir)s."3233def get_outdated_docs(self) -> Iterable[str]:34"""35Return an iterable of output files that are outdated.36"""37assert self.env is not None3839for docname in self.env.found_docs:40if docname not in self.env.all_docs:41yield docname42continue43targetname = path.join(self.outdir, INVENTORY_FILENAME)44try:45targetmtime = path.getmtime(targetname)46except Exception:47targetmtime = 048try:49srcmtime = path.getmtime(self.env.doc2path(docname))50if srcmtime > targetmtime:51yield docname52except OSError:53# source doesn't exist anymore54pass5556def get_target_uri(self, docname: str, typ: str | None = None) -> str:57"""58Return the target URI for a document name.59"""60return quote(docname) + ".html"6162def finish(self) -> None:63"""64Only write the inventory files.65"""66assert self.env is not None6768Path(self.outdir).mkdir(parents=True, exist_ok=True)69InventoryFile.dump(70path.join(self.outdir, INVENTORY_FILENAME), self.env, self71)727374def setup(app: Sphinx) -> dict[str, Any]:75app.add_builder(InventoryBuilder)76return {"parallel_read_safe": True}777879