Source code for edgetest.lib

"""Default virtual environment hook."""

import platform
from pathlib import Path
from typing import Dict, List
from venv import EnvBuilder

import pluggy

from .utils import _run_command

hookimpl = pluggy.HookimplMarker("edgetest")


[docs]@hookimpl(trylast=True) def path_to_python(basedir: str, envname: str) -> str: """Return the path to the python executable.""" if platform.system() == "Windows": return str(Path(basedir) / envname / "Scripts" / "python") else: return str(Path(basedir) / envname / "bin" / "python")
[docs]@hookimpl(trylast=True) def create_environment(basedir: str, envname: str, conf: Dict): """Create the virtual environment for testing. Creates an environment using ``venv``. Parameters ---------- basedir : str The base directory location for the environment. envname : str The name of the virtual environment. conf : dict Ignored. Raises ------ RuntimeError Error raised if the environment cannot be created. """ builder = EnvBuilder(with_pip=True) try: builder.create(env_dir=Path(basedir, envname)) except Exception: raise RuntimeError(f"Unable to create {envname} in {basedir}")
[docs]@hookimpl(trylast=True) def run_update(basedir: str, envname: str, upgrade: List, conf: Dict): """Update packages from upgrade list. Parameters ---------- basedir : str The base directory location for the environment. envname : str The name of the virtual environment. upgrade : list The list of packages to upgrade conf : dict Ignored. Raises ------ RuntimeError Error raised if the packages cannot be updated. """ python_path = path_to_python(basedir, envname) try: _run_command( python_path, "-m", "pip", "install", *upgrade, "--upgrade", ) except Exception: raise RuntimeError(f"Unable to pip upgrade: {upgrade}")
[docs]@hookimpl(trylast=True) def run_install_lower(basedir: str, envname: str, lower: List[str], conf: Dict): """Install lower bounds of packages provided. Parameters ---------- basedir : str The base directory location for the environment. envname : str Environment to install into. lower : List[str] Lower bounds of packages to install. conf : Dict The configuration dictionary for the environment. This is useful if you want to add configuration arguments for additional dependencies that can only be installed through the environment manager (e.g. Conda). """ python_path = path_to_python(basedir, envname) try: _run_command( python_path, "-m", "pip", "install", *lower, ) except Exception: raise RuntimeError(f"Unable to pip install: {lower}")