##// END OF EJS Templates
sanitize %env options, add prepend and print
vivainio -
Show More
@@ -1,78 +1,96 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 %store magic for lightweight persistence.
3 %store magic for lightweight persistence.
4
4
5 Stores variables, aliases etc. in PickleShare database.
5 Stores variables, aliases etc. in PickleShare database.
6
6
7 $Id: iplib.py 1107 2006-01-30 19:02:20Z vivainio $
7 $Id: iplib.py 1107 2006-01-30 19:02:20Z vivainio $
8 """
8 """
9
9
10 import IPython.ipapi
10 import IPython.ipapi
11 ip = IPython.ipapi.get()
11 ip = IPython.ipapi.get()
12
12
13 import os,sys
13 import os,sys
14
14
15 def restore_env(self):
15 def restore_env(self):
16 ip = self.getapi()
16 ip = self.getapi()
17 env = ip.db.get('stored_env', {'set' : {}, 'add' : []})
17 env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
18 for k,v in env['set'].items():
18 for k,v in env['set'].items():
19 #print "restore alias",k,v # dbg
19 #print "restore alias",k,v # dbg
20 os.environ[k] = v
20 os.environ[k] = v
21 self.alias_table[k] = v
21 self.alias_table[k] = v
22 for k,v in env['add']:
22 for k,v in env['add']:
23 os.environ[k] = os.environ.get(k,"") + v
23 os.environ[k] = os.environ.get(k,"") + v
24 for k,v in env['pre']:
25 os.environ[k] = v + os.environ.get(k,"")
24
26
25
27
26 ip.set_hook('late_startup_hook', restore_env)
28 ip.set_hook('late_startup_hook', restore_env)
27
29
28 def persist_env(self, parameter_s=''):
30 def persist_env(self, parameter_s=''):
29 """ Store environment variables persistently
31 """ Store environment variables persistently
30
32
31 IPython remembers the values across sessions, which is handy to avoid
33 IPython remembers the values across sessions, which is handy to avoid
32 editing startup files.
34 editing startup files.
33
35
34 %env - Show all environment variables
36 %env - Show all environment variables
35 %env VISUAL=jed - set VISUAL to jed
37 %env VISUAL=jed - set VISUAL to jed
36 %env PATH+=;/foo - append ;foo to PATH
38 %env PATH+=;/foo - append ;foo to PATH
37 %env PATH+=;/foo - also append ;bar to PATH
39 %env PATH+=;/bar - also append ;bar to PATH
38 %env VISUAL=del - forget VISUAL persistent val
40 %env PATH-=/wbin; - prepend /wbin; ts PATH
39
41 %env -d VISUAL - forget VISUAL persistent val
42 %env -p - print all persistent env modifications
40 """
43 """
41
44
42
45
43
46
44 if not parameter_s.strip():
47 if not parameter_s.strip():
45 return os.environ.data
48 return os.environ.data
46
49
47 parts = parameter_s.strip().split('=')
48
49 ip = self.getapi()
50 ip = self.getapi()
50 db = ip.db
51 db = ip.db
51 env = ip.db.get('stored_env', {'set' : {}, 'add' : []})
52 env = ip.db.get('stored_env', {'set' : {}, 'add' : [], 'pre' : []})
52
53
54 if parameter_s.startswith('-p'):
55 return env
56
57 elif parameter_s.startswith('-d'):
58 parts = (parameter_s.split()[1], '<del>')
59
60 else:
61 parts = parameter_s.strip().split('=')
62
53 if len(parts) == 2:
63 if len(parts) == 2:
54 k,v = parts
64 k,v = parts
55
56
65
57 if v == 'del':
66 if v == '<del>':
58 if k in env['set']:
67 if k in env['set']:
59 del env['set'][k]
68 del env['set'][k]
60 env['add'] = [el for el in env['add'] if el[0] == k]
69 env['add'] = [el for el in env['add'] if el[0] != k]
61 #del os.environ[k]
70 env['pre'] = [el for el in env['pre'] if el[0] != k]
62 print "Forgot",k,"(for next session)"
71
72 print "Forgot '%s' (for next session)" % k
63
73
64 elif k.endswith('+'):
74 elif k.endswith('+'):
65 k = k[:-1]
75 k = k[:-1]
66 env['add'].append((k,v))
76 env['add'].append((k,v))
67 os.environ[k] += v
77 os.environ[k] += v
78 print k,"after append =",os.environ[k]
79 elif k.endswith('-'):
80 k = k[:-1]
81 env['pre'].append((k,v))
82 os.environ[k] = v + os.environ.get(k,"")
83 print k,"after prepend =",os.environ[k]
84
85
68 else:
86 else:
69 env['set'][k] = v
87 env['set'][k] = v
70 print "Setting",k,"to",v
88 print "Setting",k,"to",v
71 os.environ[k] = os.environ.get(k,"") + v
89 os.environ[k] = os.environ.get(k,"") + v
72
90
73 db['stored_env'] = env
91 db['stored_env'] = env
74
92
75
93
76
94
77
95
78 ip.expose_magic('env', persist_env)
96 ip.expose_magic('env', persist_env)
General Comments 0
You need to be logged in to leave comments. Login now