PEP 676: Use `docutils.nodes.Node.findall` (#2363)
This commit is contained in:
parent
99bb6aa4b9
commit
94225885de
|
@ -6,6 +6,7 @@ import datetime
|
||||||
import email.utils
|
import email.utils
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import docutils
|
||||||
from docutils import frontend
|
from docutils import frontend
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils import utils
|
from docutils import utils
|
||||||
|
@ -19,6 +20,14 @@ def _format_rfc_2822(dt: datetime.datetime) -> str:
|
||||||
return email.utils.format_datetime(dt, usegmt=True)
|
return email.utils.format_datetime(dt, usegmt=True)
|
||||||
|
|
||||||
|
|
||||||
|
# Monkeypatch nodes.Node.findall for forwards compatability
|
||||||
|
if docutils.__version_info__ < (0, 18):
|
||||||
|
def findall(self, *args, **kwargs):
|
||||||
|
return iter(self.traverse(*args, **kwargs))
|
||||||
|
|
||||||
|
nodes.Node.findall = findall
|
||||||
|
|
||||||
|
|
||||||
entry.formatRFC2822 = feed.formatRFC2822 = _format_rfc_2822
|
entry.formatRFC2822 = feed.formatRFC2822 = _format_rfc_2822
|
||||||
line_cache: dict[Path, dict[str, str]] = {}
|
line_cache: dict[Path, dict[str, str]] = {}
|
||||||
|
|
||||||
|
@ -62,8 +71,7 @@ def parse_rst(text: str) -> nodes.document:
|
||||||
def pep_abstract(full_path: Path) -> str:
|
def pep_abstract(full_path: Path) -> str:
|
||||||
"""Return the first paragraph of the PEP abstract"""
|
"""Return the first paragraph of the PEP abstract"""
|
||||||
text = full_path.read_text(encoding="utf-8")
|
text = full_path.read_text(encoding="utf-8")
|
||||||
# TODO replace .traverse with .findall when Sphinx updates to docutils>=0.18.1
|
for node in parse_rst(text).findall(nodes.section):
|
||||||
for node in parse_rst(text).traverse(nodes.section):
|
|
||||||
if node.next_node(nodes.title).astext() == "Abstract":
|
if node.next_node(nodes.title).astext() == "Abstract":
|
||||||
return node.next_node(nodes.paragraph).astext().strip().replace("\n", " ")
|
return node.next_node(nodes.paragraph).astext().strip().replace("\n", " ")
|
||||||
return ""
|
return ""
|
||||||
|
|
|
@ -38,7 +38,7 @@ class FileBuilder(StandaloneHTMLBuilder):
|
||||||
toc_tree = self.env.tocs[docname].deepcopy()
|
toc_tree = self.env.tocs[docname].deepcopy()
|
||||||
if len(toc_tree[0]) > 1:
|
if len(toc_tree[0]) > 1:
|
||||||
toc_tree = toc_tree[0][1] # don't include document title
|
toc_tree = toc_tree[0][1] # don't include document title
|
||||||
for node in toc_tree.traverse(nodes.reference):
|
for node in toc_tree.findall(nodes.reference):
|
||||||
node["refuri"] = node["anchorname"] or '#' # fix targets
|
node["refuri"] = node["anchorname"] or '#' # fix targets
|
||||||
toc = self.render_partial(toc_tree)["fragment"]
|
toc = self.render_partial(toc_tree)["fragment"]
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue