##// END OF EJS Templates
Robustness fixes in test suite machinery....
Robustness fixes in test suite machinery. Added a module-level INSTALLED flag, which can be set to false if the test suite is being run in-place (without ipython having been installed at all). This is because how we call and import things must be done differently depending on whether the code is installed or is being run in-place. The only ones that can know this reliably are the entry-point scripts, so those are responsible for setting this flag. Also made the code that validates ipython in subprocesses report errors better, by checking stderr for errors before validating stdout output, as anything on stderr will be likely informative of the real problem.

File last commit:

r2267:928c921b
r2494:c8938204
Show More
envpersist.py
92 lines | 2.5 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
""" %env magic command for storing environment variables persistently
"""
from IPython.core import ipapi
from IPython.core.error import TryNext
ip = ipapi.get()
import os,sys
def restore_env(self):
ip = self.getapi()
env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
for k,v in env['set'].items():
os.environ[k] = v
for k,v in env['add']:
os.environ[k] = os.environ.get(k,"") + v
for k,v in env['pre']:
os.environ[k] = v + os.environ.get(k,"")
raise TryNext
ip.set_hook('late_startup_hook', restore_env)
def persist_env(self, parameter_s=''):
""" Store environment variables persistently
IPython remembers the values across sessions, which is handy to avoid
editing startup files.
%env - Show all environment variables
%env VISUAL=jed - set VISUAL to jed
%env PATH+=;/foo - append ;foo to PATH
%env PATH+=;/bar - also append ;bar to PATH
%env PATH-=/wbin; - prepend /wbin; to PATH
%env -d VISUAL - forget VISUAL persistent val
%env -p - print all persistent env modifications
"""
if not parameter_s.strip():
return os.environ.data
ip = self.getapi()
db = ip.db
env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
if parameter_s.startswith('-p'):
return env
elif parameter_s.startswith('-d'):
parts = (parameter_s.split()[1], '<del>')
else:
parts = parameter_s.strip().split('=')
if len(parts) == 2:
k,v = [p.strip() for p in parts]
if v == '<del>':
if k in env['set']:
del env['set'][k]
env['add'] = [el for el in env['add'] if el[0] != k]
env['pre'] = [el for el in env['pre'] if el[0] != k]
print "Forgot '%s' (for next session)" % k
elif k.endswith('+'):
k = k[:-1]
env['add'].append((k,v))
os.environ[k] += v
print k,"after append =",os.environ[k]
elif k.endswith('-'):
k = k[:-1]
env['pre'].append((k,v))
os.environ[k] = v + os.environ.get(k,"")
print k,"after prepend =",os.environ[k]
else:
env['set'][k] = v
print "Setting",k,"to",v
os.environ[k] = v
db['stored_env'] = env
def env_completer(self,event):
""" Custom completer that lists all env vars """
return os.environ.keys()
ip.define_magic('env', persist_env)
ip.set_hook('complete_command',env_completer, str_key = '%env')