Source code for deploy_tools.module_builder
from .app_builder import AppBuilder
from .layout import Layout
from .models.module import Module
from .models.save_and_load import save_as_yaml
from .templater import Templater, TemplateType
[docs]
class ModuleBuilder:
"""Class for creating modules, including modulefiles and all application files."""
def __init__(self, templater: Templater, layout: Layout) -> None:
self._templater = templater
self._layout = layout
self._build_layout = layout.build_layout
self.app_creator = AppBuilder(templater, self._build_layout)
[docs]
def create_module(self, module: Module) -> None:
"""Create the module's modulefile, application files and snapshot."""
self._create_modulefile(module)
for app in module.applications:
self.app_creator.create_application_files(app, module)
self._create_module_snapshot(module)
def _create_modulefile(self, module: Module) -> None:
entrypoints_folder = self._layout.get_entrypoints_folder(
module.name, module.version
)
description = module.description
if description is None:
description = f"Scripts for {module.name}"
params = {
"module_name": module.name,
"module_description": description,
"env_vars": module.env_vars,
"dependencies": module.dependencies,
"entrypoint_folder": entrypoints_folder,
"load_script": module.load_script,
"unload_script": module.unload_script,
}
built_modulefile = self._build_layout.get_modulefile(
module.name, module.version
)
self._templater.create(
built_modulefile, TemplateType.MODULEFILE, params, create_parents=True
)
def _create_module_snapshot(self, module: Module) -> None:
snapshot_path = self._build_layout.get_module_snapshot_path(
module.name, module.version
)
save_as_yaml(module, snapshot_path, create_parents=True)