Skip to content

Commit 02b70b3

Browse files
Merge branch 'main' into main
2 parents 9957458 + d15aede commit 02b70b3

12 files changed

Lines changed: 115 additions & 67 deletions

docs/extensions/array_support.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from docutils import nodes
99
from sphinx.util.docutils import SphinxDirective
10+
from sphinx.util.typing import ExtensionMetadata
1011

1112
from scanpy._utils import _docs
1213

@@ -179,7 +180,8 @@ def one[T](arg: Collection[T]) -> T | None:
179180
return item
180181

181182

182-
def setup(app: Sphinx) -> None:
183+
def setup(app: Sphinx) -> ExtensionMetadata:
183184
"""App setup hook."""
184185
app.add_directive("array-support", ArraySupport)
185186
app.add_config_value("array_support", {}, "env")
187+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/autosummary_skip_deprecated.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
from typing import TYPE_CHECKING
66

7+
from sphinx.util.typing import ExtensionMetadata
8+
79
if TYPE_CHECKING:
810
from typing import Literal
911

@@ -27,6 +29,7 @@ def skip_deprecated( # noqa: PLR0917
2729
return None
2830

2931

30-
def setup(app: Sphinx) -> None:
32+
def setup(app: Sphinx) -> ExtensionMetadata:
3133
"""App setup hook."""
3234
app.connect("autodoc-skip-member", skip_deprecated)
35+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/autosummary_skip_inherited.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from traceback import walk_stack
66
from typing import TYPE_CHECKING
77

8+
from sphinx.util.typing import ExtensionMetadata
9+
810
if TYPE_CHECKING:
911
from typing import Literal
1012

@@ -54,6 +56,7 @@ def skip_inherited( # noqa: PLR0917
5456
return True
5557

5658

57-
def setup(app: Sphinx) -> None:
59+
def setup(app: Sphinx) -> ExtensionMetadata:
5860
"""App setup hook."""
5961
app.connect("autodoc-skip-member", skip_inherited)
62+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/canonical_tutorial.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import TYPE_CHECKING
66

77
from sphinx.util.docutils import SphinxDirective
8+
from sphinx.util.typing import ExtensionMetadata
89

910
if TYPE_CHECKING:
1011
from typing import ClassVar
@@ -22,6 +23,7 @@ def run(self) -> list[nodes.Node]: # noqa: D102
2223
return []
2324

2425

25-
def setup(app: Sphinx) -> None:
26+
def setup(app: Sphinx) -> ExtensionMetadata:
2627
"""App setup hook."""
2728
app.add_directive("canonical-tutorial", CanonicalTutorial)
29+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/debug_docstrings.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
from typing import TYPE_CHECKING
99

1010
import sphinx.ext.napoleon
11+
from sphinx.util.typing import ExtensionMetadata
1112

1213
if TYPE_CHECKING:
1314
from sphinx.application import Sphinx
1415

16+
1517
_pd_orig = sphinx.ext.napoleon._process_docstring
1618

1719

@@ -21,7 +23,8 @@ def pd_new(app, what, name, obj, options, lines) -> None: # noqa: PLR0917
2123
print(*lines, sep="\n")
2224

2325

24-
def setup(app: Sphinx) -> None:
26+
def setup(app: Sphinx) -> ExtensionMetadata:
2527
"""App setup hook."""
2628
if os.environ.get("DEBUG") is not None:
2729
sphinx.ext.napoleon._process_docstring = pd_new
30+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/function_images.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from pathlib import Path
66
from typing import TYPE_CHECKING
77

8+
from sphinx.util.typing import ExtensionMetadata
9+
810
if TYPE_CHECKING:
911
from typing import Any
1012

@@ -27,7 +29,8 @@ def insert_function_images( # noqa: PLR0917
2729
]
2830

2931

30-
def setup(app: Sphinx) -> None:
32+
def setup(app: Sphinx) -> ExtensionMetadata:
3133
"""App setup hook."""
3234
app.add_config_value("api_dir", Path(), "env")
3335
app.connect("autodoc-process-docstring", insert_function_images)
36+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/git_ref.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from functools import lru_cache
88
from typing import TYPE_CHECKING
99

10+
from sphinx.util.typing import ExtensionMetadata
11+
1012
if TYPE_CHECKING:
1113
from sphinx.application import Sphinx
1214
from sphinx.config import Config
@@ -45,6 +47,7 @@ def set_ref(app: Sphinx, config: Config):
4547
app.config["html_theme_options"]["repository_branch"] = get() or "main"
4648

4749

48-
def setup(app: Sphinx) -> None:
50+
def setup(app: Sphinx) -> ExtensionMetadata:
4951
"""App setup hook."""
5052
app.connect("config-inited", set_ref)
53+
return ExtensionMetadata(parallel_read_safe=True)
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
"""Extension to patch ignored mime types."""
2+
3+
from __future__ import annotations
4+
5+
import sys
6+
from importlib.abc import MetaPathFinder
7+
from importlib.metadata import Distribution, EntryPoint, EntryPoints
8+
from types import MappingProxyType
9+
from typing import TYPE_CHECKING, override
10+
11+
from myst_nb.core.render import MimeRenderPlugin
12+
from sphinx.util.typing import ExtensionMetadata
13+
14+
if TYPE_CHECKING:
15+
import os
16+
from collections.abc import Iterable, Sequence
17+
from importlib.machinery import ModuleSpec
18+
from importlib.metadata import DistributionFinder, SimplePath
19+
from types import ModuleType
20+
21+
from docutils import nodes
22+
from myst_nb.core.render import MimeData, NbElementRenderer
23+
from sphinx.application import Sphinx
24+
25+
26+
ignore: set[str] = set()
27+
28+
29+
class _Ignore(MimeRenderPlugin):
30+
@override
31+
@staticmethod
32+
def handle_mime(
33+
renderer: NbElementRenderer, data: MimeData, inline: bool
34+
) -> None | list[nodes.Element]:
35+
if data.mime_type in ignore:
36+
return [] # returning a list instead of `None` means “we handled it”
37+
return None
38+
39+
40+
class _IgnoreMimeDist(Distribution):
41+
metadata = MappingProxyType(dict(Name=__name__, Version="0.0.0"))
42+
43+
@override
44+
def read_text(self, filename: str) -> str | None:
45+
return None
46+
47+
@override
48+
def locate_file(self, path: str | os.PathLike[str]) -> SimplePath:
49+
raise RuntimeError
50+
51+
@property
52+
@override
53+
def entry_points(self) -> EntryPoints:
54+
ep = EntryPoint("ignore", f"{__name__}:_Ignore", "myst_nb.mime_renderers")
55+
return EntryPoints([ep])
56+
57+
58+
class _IgnoreMimeFinder(MetaPathFinder):
59+
def find_spec(
60+
self,
61+
fullname: str,
62+
path: Sequence[str] | None,
63+
target: ModuleType | None = None,
64+
) -> ModuleSpec | None:
65+
return None
66+
67+
def find_distributions(
68+
self, context: DistributionFinder.Context | None
69+
) -> Iterable[Distribution]:
70+
"""Find fake distribution."""
71+
yield _IgnoreMimeDist()
72+
73+
74+
def setup(app: Sphinx) -> ExtensionMetadata:
75+
"""App setup hook."""
76+
global ignore # noqa: PLW0603
77+
78+
app.add_config_value("myst_ignore_mime_types", [], "env")
79+
ignore |= set(app.config.myst_ignore_mime_types)
80+
81+
sys.meta_path.append(_IgnoreMimeFinder())
82+
83+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/param_police.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
from typing import TYPE_CHECKING
77

88
from sphinx.ext.napoleon import NumpyDocstring
9+
from sphinx.util.typing import ExtensionMetadata
910

1011
if TYPE_CHECKING:
1112
from sphinx.application import Sphinx
1213

14+
1315
_format_docutils_params_orig = NumpyDocstring._format_docutils_params
1416
param_warnings = {}
1517

@@ -46,7 +48,8 @@ def show_param_warnings(app, exception):
4648
raise RuntimeError(msg)
4749

4850

49-
def setup(app: Sphinx):
51+
def setup(app: Sphinx) -> ExtensionMetadata:
5052
"""App setup hook."""
5153
NumpyDocstring._format_docutils_params = scanpy_log_param_types
5254
app.connect("build-finished", show_param_warnings)
55+
return ExtensionMetadata(parallel_read_safe=True)

docs/extensions/patch_myst_nb.py

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)