Source code for pmpm.util

from __future__ import annotations

import os
import subprocess
from logging import getLogger
from pathlib import Path

logger = getLogger(__name__)


[docs] def prepend_path(environ: dict[str, str], path: str) -> None: """Prepend to PATH in environment dictionary in-place.""" if "PATH" in environ: environ["PATH"] = path + os.pathsep + environ["PATH"] else: environ["PATH"] = path
[docs] def append_path(environ: dict[str, str], path: str) -> None: """Append to PATH in environment dictionary in-place.""" if "PATH" in environ: environ["PATH"] += os.pathsep + path else: environ["PATH"] = path
[docs] def append_env(dependencies: list[str], package: str) -> None: """Append a package to conda environment definition.""" if package not in dependencies: dependencies.append(package)
[docs] def check_file(path: Path, msg: str) -> None: """Check if a file exists.""" if path.is_file(): logger.info(msg, path) else: raise RuntimeError(f"{path} not found.")
[docs] def check_dir(path: Path, msg: str) -> None: """Check if a directory exists.""" if path.is_dir(): logger.info(msg, path) else: raise RuntimeError(f"{path} not found.")
[docs] def run( command: str | list[str], **kwargs, ) -> None: """Run command while logging what is running. :param command: can be in string or list of string that subprocess.run accepts. :param kwargs: passes to subprocess.run """ cmd_str = subprocess.list2cmdline(command) logger.info("Running %s", cmd_str) subprocess.run( command, check=True, **kwargs, )
[docs] def split_conda_dep_from_pip( dep: list[str] | list[str | dict[str, list[str]]], ) -> tuple[list[str], list[str]]: """Split conda and pip dependencies.""" conda_dependencies: list[str] = [] pip_dependencies: list[str] = [] for i in dep: if isinstance(i, str): conda_dependencies.append(i) elif isinstance(i, dict) and len(i) == 1 and "pip" in i: pip_dependencies = i["pip"] else: raise RuntimeError(f"Invalid dependency {i}") return conda_dependencies, pip_dependencies