def _export_with_performance(
        document,
        export_options: ExportOptions,
        document_tree,
        traceability_index,
        link_renderer,
    ):
        document_meta: DocumentMeta = document.meta
        full_output_path = os.path.join(export_options.strictdoc_src_path,
                                        document_meta.get_html_doc_path())

        # If file exists we want to check its modification path in order to skip
        # its generation in case it has not changed since the last generation.
        if os.path.isfile(full_output_path):
            output_file_mtime = get_file_modification_time(full_output_path)
            sdoc_mtime = get_file_modification_time(
                document_meta.input_doc_full_path)

            if (sdoc_mtime < output_file_mtime and
                    export_options.strictdoc_last_update < output_file_mtime):
                with measure_performance("Skip: {}".format(document.name)):
                    return

        with measure_performance("Published: {}".format(document.name)):
            HTMLGenerator._export(
                export_options.export_mode,
                document,
                document_tree,
                traceability_index,
                link_renderer,
            )
        return None
Esempio n. 2
0
 def __init__(self, strictdoc_src_path, parallelizer):
     assert parallelizer
     self.strictdoc_src_path = strictdoc_src_path
     self.cwd = os.getcwd()
     self.parallelizer = parallelizer
     strict_own_files = glob.iglob("{}/strictdoc/**/*".format(
         self.strictdoc_src_path),
                                   recursive=True)
     strict_own_files = [
         f for f in strict_own_files
         if f.endswith(".html") or f.endswith(".py")
     ]
     latest_strictdoc_own_file = max(strict_own_files, key=os.path.getctime)
     self.strictdoc_last_update = get_file_modification_time(
         latest_strictdoc_own_file)
    def export(config: ExportCommandConfig, parallelizer):
        assert parallelizer
        cwd = os.getcwd()
        strict_own_files = glob.iglob(
            "{}/strictdoc/**/*".format(config.strictdoc_root_path),
            recursive=True,
        )
        strict_own_files = [
            f
            for f in strict_own_files
            if f.endswith(".html") or f.endswith(".py")
        ]
        latest_strictdoc_own_file = max(strict_own_files, key=os.path.getctime)
        strictdoc_last_update = get_file_modification_time(
            latest_strictdoc_own_file
        )

        assert isinstance(config.formats, list)

        path_to_single_file_or_doc_root = config.input_paths
        if isinstance(path_to_single_file_or_doc_root, str):
            path_to_single_file_or_doc_root = [config.input_paths]
        output_dir = config.output_dir if config.output_dir else "output"

        if not os.path.isabs(output_dir):
            output_dir = os.path.join(cwd, output_dir)

        output_html_root = "{}/html".format(output_dir)

        document_tree, asset_dirs = DocumentFinder.find_sdoc_content(
            path_to_single_file_or_doc_root, output_html_root, parallelizer
        )

        traceability_index = TraceabilityIndex.create(document_tree)
        if config.experimental_enable_file_traceability:
            source_files = SourceFilesFinder.find_source_files(
                output_html_root, document_tree
            )

            source_file: SourceFile
            for source_file in source_files:
                traceability_reader = SourceFileTraceabilityReader()
                traceability_info = traceability_reader.read_from_file(
                    source_file.full_path
                )
                if traceability_info:
                    traceability_index.attach_traceability_info(
                        source_file.in_doctree_source_file_rel_path,
                        traceability_info,
                    )
            document_tree.attach_source_files(source_files)

        if "html" in config.formats or "html-standalone" in config.formats:
            Path(output_html_root).mkdir(parents=True, exist_ok=True)
            HTMLGenerator.export_tree(
                config.formats,
                document_tree,
                traceability_index,
                output_html_root,
                config.strictdoc_root_path,
                strictdoc_last_update,
                asset_dirs,
                parallelizer,
            )

        if "rst" in config.formats:
            output_rst_root = "{}/rst".format(output_dir)
            Path(output_rst_root).mkdir(parents=True, exist_ok=True)
            DocumentRSTGenerator.export_tree(
                document_tree, traceability_index, output_rst_root
            )

        if "excel" in config.formats:
            output_excel_root = "{}/excel".format(output_dir)
            ExcelGenerator.export_tree(
                document_tree,
                traceability_index,
                output_excel_root,
                config.fields,
            )