Source code for datalad_next.utils.patch

import contextlib
from os import environ

# legacy import
from datalad_next.patches import apply_patch


[docs] @contextlib.contextmanager def patched_env(**env): """Context manager for patching the process environment Any number of kwargs can be given. Keys represent environment variable names, and values their values. A value of ``None`` indicates that the respective variable should be unset, i.e., removed from the environment. """ preserve = {} for name, val in env.items(): preserve[name] = environ.get(name, None) if val is None: del environ[name] else: environ[name] = str(val) try: yield finally: for name, val in preserve.items(): if val is None: del environ[name] else: environ[name] = val