Coverage for src/jsoncrack_for_sphinx/core/extension.py: 100%

34 statements  

« prev     ^ index     » next       coverage.py v7.10.0, created at 2025-07-24 22:26 +0000

1""" 

2Main Sphinx extension module for JSONCrack JSON schema visualization. 

3""" 

4 

5import logging as std_logging 

6from pathlib import Path 

7from typing import Any, Dict 

8 

9from sphinx.application import Sphinx 

10from sphinx.util import logging 

11 

12from .autodoc import autodoc_process_docstring, autodoc_process_signature 

13from .directive import SchemaDirective 

14 

15logger = logging.getLogger(__name__) 

16 

17 

18def setup(app: Sphinx) -> Dict[str, Any]: 

19 """Set up the Sphinx extension.""" 

20 # Add configuration values for new structured config 

21 app.add_config_value("json_schema_dir", None, "env") 

22 app.add_config_value("jsoncrack_default_options", {}, "env") 

23 app.add_config_value("jsoncrack_debug_logging", False, "env") 

24 

25 # Add configuration values for backward compatibility 

26 app.add_config_value("jsoncrack_render_mode", "onclick", "env") 

27 app.add_config_value("jsoncrack_theme", None, "env") 

28 app.add_config_value("jsoncrack_direction", "RIGHT", "env") 

29 app.add_config_value("jsoncrack_height", "500", "env") 

30 app.add_config_value("jsoncrack_width", "100%", "env") 

31 app.add_config_value("jsoncrack_onscreen_threshold", 0.1, "env") 

32 app.add_config_value("jsoncrack_onscreen_margin", "50px", "env") 

33 app.add_config_value("jsoncrack_disable_autodoc", False, "env") 

34 app.add_config_value("jsoncrack_autodoc_ignore", [], "env") 

35 

36 # Configure logging level if debug is enabled 

37 if getattr(app.config, "jsoncrack_debug_logging", False): 

38 # Enable verbose logging 

39 std_logger = std_logging.getLogger("jsoncrack_for_sphinx") 

40 std_logger.setLevel(std_logging.DEBUG) 

41 logger.info("JSONCrack debug logging enabled") 

42 

43 # Add directive 

44 app.add_directive("schema", SchemaDirective) 

45 

46 # Connect to autodoc events 

47 app.connect("autodoc-process-signature", autodoc_process_signature) 

48 app.connect("autodoc-process-docstring", autodoc_process_docstring) 

49 

50 # Add CSS and JS for styling and functionality 

51 static_path = Path(__file__).parent.parent / "static" 

52 app.config.html_static_path.append(str(static_path)) 

53 app.add_css_file("jsoncrack-schema.css") 

54 app.add_js_file("jsoncrack-sphinx.js") 

55 

56 logger.info("JSONCrack Sphinx extension initialized") 

57 

58 return { 

59 "version": "0.1.0", 

60 "parallel_read_safe": True, 

61 "parallel_write_safe": True, 

62 }