##// END OF EJS Templates
Improvements to exception handling to transport structured tracebacks....
Improvements to exception handling to transport structured tracebacks. This code is still fairly hackish, but we're starting to get there. We still need to improve the api, because right now runlines() does way too much, and I had to set the exception state in a temporary private variable. But client-side things are working better, so we can continue fixing the kernel without bottlenecking Evan.

File last commit:

r2267:928c921b
r2838:cbe60016
Show More
envpersist.py
92 lines | 2.5 KiB | text/x-python | PythonLexer
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 # -*- coding: utf-8 -*-
vivainio
docstring update
r638 """ %env magic command for storing environment variables persistently
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 """
Brian Granger
ipapi.py => core/ipapi.py and imports updated.
r2027 from IPython.core import ipapi
Brian Granger
Continuing a massive refactor of everything.
r2205 from IPython.core.error import TryNext
Brian Granger
ipapi.py => core/ipapi.py and imports updated.
r2027 ip = ipapi.get()
vivainio
envpersist.py extension - boosts %env to remember env variables
r508
import os,sys
vivainio
Honor 'readline 0' setting when readline is installed, closes \#178
r784 def restore_env(self):
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 ip = self.getapi()
vivainio
sanitize %env options, add prepend and print
r509 env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 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
vivainio
sanitize %env options, add prepend and print
r509 for k,v in env['pre']:
os.environ[k] = v + os.environ.get(k,"")
Brian Granger
Continuing a massive refactor of everything.
r2205 raise TryNext
vivainio
envpersist.py extension - boosts %env to remember env variables
r508
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
vivainio
sanitize %env options, add prepend and print
r509 %env PATH+=;/bar - also append ;bar to PATH
vivainio
typofix
r510 %env PATH-=/wbin; - prepend /wbin; to PATH
vivainio
sanitize %env options, add prepend and print
r509 %env -d VISUAL - forget VISUAL persistent val
%env -p - print all persistent env modifications
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 """
if not parameter_s.strip():
return os.environ.data
ip = self.getapi()
db = ip.db
vivainio
sanitize %env options, add prepend and print
r509 env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
vivainio
envpersist.py extension - boosts %env to remember env variables
r508
vivainio
sanitize %env options, add prepend and print
r509 if parameter_s.startswith('-p'):
return env
elif parameter_s.startswith('-d'):
parts = (parameter_s.split()[1], '<del>')
else:
parts = parameter_s.strip().split('=')
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 if len(parts) == 2:
vivainio
%env 'append on set' bug fixed, strip spaces to allow %env A = 10 instead of %env A=10
r693 k,v = [p.strip() for p in parts]
vivainio
envpersist.py extension - boosts %env to remember env variables
r508
vivainio
sanitize %env options, add prepend and print
r509 if v == '<del>':
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 if k in env['set']:
del env['set'][k]
vivainio
sanitize %env options, add prepend and print
r509 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
vivainio
envpersist.py extension - boosts %env to remember env variables
r508
elif k.endswith('+'):
k = k[:-1]
env['add'].append((k,v))
os.environ[k] += v
vivainio
sanitize %env options, add prepend and print
r509 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]
vivainio
envpersist.py extension - boosts %env to remember env variables
r508 else:
env['set'][k] = v
print "Setting",k,"to",v
vivainio
%env 'append on set' bug fixed, strip spaces to allow %env A = 10 instead of %env A=10
r693 os.environ[k] = v
vivainio
envpersist.py extension - boosts %env to remember env variables
r508
db['stored_env'] = env
vivainio
%env completer
r793 def env_completer(self,event):
""" Custom completer that lists all env vars """
return os.environ.keys()
vivainio
envpersist.py extension - boosts %env to remember env variables
r508
Brian Granger
Continuing a massive refactor of everything.
r2205 ip.define_magic('env', persist_env)
vivainio
%env completer
r793 ip.set_hook('complete_command',env_completer, str_key = '%env')