From 43767511e2df8bc0d90351e35d6c56741013f528 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 14 Mar 2014 00:31:24 -0700 Subject: [PATCH] Nicer interfaces --- pre_commit/languages/python.py | 50 +++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index d5698f35..53673a9a 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -1,10 +1,34 @@ +import contexlib from plumbum import local -import subprocess PY_ENV = 'py_env' +class PythonEnv(object): + def __init__(self): + self.env_prefix = '. {0}/bin/activate &&'.format(PY_ENV) + + def run(self, cmd): + return local['bash']['-c', ' '.join([self.env_prefix, cmd])]() + + +NODE_ENV = 'node_env' + +class NodeEnv(object): + def __init__(self, py_env): + self.py_env = py_env + self.env_prefix = '. {0}/bin/activate &&'.format(NODE_ENV) + + def run(self, cmd): + return self.py_env.run(' '.join(self.env_prefix, cmd)) + + +@contexlib.contextmanager +def in_env(): + yield PythonEnv() + + def install_environment(): assert local.path('setup.py').exists() # Return immediately if we already have a virtualenv @@ -13,25 +37,13 @@ def install_environment(): # Install a virtualenv local['virtualenv'][PY_ENV]() - local['bash']['-c', 'source {0}/bin/activate && pip install .'.format(PY_ENV)]() + with in_env() as env: + env.run('pip install .') def run_hook(hook, file_args): # TODO: batch filenames - process = subprocess.Popen( - ['bash', '-c', ' '.join( - ['source {0}/bin/activate &&'.format(PY_ENV)] + - [hook['entry']] + hook.get('args', []) + list(file_args) - )], - stdout=subprocess.PIPE, stderr=subprocess.PIPE, - ) - ret = process.communicate() - - return (process.returncode,) + ret - - return local['bash'][ - '-c', ' '.join( - ['source {0}/bin/activate &&'.format(PY_ENV)] + - [hook['entry']] + hook.get('args', []) + list(file_args) - ) - ].run() \ No newline at end of file + with in_env() as env: + env = env + # MAGIC + pass \ No newline at end of file