qa : fixed flak8 checks
This commit is contained in:
parent
a6681f2d7f
commit
5300ffac7f
2 changed files with 46 additions and 16 deletions
|
@ -24,13 +24,14 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import collections
|
import collections
|
||||||
import inspect
|
import inspect
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import subprocess
|
import subprocess
|
||||||
import shlex
|
|
||||||
import json
|
|
||||||
|
|
||||||
class NameModifier(object):
|
class NameModifier(object):
|
||||||
|
|
||||||
def __init__(self, name, **kwargs):
|
def __init__(self, name, **kwargs):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.args = {'name': name}
|
self.args = {'name': name}
|
||||||
|
@ -38,6 +39,7 @@ def __init__(self, name, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
class NameValueModifier(object):
|
class NameValueModifier(object):
|
||||||
|
|
||||||
def __init__(self, name, value, **kwargs):
|
def __init__(self, name, value, **kwargs):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.value = value
|
self.value = value
|
||||||
|
@ -47,23 +49,27 @@ def __init__(self, name, value, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
class SetEnv(NameValueModifier):
|
class SetEnv(NameValueModifier):
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
os.environ[self.name] = str(self.value)
|
os.environ[self.name] = str(self.value)
|
||||||
|
|
||||||
|
|
||||||
class UnsetEnv(NameModifier):
|
class UnsetEnv(NameModifier):
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
# Avoid throwing if the variable was not set
|
# Avoid throwing if the variable was not set
|
||||||
os.environ.pop(self.name, None)
|
os.environ.pop(self.name, None)
|
||||||
|
|
||||||
|
|
||||||
class SetPath(NameValueModifier):
|
class SetPath(NameValueModifier):
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
string_path = concatenate_paths(self.value, separator=self.separator)
|
string_path = concatenate_paths(self.value, separator=self.separator)
|
||||||
os.environ[self.name] = string_path
|
os.environ[self.name] = string_path
|
||||||
|
|
||||||
|
|
||||||
class AppendPath(NameValueModifier):
|
class AppendPath(NameValueModifier):
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
environment_value = os.environ.get(self.name, '')
|
environment_value = os.environ.get(self.name, '')
|
||||||
directories = environment_value.split(
|
directories = environment_value.split(
|
||||||
|
@ -73,6 +79,7 @@ def execute(self):
|
||||||
|
|
||||||
|
|
||||||
class PrependPath(NameValueModifier):
|
class PrependPath(NameValueModifier):
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
environment_value = os.environ.get(self.name, '')
|
environment_value = os.environ.get(self.name, '')
|
||||||
directories = environment_value.split(
|
directories = environment_value.split(
|
||||||
|
@ -82,6 +89,7 @@ def execute(self):
|
||||||
|
|
||||||
|
|
||||||
class RemovePath(NameValueModifier):
|
class RemovePath(NameValueModifier):
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
environment_value = os.environ.get(self.name, '')
|
environment_value = os.environ.get(self.name, '')
|
||||||
directories = environment_value.split(
|
directories = environment_value.split(
|
||||||
|
@ -270,7 +278,7 @@ def from_sourcing_files(*args, **kwargs):
|
||||||
shell = '{shell}'.format(**info)
|
shell = '{shell}'.format(**info)
|
||||||
shell_options = '{shell_options}'.format(**info)
|
shell_options = '{shell_options}'.format(**info)
|
||||||
source_file = '{source_command} {file} {concatenate_on_success}'
|
source_file = '{source_command} {file} {concatenate_on_success}'
|
||||||
dump_environment = 'python -c "import os, json; print json.dumps(dict(os.environ))"'
|
dump_environment = 'python -c "import os, json; print json.dumps(dict(os.environ))"' # NOQA: ignore=E501
|
||||||
# Construct the command that will be executed
|
# Construct the command that will be executed
|
||||||
command = [source_file.format(file=file, **info) for file in args]
|
command = [source_file.format(file=file, **info) for file in args]
|
||||||
command.append(dump_environment)
|
command.append(dump_environment)
|
||||||
|
@ -282,7 +290,8 @@ def from_sourcing_files(*args, **kwargs):
|
||||||
]
|
]
|
||||||
|
|
||||||
# Try to source all the files,
|
# Try to source all the files,
|
||||||
proc = subprocess.Popen(command, stdout=subprocess.PIPE, env=os.environ)
|
proc = subprocess.Popen(
|
||||||
|
command, stdout=subprocess.PIPE, env=os.environ)
|
||||||
proc.wait()
|
proc.wait()
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
raise RuntimeError('sourcing files returned a non-zero exit code')
|
raise RuntimeError('sourcing files returned a non-zero exit code')
|
||||||
|
@ -306,10 +315,12 @@ def from_sourcing_files(*args, **kwargs):
|
||||||
for x in unset_variables:
|
for x in unset_variables:
|
||||||
env.unset(x)
|
env.unset(x)
|
||||||
# Variables that have been modified
|
# Variables that have been modified
|
||||||
common_variables = set(this_environment).intersection(set(after_source_env))
|
common_variables = set(this_environment).intersection(
|
||||||
modified_variables = [x for x in common_variables if this_environment[x] != after_source_env[x]]
|
set(after_source_env))
|
||||||
|
modified_variables = [x for x in common_variables if this_environment[x] != after_source_env[x]] # NOQA: ignore=E501
|
||||||
for x in modified_variables:
|
for x in modified_variables:
|
||||||
# TODO : we may be smarter here, and try to parse if we could compose append_path
|
# TODO : we may be smarter here, and try to parse
|
||||||
|
# TODO : if we could compose append_path
|
||||||
# TODO : and prepend_path to modify the value
|
# TODO : and prepend_path to modify the value
|
||||||
env.set(x, after_source_env[x])
|
env.set(x, after_source_env[x])
|
||||||
return env
|
return env
|
||||||
|
|
|
@ -31,12 +31,13 @@
|
||||||
|
|
||||||
|
|
||||||
class EnvironmentTest(unittest.TestCase):
|
class EnvironmentTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
os.environ.clear()
|
os.environ.clear()
|
||||||
os.environ['UNSET_ME'] = 'foo'
|
os.environ['UNSET_ME'] = 'foo'
|
||||||
os.environ['EMPTY_PATH_LIST'] = ''
|
os.environ['EMPTY_PATH_LIST'] = ''
|
||||||
os.environ['PATH_LIST'] = '/path/second:/path/third'
|
os.environ['PATH_LIST'] = '/path/second:/path/third'
|
||||||
os.environ['REMOVE_PATH_LIST'] = '/a/b:/duplicate:/a/c:/remove/this:/a/d:/duplicate/:/f/g'
|
os.environ['REMOVE_PATH_LIST'] = '/a/b:/duplicate:/a/c:/remove/this:/a/d:/duplicate/:/f/g' # NOQA: ignore=E501
|
||||||
|
|
||||||
def test_set(self):
|
def test_set(self):
|
||||||
env = EnvironmentModifications()
|
env = EnvironmentModifications()
|
||||||
|
@ -77,9 +78,18 @@ def test_path_manipulation(self):
|
||||||
env.remove_path('REMOVE_PATH_LIST', '/duplicate/')
|
env.remove_path('REMOVE_PATH_LIST', '/duplicate/')
|
||||||
|
|
||||||
env.apply_modifications()
|
env.apply_modifications()
|
||||||
self.assertEqual('/path/first:/path/second:/path/third:/path/last', os.environ['PATH_LIST'])
|
self.assertEqual(
|
||||||
self.assertEqual('/path/first:/path/middle:/path/last', os.environ['EMPTY_PATH_LIST'])
|
'/path/first:/path/second:/path/third:/path/last',
|
||||||
self.assertEqual('/path/first:/path/middle:/path/last', os.environ['NEWLY_CREATED_PATH_LIST'])
|
os.environ['PATH_LIST']
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'/path/first:/path/middle:/path/last',
|
||||||
|
os.environ['EMPTY_PATH_LIST']
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'/path/first:/path/middle:/path/last',
|
||||||
|
os.environ['NEWLY_CREATED_PATH_LIST']
|
||||||
|
)
|
||||||
self.assertEqual('/a/b:/a/c:/a/d:/f/g', os.environ['REMOVE_PATH_LIST'])
|
self.assertEqual('/a/b:/a/c:/a/d:/f/g', os.environ['REMOVE_PATH_LIST'])
|
||||||
|
|
||||||
def test_extra_arguments(self):
|
def test_extra_arguments(self):
|
||||||
|
@ -100,7 +110,8 @@ def test_extend(self):
|
||||||
assert x is y
|
assert x is y
|
||||||
|
|
||||||
def test_source_files(self):
|
def test_source_files(self):
|
||||||
datadir = join_path(spack_root, 'lib', 'spack', 'spack', 'test', 'data')
|
datadir = join_path(spack_root, 'lib', 'spack',
|
||||||
|
'spack', 'test', 'data')
|
||||||
files = [
|
files = [
|
||||||
join_path(datadir, 'sourceme_first.sh'),
|
join_path(datadir, 'sourceme_first.sh'),
|
||||||
join_path(datadir, 'sourceme_second.sh')
|
join_path(datadir, 'sourceme_second.sh')
|
||||||
|
@ -115,7 +126,8 @@ def test_source_files(self):
|
||||||
self.assertEqual(modifications['NEW_VAR'][0].value, 'new')
|
self.assertEqual(modifications['NEW_VAR'][0].value, 'new')
|
||||||
# Unset variables
|
# Unset variables
|
||||||
self.assertEqual(len(modifications['EMPTY_PATH_LIST']), 1)
|
self.assertEqual(len(modifications['EMPTY_PATH_LIST']), 1)
|
||||||
self.assertTrue(isinstance(modifications['EMPTY_PATH_LIST'][0], UnsetEnv))
|
self.assertTrue(isinstance(
|
||||||
|
modifications['EMPTY_PATH_LIST'][0], UnsetEnv))
|
||||||
# Modified variables
|
# Modified variables
|
||||||
self.assertEqual(len(modifications['UNSET_ME']), 1)
|
self.assertEqual(len(modifications['UNSET_ME']), 1)
|
||||||
self.assertTrue(isinstance(modifications['UNSET_ME'][0], SetEnv))
|
self.assertTrue(isinstance(modifications['UNSET_ME'][0], SetEnv))
|
||||||
|
@ -123,12 +135,19 @@ def test_source_files(self):
|
||||||
|
|
||||||
self.assertEqual(len(modifications['PATH_LIST']), 1)
|
self.assertEqual(len(modifications['PATH_LIST']), 1)
|
||||||
self.assertTrue(isinstance(modifications['PATH_LIST'][0], SetEnv))
|
self.assertTrue(isinstance(modifications['PATH_LIST'][0], SetEnv))
|
||||||
self.assertEqual(modifications['PATH_LIST'][0].value, '/path/first:/path/second:/path/third:/path/fourth')
|
self.assertEqual(
|
||||||
|
modifications['PATH_LIST'][0].value,
|
||||||
|
'/path/first:/path/second:/path/third:/path/fourth'
|
||||||
|
)
|
||||||
|
|
||||||
# TODO : with reference to the TODO in spack/environment.py
|
# TODO : with reference to the TODO in spack/environment.py
|
||||||
# TODO : remove the above and insert
|
# TODO : remove the above and insert
|
||||||
# self.assertEqual(len(modifications['PATH_LIST']), 2)
|
# self.assertEqual(len(modifications['PATH_LIST']), 2)
|
||||||
# self.assertTrue(isinstance(modifications['PATH_LIST'][0], PrependPath))
|
# self.assertTrue(
|
||||||
|
# isinstance(modifications['PATH_LIST'][0], PrependPath)
|
||||||
|
# )
|
||||||
# self.assertEqual(modifications['PATH_LIST'][0].value, '/path/first')
|
# self.assertEqual(modifications['PATH_LIST'][0].value, '/path/first')
|
||||||
# self.assertTrue(isinstance(modifications['PATH_LIST'][1], AppendPath))
|
# self.assertTrue(
|
||||||
|
# isinstance(modifications['PATH_LIST'][1], AppendPath)
|
||||||
|
# )
|
||||||
# self.assertEqual(modifications['PATH_LIST'][1].value, '/path/fourth')
|
# self.assertEqual(modifications['PATH_LIST'][1].value, '/path/fourth')
|
||||||
|
|
Loading…
Reference in a new issue