Source code for doxysphinx.sphinx

# =====================================================================================
#  C O P Y R I G H T
# -------------------------------------------------------------------------------------
#  Copyright (c) 2023 by Robert Bosch GmbH. All rights reserved.
#
#  Author(s):
#  - Markus Braun, :em engineering methods AG (contracted by Robert Bosch GmbH)
# =====================================================================================
"""The sphinx module contains classes that are tied to sphinx or resemble sphinx logic."""

from pathlib import Path
from typing import Protocol

# noinspection PyMethodMayBeStatic,PyUnusedLocal
from doxysphinx.utils.pathlib_fix import path_resolve


[docs]class DirectoryMapper(Protocol): """ Mapper that will calculate the output file path for an input file. In docs-as-code tooling (e.g. sphinx) often files from a source dir structure are processed and written to result files in a target dir structure. The make this mapping an implementation detail this protocol exists. It should be implemented for any special handling in mapping files. """ def __init__(self, sphinx_source_dir: Path, sphinx_output_dir: Path): """ Protocol for a directory mapper constructor. :param sphinx_source_dir: the sphinx source directory :param sphinx_output_dir: the sphinx output directoryS """
[docs] def map(self, path: Path) -> Path: """Calculate the path in output for a given path in input.""" return Path()
[docs]class SphinxHtmlBuilderDirectoryMapper: """ Mapper that will calculate the output file path for an input file. This is based on the logic that the sphinx html builder would use. """ def __init__(self, sphinx_source_dir: Path, sphinx_output_dir: Path): """ Create a sphinx html builder directory mapper. This mapper resembles the behavior of the sphinx html build considering path handling and copying to output. :param sphinx_source_dir: the sphinx source directory :param sphinx_output_dir: the sphinx output directoryS """ self.source = sphinx_source_dir self.output = sphinx_output_dir
[docs] def map(self, path: Path) -> Path: """Calculate the path in output for a given path in input.""" if path.is_absolute(): return self._map_absolute(path) else: return self._map_relative(path)
def _map_absolute(self, path: Path) -> Path: relative_source_path = path.relative_to(path_resolve(self.source)) output_path = path_resolve(self.output) / relative_source_path return output_path def _map_relative(self, path: Path) -> Path: relative_source_path = path_resolve(path).relative_to(path_resolve(self.source)) output_path = path_resolve(self.output) / relative_source_path return output_path.relative_to(Path.cwd())