Coverage for domain / outputs / json_handler.py: 100.00%

22 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-01-07 00:07 +0000

1"""JSON output handler.""" 

2import json 

3from pathlib import Path 

4from typing import List 

5from domain.core.output_handler import OutputHandler 

6 

7 

8class JSONHandler(OutputHandler): 

9 """Handler for saving content as JSON files.""" 

10 

11 def save(self, content: str, destination: Path) -> int: 

12 data = {"source": str(destination.name), "content": content} 

13 output_path = destination.with_suffix(".json") 

14 with open(output_path, 'w') as f: 

15 json.dump(data, f, indent=4) 

16 return output_path.stat().st_size 

17 

18 def save_multiple(self, contents: List[str], destination: Path, source_name: str) -> int: 

19 """Save each page/chapter as a separate numbered JSON file.""" 

20 stem = destination.stem 

21 parent = destination.parent 

22 total_size = 0 

23 

24 for idx, content in enumerate(contents, start=1): 

25 data = { 

26 "source": source_name, 

27 "page": idx, 

28 "content": content 

29 } 

30 output_path = parent / f"{stem}_page_{idx}.json" 

31 with open(output_path, 'w') as f: 

32 json.dump(data, f, indent=4) 

33 total_size += output_path.stat().st_size 

34 

35 return total_size