##// END OF EJS Templates
Merge pull request #11930 from gokceneraslan/master...
Matthias Bussonnier -
r25234:61c70483 merge
parent child Browse files
Show More
@@ -20,12 +20,15 b' from IPython.core.magic import Magics, magics_class, line_magic'
20 20 from traitlets import Bool
21 21
22 22
23 def restore_aliases(ip):
23 def restore_aliases(ip, alias=None):
24 24 staliases = ip.db.get('stored_aliases', {})
25 if alias is None:
25 26 for k,v in staliases.items():
26 27 #print "restore alias",k,v # dbg
27 28 #self.alias_table[k] = v
28 29 ip.alias_manager.define_alias(k,v)
30 else:
31 ip.alias_manager.define_alias(alias, staliases[alias])
29 32
30 33
31 34 def refresh_variables(ip):
@@ -94,13 +97,13 b' class StoreMagics(Magics):'
94 97
95 98 * ``%store`` - Show list of all variables and their current
96 99 values
97 * ``%store spam`` - Store the *current* value of the variable spam
98 to disk
100 * ``%store spam bar`` - Store the *current* value of the variables spam
101 and bar to disk
99 102 * ``%store -d spam`` - Remove the variable and its value from storage
100 103 * ``%store -z`` - Remove all variables from storage
101 * ``%store -r`` - Refresh all variables from store (overwrite
102 current vals)
103 * ``%store -r spam bar`` - Refresh specified variables from store
104 * ``%store -r`` - Refresh all variables, aliases and directory history
105 from store (overwrite current vals)
106 * ``%store -r spam bar`` - Refresh specified variables and aliases from store
104 107 (delete current val)
105 108 * ``%store foo >a.txt`` - Store value of foo to new file a.txt
106 109 * ``%store foo >>a.txt`` - Append value of foo to file a.txt
@@ -116,7 +119,7 b' class StoreMagics(Magics):'
116 119 """
117 120
118 121 opts,argsl = self.parse_options(parameter_s,'drz',mode='string')
119 args = argsl.split(None,1)
122 args = argsl.split()
120 123 ip = self.shell
121 124 db = ip.db
122 125 # delete
@@ -141,7 +144,10 b' class StoreMagics(Magics):'
141 144 try:
142 145 obj = db['autorestore/' + arg]
143 146 except KeyError:
144 print("no stored variable %s" % arg)
147 try:
148 restore_aliases(ip, alias=arg)
149 except KeyError:
150 print("no stored variable or alias %s" % arg)
145 151 else:
146 152 ip.user_ns[arg] = obj
147 153 else:
@@ -189,11 +195,12 b' class StoreMagics(Magics):'
189 195 return
190 196
191 197 # %store foo
198 for arg in args:
192 199 try:
193 obj = ip.user_ns[args[0]]
200 obj = ip.user_ns[arg]
194 201 except KeyError:
195 202 # it might be an alias
196 name = args[0]
203 name = arg
197 204 try:
198 205 cmd = ip.alias_manager.retrieve_alias(name)
199 206 except ValueError:
@@ -213,11 +220,11 b' class StoreMagics(Magics):'
213 220 Proper storage of interactively declared classes (or instances
214 221 of those classes) is not possible! Only instances
215 222 of classes in real modules on file system can be %%store'd.
216 """ % (args[0], obj) ))
223 """ % (arg, obj) ))
217 224 return
218 225 #pickled = pickle.dumps(obj)
219 db[ 'autorestore/' + args[0] ] = obj
220 print("Stored '%s' (%s)" % (args[0], obj.__class__.__name__))
226 db[ 'autorestore/' + arg ] = obj
227 print("Stored '%s' (%s)" % (arg, obj.__class__.__name__))
221 228
222 229
223 230 def load_ipython_extension(ip):
@@ -10,27 +10,40 b' def setup_module():'
10 10 def test_store_restore():
11 11 assert 'bar' not in ip.user_ns, "Error: some other test leaked `bar` in user_ns"
12 12 assert 'foo' not in ip.user_ns, "Error: some other test leaked `foo` in user_ns"
13 assert 'foobar' not in ip.user_ns, "Error: some other test leaked `foobar` in user_ns"
14 assert 'foobaz' not in ip.user_ns, "Error: some other test leaked `foobaz` in user_ns"
13 15 ip.user_ns['foo'] = 78
14 16 ip.magic('alias bar echo "hello"')
17 ip.user_ns['foobar'] = 79
18 ip.user_ns['foobaz'] = '80'
15 19 tmpd = tempfile.mkdtemp()
16 20 ip.magic('cd ' + tmpd)
17 21 ip.magic('store foo')
18 22 ip.magic('store bar')
23 ip.magic('store foobar foobaz')
19 24
20 25 # Check storing
21 26 nt.assert_equal(ip.db['autorestore/foo'], 78)
22 27 nt.assert_in('bar', ip.db['stored_aliases'])
28 nt.assert_equal(ip.db['autorestore/foobar'], 79)
29 nt.assert_equal(ip.db['autorestore/foobaz'], '80')
23 30
24 31 # Remove those items
25 32 ip.user_ns.pop('foo', None)
33 ip.user_ns.pop('foobar', None)
34 ip.user_ns.pop('foobaz', None)
26 35 ip.alias_manager.undefine_alias('bar')
27 36 ip.magic('cd -')
28 37 ip.user_ns['_dh'][:] = []
29 38
30 39 # Check restoring
31 ip.magic('store -r')
40 ip.magic('store -r foo bar foobar foobaz')
32 41 nt.assert_equal(ip.user_ns['foo'], 78)
33 42 assert ip.alias_manager.is_alias('bar')
43 nt.assert_equal(ip.user_ns['foobar'], 79)
44 nt.assert_equal(ip.user_ns['foobaz'], '80')
45
46 ip.magic('store -r') # restores _dh too
34 47 nt.assert_in(os.path.realpath(tmpd), ip.user_ns['_dh'])
35 48
36 49 os.rmdir(tmpd)
General Comments 0
You need to be logged in to leave comments. Login now