import logging import os import tempfile from collections.abc import Iterator from pathlib import Path import pytest log = logging.getLogger(__name__) @pytest.fixture def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]: with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath: xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR") monkeypatch.setenv("HOME", str(dirpath)) monkeypatch.setenv("XDG_CONFIG_HOME", str(Path(dirpath) / ".config")) runtime_dir = Path(dirpath) / "xdg-runtime-dir" runtime_dir.mkdir() runtime_dir.chmod(0o700) gpgdir = runtime_dir / "gpgagent" gpgdir.mkdir() gpgdir.chmod(0o700) monkeypatch.setenv("GPG_AGENT_INFO", str(gpgdir)) # Iterate over all environment variables for key, value in os.environ.items(): if xdg_runtime_dir and value.startswith(xdg_runtime_dir): monkeypatch.setenv( key, value.replace(xdg_runtime_dir, str(runtime_dir)) ) monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir)) monkeypatch.chdir(str(dirpath)) log.debug("Temp HOME directory: %s", str(dirpath)) yield Path(dirpath)