Source code for woom.env

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Environment loading utilities
"""

import os


[docs] class EnvConfig: """Configuration for environment variables, modules, and conda environments Parameters ---------- raw_text : str, optional Raw environment setup text vars_forward : list, optional Environment variables to forward vars_set : dict, optional Environment variables to set vars_append : dict, optional Paths to append to environment variables vars_prepend : dict, optional Paths to prepend to environment variables module_setup : str, optional Module system setup command module_use : list, optional Module paths to use module_load : list, optional Modules to load conda_setup : str, optional Conda setup command conda_activate : str, optional Conda environment to activate uv_venv : str, optional UV virtual environment path name : str, optional Environment name """
[docs] def __init__( self, raw_text=None, vars_forward=None, vars_set=None, vars_append=None, vars_prepend=None, module_setup=None, module_use=None, module_load=None, conda_setup=None, conda_activate=None, uv_venv=None, name=None, ): self.raw_text = raw_text self.vars_forward = [] if vars_forward is None else list(vars_forward) self.vars_set = {} if vars_set is None else vars_set.copy() self.vars_append = {} self.vars_prepend = {} if vars_append: self.append_paths(**vars_append) if vars_prepend: self.prepend_paths(**vars_prepend) self.module_setup = module_setup self.module_use = module_use self.module_load = module_load self.conda_setup = conda_setup self.conda_activate = conda_activate self.uv_venv = uv_venv self.name = name
def __str__(self): return self.name if self.name else "" @staticmethod def _as_string_(value): if isinstance(value, (list, tuple)): return os.pathsep.join([str(v) for v in value]) return str(value)
[docs] def has_vars(self): """Does this environment manage environment variables?""" return bool( self.vars_forward + list(self.vars_set) + list(self.vars_prepend) + list(self.vars_append) )
@staticmethod def _check_path_(path): if isinstance(path, str): return path.split(os.pathsep) return list(path) def _update_path_(self, action, varname, path): container = getattr(self, "vars_" + action) current_paths = self._check_path_(container.setdefault(varname, [])) more_paths = self._check_path_(path) container[varname] = current_paths + more_paths
[docs] def append_paths(self, **paths): """Append paths to env variables""" for varname, path in paths.items(): self._update_path_("append", varname, path)
[docs] def prepend_paths(self, **paths): """Prepend paths to env variables""" for varname, path in paths.items(): self._update_path_("prepend", varname, path)
[docs] def set_paths(self, **paths): """Set paths in env variables""" for varname, path in paths.items(): self._update_path_("set", varname, path)
[docs] def copy(self): return EnvConfig( raw_text=self.raw_text, vars_forward=self.vars_forward, vars_set=self.vars_set, vars_append=self.vars_append, vars_prepend=self.vars_prepend, module_setup=self.module_setup, module_use=self.module_use, module_load=self.module_load, conda_setup=self.conda_setup, conda_activate=self.conda_activate, uv_venv=self.uv_venv, name=self.name, )