StrictDoc Documentation
strictdoc/export/rst/document_rst_generator.py
Source file coverage
Path:
strictdoc/export/rst/document_rst_generator.py
Lines:
47
Non-empty lines:
38
Non-empty lines covered with requirements:
38 / 38 (100.0%)
Functions:
3
Functions covered by requirements:
3 / 3 (100.0%)
1
import os
2
from pathlib import Path
3
 
4
from strictdoc.backend.sdoc.models.document import SDocDocument
5
from strictdoc.core.document_meta import DocumentMeta
6
from strictdoc.core.traceability_index import TraceabilityIndex
7
from strictdoc.export.rst.writer import RSTWriter
8
from strictdoc.helpers.cast import assert_cast
9
 
10
 
11
class DocumentRSTGenerator:
12
    @staticmethod
13
    def export_tree(
14
        traceability_index: TraceabilityIndex, output_rst_root: str
15
    ) -> None:
16
        Path(output_rst_root).mkdir(parents=True, exist_ok=True)
17
 
18
        document: SDocDocument
19
        for document in traceability_index.document_tree.document_list:
20
            document_content = DocumentRSTGenerator.export(
21
                document, traceability_index
22
            )
23
            document_meta = assert_cast(document.meta, DocumentMeta)
24
            output_folder = os.path.join(
25
                output_rst_root,
26
                document_meta.input_doc_dir_rel_path.relative_path,
27
            )
28
            Path(output_folder).mkdir(parents=True, exist_ok=True)
29
 
30
            document_out_file = f"{document_meta.document_filename_base}.rst"
31
            output_path = os.path.join(output_folder, document_out_file)
32
 
33
            with open(output_path, "w", encoding="utf8") as file:
34
                file.write(document_content)
35
 
36
    @staticmethod
37
    def export(
38
        document: SDocDocument, traceability_index: TraceabilityIndex
39
    ) -> str:
40
        writer = RSTWriter(traceability_index)
41
 
42
        single_or_many = (
43
            len(traceability_index.document_tree.document_list) == 1
44
        )
45
        output = writer.write(document, single_or_many)
46
 
47
        return output