Coverage for structured_tutorials / sphinx / __init__.py: 100%

16 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-21 19:08 +0100

1"""Sphinx extension for rendering tutorials.""" 

2 

3from pathlib import Path 

4 

5from sphinx.application import Sphinx 

6from sphinx.errors import ExtensionError 

7from sphinx.util.typing import ExtensionMetadata 

8 

9from structured_tutorials import __version__ 

10from structured_tutorials.sphinx.directives import PartDirective, TutorialDirective 

11from structured_tutorials.sphinx.utils import validate_configuration 

12 

13 

14def setup(app: Sphinx) -> ExtensionMetadata: 

15 """Sphinx setup function.""" 

16 # Add dependency on other extension: 

17 # app.setup_extension("sphinx.ext.autodoc") 

18 app.connect("config-inited", validate_configuration) 

19 app.add_config_value("tutorial_root", Path(app.srcdir), "env", types=[Path]) 

20 app.add_config_value("structured_tutorial_command_text_width", 75, "env", types=[int]) 

21 

22 app.add_directive("structured-tutorial", TutorialDirective) 

23 app.add_directive("structured-tutorial-part", PartDirective) 

24 

25 try: 

26 app.setup_extension("sphinx_inline_tabs") 

27 except Exception as exc: # pragma: no cover 

28 raise ExtensionError("structured_tutorials requires sphinx_inline_tabs") from exc 

29 

30 # return metadata 

31 return { 

32 "version": __version__, 

33 "parallel_read_safe": True, 

34 "parallel_write_safe": True, 

35 }