Skip to content

Commit

Permalink
mark a python environment as unhealthy if python goes missing
Browse files Browse the repository at this point in the history
  • Loading branch information
asottile committed Mar 12, 2020
1 parent 1c10340 commit 7a49309
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
6 changes: 4 additions & 2 deletions pre_commit/languages/python.py
Expand Up @@ -158,10 +158,12 @@ def in_env(
yield

def healthy(prefix: Prefix, language_version: str) -> bool:
envdir = helpers.environment_dir(_dir, language_version)
exe_name = 'python.exe' if sys.platform == 'win32' else 'python'
py_exe = prefix.path(bin_dir(envdir), exe_name)
with in_env(prefix, language_version):
retcode, _, _ = cmd_output_b(
'python', '-c',
'import ctypes, datetime, io, os, ssl, weakref',
py_exe, '-c', 'import ctypes, datetime, io, os, ssl, weakref',
cwd='/',
retcode=None,
)
Expand Down
14 changes: 14 additions & 0 deletions tests/languages/python_test.py
Expand Up @@ -59,3 +59,17 @@ def test_healthy_types_py_in_cwd(tmpdir):
# even if a `types.py` file exists, should still be healthy
tmpdir.join('types.py').ensure()
assert python.healthy(prefix, C.DEFAULT) is True


def test_healthy_python_goes_missing(tmpdir):
with tmpdir.as_cwd():
prefix = tmpdir.join('prefix').ensure_dir()
prefix.join('setup.py').write('import setuptools; setuptools.setup()')
prefix = Prefix(str(prefix))
python.install_environment(prefix, C.DEFAULT, ())

exe_name = 'python' if sys.platform != 'win32' else 'python.exe'
py_exe = prefix.path(python.bin_dir('py_env-default'), exe_name)
os.remove(py_exe)

assert python.healthy(prefix, C.DEFAULT) is False

0 comments on commit 7a49309

Please sign in to comment.