diff --git a/nox/sessions.py b/nox/sessions.py index c97c7eb2..5d1b35c0 100644 --- a/nox/sessions.py +++ b/nox/sessions.py @@ -16,6 +16,7 @@ import enum import hashlib import os +import pathlib import re import sys import unicodedata @@ -184,6 +185,13 @@ def create_tmp(self) -> str: self.env["TMPDIR"] = tmpdir return tmpdir + @property + def cache_dir(self) -> pathlib.Path: + """Create and return a 'shared cache' directory to be used across sessions.""" + path = pathlib.Path(self._runner.global_config.envdir).joinpath(".cache") + path.mkdir(exist_ok=True) + return path + @property def interactive(self) -> bool: """Returns True if Nox is being run in an interactive session or False otherwise.""" diff --git a/tests/test_sessions.py b/tests/test_sessions.py index f12f02c7..3c949e64 100644 --- a/tests/test_sessions.py +++ b/tests/test_sessions.py @@ -99,15 +99,20 @@ def test_create_tmp_twice(self): def test_properties(self): session, runner = self.make_session_and_runner() + with tempfile.TemporaryDirectory() as root: + runner.global_config.envdir = root - assert session.name is runner.friendly_name - assert session.env is runner.venv.env - assert session.posargs == runner.global_config.posargs - assert session.virtualenv is runner.venv - assert session.bin_paths is runner.venv.bin_paths - assert session.bin is runner.venv.bin_paths[0] - assert session.python is runner.func.python - assert session.invoked_from is runner.global_config.invoked_from + assert session.name is runner.friendly_name + assert session.env is runner.venv.env + assert session.posargs == runner.global_config.posargs + assert session.virtualenv is runner.venv + assert session.bin_paths is runner.venv.bin_paths + assert session.bin is runner.venv.bin_paths[0] + assert session.python is runner.func.python + assert session.invoked_from is runner.global_config.invoked_from + assert session.cache_dir == Path(runner.global_config.envdir).joinpath( + ".cache" + ) def test_no_bin_paths(self): session, runner = self.make_session_and_runner()