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

17 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-26 12:41 +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("structured_tutorials_root", Path(app.srcdir), "env", types=[Path]) 

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

21 app.add_config_value("structured_tutorials_context", {}, "env", types=[dict]) 

22 

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

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

25 

26 try: 

27 app.setup_extension("sphinx_inline_tabs") 

28 except Exception as exc: # pragma: no cover 

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

30 

31 # return metadata 

32 return { 

33 "version": __version__, 

34 "parallel_read_safe": True, 

35 "parallel_write_safe": True, 

36 }