Source code for deploy_tools.modulefile

import re
from collections import defaultdict

from .layout import Layout
from .models.deployment import DefaultVersionsByName, ModuleVersionsByName
from .templater import Templater, TemplateType

VERSION_GLOB = "*/[!.]*"

DEFAULT_VERSION_REGEX = "^set ModulesVersion (.*)$"










[docs] def get_default_modulefile_version(name: str, layout: Layout) -> str | None: """Return the default version recorded in a module's .version file, if any.""" version_regex = re.compile(DEFAULT_VERSION_REGEX) default_version_file = layout.get_default_version_file(name) with open(default_version_file) as f: for line in f.readlines(): r = version_regex.search(line) if r is not None: return r.group(1)
[docs] def apply_default_versions( default_versions: DefaultVersionsByName, layout: Layout ) -> None: """Update .version files for current default version settings.""" templater = Templater() deployed_module_versions = get_deployed_modulefile_versions(layout) for name in deployed_module_versions: default_version_file = layout.get_default_version_file(name) if name in default_versions: params = {"version": default_versions[name]} templater.create( default_version_file, TemplateType.MODULEFILE_VERSION, params, overwrite=True, ) else: # Defensive: remove a stale default file for a deployed module that has no # entry in the default map. This ought to be unreachable via the CLI default_version_file.unlink(missing_ok=True)
[docs] def get_deployed_modulefile_versions( layout: Layout, from_deprecated: bool = False ) -> ModuleVersionsByName: """Return list of modulefiles that have been deployed.""" modulefiles_root = layout.get_modulefiles_root(from_deprecated) found_modules: ModuleVersionsByName = defaultdict(list) for version_path in modulefiles_root.glob(VERSION_GLOB): found_modules[version_path.parent.name].append(version_path.name) return found_modules