Skip to content

mecfs_bio.figures.figure_exporter

Classes:

  • FigureExporter

    Responsible for invoking the build system to generate Assets corresponding to figures, then copying those assets to the figure directory.

Functions:

Attributes:

ValidFigureMeta module-attribute

ValidFigureMeta = (
    GWASPlotFileMeta
    | GWASPlotDirectoryMeta
    | MarkdownFileMeta
)

logger module-attribute

logger = get_logger()

FigureExporter

Responsible for invoking the build system to generate Assets corresponding to figures, then copying those assets to the figure directory.

Methods:

Attributes:

runner instance-attribute

runner: Callable[[Sequence[Task]], Mapping[AssetId, Asset]]

tracer instance-attribute

tracer: Tracer

export

export(to_export: Sequence[Task], fig_dir: Path) -> None
Source code in mecfs_bio/figures/figure_exporter.py
def export(self, to_export: Sequence[Task], fig_dir: Path) -> None:
    fig_dir.mkdir(parents=True, exist_ok=True)
    meta_list = []
    for task in to_export:
        assert isinstance(task.meta, ValidFigureMeta)
        meta_list.append(task.meta)
    result = self.runner(
        to_export,
    )
    for task, meta in zip(to_export, meta_list):
        asset = result[task.asset_id]
        if isinstance(meta, GWASPlotFileMeta):
            assert isinstance(asset, FileAsset)
            src = asset.path
            dst = get_fig_file_path(meta=meta, fig_dir=fig_dir)
            shutil.copy(src, dst)
            logger.debug(f"Figure asset {task.asset_id} copied to {dst}.")
        elif isinstance(meta, GWASPlotDirectoryMeta):
            assert isinstance(asset, DirectoryAsset)
            src = asset.path
            assert isinstance(meta, GWASPlotDirectoryMeta)
            dst = get_fig_dir_meta(meta=meta, fig_dir=fig_dir)
            shutil.copytree(src, dst, dirs_exist_ok=True)
            logger.debug(f"Directory figure asset {task.asset_id} copied to {dst}.")
        elif isinstance(meta, MarkdownFileMeta):
            assert isinstance(asset, FileAsset)
            src = asset.path
            dst = get_md_fig_file_path(meta=meta, fig_dir=fig_dir)
            shutil.copy(src, dst)
            logger.debug(f"Markdown figure asset {task.asset_id} copied to {dst}.")
        else:
            raise ValueError(f"Unknown meta type {type(meta)}")

get_fig_dir_meta

get_fig_dir_meta(
    meta: GWASPlotDirectoryMeta, fig_dir: Path
) -> Path
Source code in mecfs_bio/figures/figure_exporter.py
def get_fig_dir_meta(meta: GWASPlotDirectoryMeta, fig_dir: Path) -> Path:
    return fig_dir / meta.id

get_fig_file_path

get_fig_file_path(
    meta: GWASPlotFileMeta, fig_dir: Path
) -> Path
Source code in mecfs_bio/figures/figure_exporter.py
def get_fig_file_path(meta: GWASPlotFileMeta, fig_dir: Path) -> Path:
    return fig_dir / (meta.asset_id + meta.extension)

get_md_fig_file_path

get_md_fig_file_path(
    meta: MarkdownFileMeta, fig_dir: Path
) -> Path
Source code in mecfs_bio/figures/figure_exporter.py
def get_md_fig_file_path(meta: MarkdownFileMeta, fig_dir: Path) -> Path:
    return (
        fig_dir / (meta.asset_id + ".mdx")
    )  # Use .mdx instead of .md to prevent mkdocs from auto-generating a documentation page