Show More
@@ -25,10 +25,12 b' To automatically restore stored variables at startup, add this to your' | |||
|
25 | 25 | import inspect, os, sys, textwrap |
|
26 | 26 | |
|
27 | 27 | # Our own |
|
28 | from IPython.config.configurable import Configurable | |
|
28 | 29 | from IPython.core.error import UsageError |
|
29 | 30 | from IPython.core.fakemodule import FakeModule |
|
30 | 31 | from IPython.core.magic import Magics, magics_class, line_magic |
|
31 | 32 | from IPython.testing.skipdoctest import skip_doctest |
|
33 | from IPython.utils.traitlets import Bool | |
|
32 | 34 | |
|
33 | 35 | #----------------------------------------------------------------------------- |
|
34 | 36 | # Functions and classes |
@@ -68,11 +70,24 b' def restore_data(ip):' | |||
|
68 | 70 | |
|
69 | 71 | |
|
70 | 72 | @magics_class |
|
71 | class StoreMagics(Magics): | |
|
73 | class StoreMagics(Magics, Configurable): | |
|
72 | 74 | """Lightweight persistence for python variables. |
|
73 | 75 | |
|
74 | 76 | Provides the %store magic.""" |
|
75 | 77 | |
|
78 | autorestore = Bool(False, config=True, help= | |
|
79 | """If True, any %store-d variables will be automatically restored | |
|
80 | when IPython starts. | |
|
81 | """ | |
|
82 | ) | |
|
83 | ||
|
84 | def __init__(self, shell): | |
|
85 | Configurable.__init__(self, config=shell.config) | |
|
86 | Magics.__init__(self, shell=shell) | |
|
87 | self.shell.configurables.append(self) | |
|
88 | if self.autorestore: | |
|
89 | restore_data(self.shell) | |
|
90 | ||
|
76 | 91 | @skip_doctest |
|
77 | 92 | @line_magic |
|
78 | 93 | def store(self, parameter_s=''): |
@@ -1,5 +1,6 b'' | |||
|
1 | 1 | import tempfile, os |
|
2 | 2 | |
|
3 | from IPython.config.loader import Config | |
|
3 | 4 | import nose.tools as nt |
|
4 | 5 | |
|
5 | 6 | ip = get_ipython() |
@@ -30,3 +31,20 b' def test_store_restore():' | |||
|
30 | 31 | nt.assert_in(os.path.realpath(tmpd), ip.user_ns['_dh']) |
|
31 | 32 | |
|
32 | 33 | os.rmdir(tmpd) |
|
34 | ||
|
35 | def test_autorestore(): | |
|
36 | ip.user_ns['foo'] = 95 | |
|
37 | ip.magic('store foo') | |
|
38 | del ip.user_ns['foo'] | |
|
39 | c = Config() | |
|
40 | c.StoreMagics.autorestore = False | |
|
41 | orig_config = ip.config | |
|
42 | try: | |
|
43 | ip.config = c | |
|
44 | ip.extension_manager.reload_extension('storemagic') | |
|
45 | nt.assert_not_in('foo', ip.user_ns) | |
|
46 | c.StoreMagics.autorestore = True | |
|
47 | ip.extension_manager.reload_extension('storemagic') | |
|
48 | nt.assert_equal(ip.user_ns['foo'], 95) | |
|
49 | finally: | |
|
50 | ip.config = orig_config |
@@ -47,6 +47,7 b' from IPython.core.magics import ScriptMagics' | |||
|
47 | 47 | from IPython.core.shellapp import ( |
|
48 | 48 | InteractiveShellApp, shell_flags, shell_aliases |
|
49 | 49 | ) |
|
50 | from IPython.extensions.storemagic import StoreMagics | |
|
50 | 51 | from IPython.terminal.interactiveshell import TerminalInteractiveShell |
|
51 | 52 | from IPython.utils import warn |
|
52 | 53 | from IPython.utils.path import get_ipython_dir, check_for_old_config |
@@ -219,6 +220,7 b' class TerminalIPythonApp(BaseIPythonApplication, InteractiveShellApp):' | |||
|
219 | 220 | PlainTextFormatter, |
|
220 | 221 | IPCompleter, |
|
221 | 222 | ScriptMagics, |
|
223 | StoreMagics, | |
|
222 | 224 | ] |
|
223 | 225 | |
|
224 | 226 | subcommands = Dict(dict( |
General Comments 0
You need to be logged in to leave comments.
Login now