Source code for pydmt.builders.mako

"""
mako.py
"""

import sys
import os
import os.path
from collections.abc import Generator

import mako
import mako.exceptions
import mako.lookup
import mako.template

from pydmt.api.builder import Builder, Node, SourceFile, TargetFile, SourceFolder
from pydmt.utils.filesystem import makedirs_for_file
from pydmt.utils.digest import sha1_file

FOLDER_CONFIG = "config"
FOLDER_SNIPPLETS = "snipplets"


[docs] class BuilderMako(Builder): # pylint: disable=too-many-positional-arguments def __init__(self, source: str, target: str, data: dict[str, object] | None, config_files: list[str], snipplet_files: list[str], ): # super().__init__() self.source = source self.target = target self.data = data self.config_files: list[str] = config_files self.snipplet_files: list[str] = snipplet_files self.sources: list[Node] = [SourceFile(self.source)] if os.path.isdir(FOLDER_CONFIG): self.sources.append(SourceFolder(FOLDER_CONFIG)) if os.path.isdir(FOLDER_SNIPPLETS): self.sources.append(SourceFolder(FOLDER_SNIPPLETS)) self.targets: list[Node] = [TargetFile(self.target)]
[docs] def get_sources(self) -> list[Node]: return self.sources
[docs] def get_targets(self) -> list[Node]: return self.targets
[docs] def build(self): lookup = mako.lookup.TemplateLookup( directories=['.'], ) template = mako.template.Template( filename=self.source, lookup=lookup, ) makedirs_for_file(self.target) if self.data is None: output = template.render() else: output = template.render(**self.data) with open(self.target, "w") as file_handle: file_handle.write(output)
[docs] def yield_results(self) -> Generator[tuple[str, str], None, None]: yield sha1_file(self.target), self.target