Source code for venvmod.commands.create_module


import os
from pathlib import Path
from typing import List

from packaging import version

from . import get_parser
from .append_module import module_load, read_env
from ..modulefile import (get_version, ModuleInstaller, upgrade_modulefile, create_modulefile,
                          upgrade_venv)

from ..tools import PACKAGE_NAME, check_raise, remove_duplicates


[docs]def initialize(virtual_env: Path = None, version_or_path: str = "5.2.0"): if virtual_env is None: options = get_parser(description="Initialize Modulefile in venv.", help_arguments="Log message when the module is loaded.", with_appli=False, with_verbose=True) virtual_env = Path(options.virtual_env).absolute() if version.parse(get_version()) < version.parse("14.6"): install_prefix=virtual_env / "opt" / "modulefiles" if not install_prefix.exists(): code = ModuleInstaller(install_prefix=install_prefix, version_or_path=version_or_path, cache_directory=virtual_env / ".cache" ).run(verbose=options.verbose, do_raise=True) if code: return code code = upgrade_modulefile(virtual_env=virtual_env, module_prefix=install_prefix) if code: return code code = create_modulefile(virtual_env=virtual_env, module_name=virtual_env.stem, module_category=PACKAGE_NAME, log_load=" ".join(options.arguments)) if code: return code code = upgrade_venv(virtual_env=virtual_env)
[docs]def add_appli(virtual_env: Path = None, applis: List[str] = None): if virtual_env is None: options = get_parser(description="Initialize Modulefile for an application.", help_arguments="Appli name(s) to add to the environment.", with_appli=False, with_verbose=True) virtual_env = Path(options.virtual_env).absolute() fails = [] for appli in remove_duplicates(options.arguments + (applis if applis else [])): code = create_modulefile(virtual_env=virtual_env, module_name=appli, module_category=f"{PACKAGE_NAME}-{appli}", log_load=" ".join(options.arguments)) if code: fails.append(appli) read_env(arguments=(virtual_env, appli)) module_load(arguments=(virtual_env, virtual_env.stem, appli)) check_raise(condition=len(fails) > 0, exception_type=RuntimeError, message=f"The installation of the folowing appli failed : {fails}")