Skip to content

Commit 7dc5b71

Browse files
glemaitrekeewis
andauthored
FIX adapt code for sphinx 8.2.0 app -> registry (#145)
* FIX adapt code for sphinx 8.2.0 app -> registry * stay backwards-compatible * test on `sphinx=8.2` * don't test `sphinx>=8` on `python=3.9` * use `env` instead of `app` directly * try passing `events` and `config` * fetch `events` from the right object * unpin `sphinx` when building the docs [skip-ci] --------- Co-authored-by: Justus Magin <[email protected]>
1 parent 73ac9a2 commit 7dc5b71

File tree

4 files changed

+80
-33
lines changed

4 files changed

+80
-33
lines changed

.github/workflows/ci.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ jobs:
1515
fail-fast: false
1616
matrix:
1717
python-version: ["3.9", "3.12", "3.13"]
18-
sphinx-version: ["5.3", "6.2", "7.3", "7.4", "8.0", "8.1"]
18+
sphinx-version: ["5.3", "6.2", "7.3", "7.4", "8.0", "8.1", "8.2"]
1919
exclude:
2020
# sphinx>=8 requires at least python 3.10
2121
- python-version: "3.9"
2222
sphinx-version: "8.0"
2323
- python-version: "3.9"
2424
sphinx-version: "8.1"
25+
- python-version: "3.9"
26+
sphinx-version: "8.2"
2527
# sphinx<6.2 uses imghdr, which was removed in python 3.13
2628
- python-version: "3.13"
2729
sphinx-version: "5.3"

docs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
packaging
2-
sphinx>=6,<8.2
2+
sphinx>=6
33
sphinx_rtd_theme

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ classifiers = [
1919
]
2020
dependencies = [
2121
"sphinx >= 5.3",
22+
"packaging",
2223
]
2324
dynamic = ["version"]
2425

Lines changed: 75 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import re
22

3+
import sphinx
4+
from packaging import version
35
from sphinx.ext.autosummary import Autosummary, generate
46

57
from sphinx_autosummary_accessors.templates import known_templates
@@ -19,34 +21,76 @@ def extract_documenter(content):
1921
return directive_name, "::".join([modname, name])
2022

2123

22-
def create_documenter_from_template(autosummary, app, obj, parent, full_name):
23-
real_name = ".".join(full_name.split("::"))
24-
25-
options = autosummary.options
26-
template_name = options.get("template", None)
27-
if template_name is None or template_name not in known_templates:
28-
return original_create_documenter(autosummary, app, obj, parent, full_name)
29-
30-
imported_members = options.get("imported_members", False)
31-
recursive = options.get("recursive", False)
32-
33-
context = {}
34-
context.update(app.config.autosummary_context)
35-
36-
rendered = generate.generate_autosummary_content(
37-
real_name,
38-
obj,
39-
parent,
40-
template=generate.AutosummaryRenderer(app),
41-
template_name=template_name,
42-
app=app,
43-
context=context,
44-
imported_members=imported_members,
45-
recursive=recursive,
46-
)
47-
48-
documenter_name, real_name = extract_documenter(rendered)
49-
doccls = app.registry.documenters.get(documenter_name)
50-
documenter = doccls(autosummary.bridge, real_name)
51-
52-
return documenter
24+
if version.parse(sphinx.__version__) >= version.Version("8.2.0"):
25+
26+
def create_documenter_from_template(
27+
autosummary, obj, parent, full_name, *, registry
28+
):
29+
real_name = ".".join(full_name.split("::"))
30+
31+
options = autosummary.options
32+
template_name = options.get("template", None)
33+
if template_name is None or template_name not in known_templates:
34+
return original_create_documenter(
35+
autosummary, obj, parent, full_name, registry=registry
36+
)
37+
38+
imported_members = options.get("imported_members", False)
39+
recursive = options.get("recursive", False)
40+
41+
context = {}
42+
context.update(autosummary.env.config.autosummary_context)
43+
44+
rendered = generate.generate_autosummary_content(
45+
real_name,
46+
obj,
47+
parent,
48+
template=generate.AutosummaryRenderer(autosummary.env.app),
49+
template_name=template_name,
50+
context=context,
51+
imported_members=imported_members,
52+
recursive=recursive,
53+
registry=registry,
54+
events=autosummary.env.events,
55+
config=autosummary.env.config,
56+
)
57+
58+
documenter_name, real_name = extract_documenter(rendered)
59+
doccls = registry.documenters.get(documenter_name)
60+
documenter = doccls(autosummary.bridge, real_name)
61+
62+
return documenter
63+
64+
else:
65+
66+
def create_documenter_from_template(autosummary, app, obj, parent, full_name):
67+
real_name = ".".join(full_name.split("::"))
68+
69+
options = autosummary.options
70+
template_name = options.get("template", None)
71+
if template_name is None or template_name not in known_templates:
72+
return original_create_documenter(autosummary, app, obj, parent, full_name)
73+
74+
imported_members = options.get("imported_members", False)
75+
recursive = options.get("recursive", False)
76+
77+
context = {}
78+
context.update(app.config.autosummary_context)
79+
80+
rendered = generate.generate_autosummary_content(
81+
real_name,
82+
obj,
83+
parent,
84+
template=generate.AutosummaryRenderer(app),
85+
template_name=template_name,
86+
app=app,
87+
context=context,
88+
imported_members=imported_members,
89+
recursive=recursive,
90+
)
91+
92+
documenter_name, real_name = extract_documenter(rendered)
93+
doccls = app.registry.documenters.get(documenter_name)
94+
documenter = doccls(autosummary.bridge, real_name)
95+
96+
return documenter

0 commit comments

Comments
 (0)