Source code for wmtexe.cmd.activate
"""Activate and deactivate a wmt-exe environment."""
from __future__ import print_function
import sys
import os
from ..env import WmtEnvironment
_ACTIVATE_SCRIPT = """
# This file must be used with "source wmt-activate" *from bash*
# you cannot run it directly
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
hash -r
fi
{ENVIRONMENT}
""".strip()
_PATH_NAMES = ['PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'LD_RUN_PATH',
'CLASSPATH', 'SIDL_DLL_PATH']
_VAR_NAMES = ['TAIL', 'CURL', 'BASH']
[docs]def prepend_path(var, path, out=None):
path = os.path.abspath(path)
env = out or os.environ
try:
paths = env[var].split(os.pathsep)
except KeyError:
paths = []
else:
paths = [os.path.abspath(p) for p in paths]
try:
paths.remove(path)
except ValueError:
pass
env[var] = os.pathsep.join([path] + paths)
[docs]def prepend_paths(var, paths, out=None):
for path in paths.split(os.pathsep)[::-1]:
prepend_path(var, path)
[docs]def saved_var_name(name):
return '_WMT_OLD_%s' % name
[docs]def save_vars(names):
saved = {}
for name in names:
if name in os.environ:
saved[saved_var_name(name)] = os.environ[name]
return saved
[docs]def restore_vars(names):
env = {}
for name in names:
saved_name = saved_var_name(name)
if saved_name in os.environ:
env[name] = os.environ.pop(saved_name)
else:
env[name] = None
env[saved_name] = None
return env
[docs]def environ_update(env):
updated = save_vars(_PATH_NAMES + _VAR_NAMES)
for name in _PATH_NAMES:
prepend_paths(name, env[name])
for name in _VAR_NAMES:
os.environ[name] = env[name]
for name in _PATH_NAMES + _VAR_NAMES:
updated[name] = os.environ[name]
return updated
[docs]def environ_as_bash_commands(env):
commands = []
names = env.keys()
names.sort()
for name in names:
if env[name] is None:
commands.append('unset %s;' % name)
else:
commands.append('export %s="%s";' % (name, env[name]))
return commands
[docs]def activate(path, extra_bases=[]):
env = WmtEnvironment.from_config(path)
env = environ_update(env)
for base in extra_bases:
prepend_path('PATH', os.path.join(base, 'bin'), out=env)
prepend_path('LD_LIBRARY_PATH', os.path.join(base, 'lib'), out=env)
prepend_path('PYTHONPATH',
os.path.join(base, 'lib', 'python2.7', 'site-packages'),
out=env)
print(os.linesep.join(environ_as_bash_commands(env)))
[docs]def deactivate():
env = restore_vars(_PATH_NAMES + _VAR_NAMES)
print(os.linesep.join(environ_as_bash_commands(env)))
[docs]def deactivate_main():
import argparse
parser = argparse.ArgumentParser(
description='Deactivate a WMT environment')
args = parser.parse_args()
deactivate()
[docs]def activate_main():
import argparse
parser = argparse.ArgumentParser(
description='Activate a WMT environment')
parser.add_argument('file', nargs='?', type=str,
default=None, help='WMT config file')
parser.add_argument('--prepend-base', action='append', default=[],
help='Extra bases to include in environment')
args = parser.parse_args()
activate(args.file, extra_bases=args.prepend_base)