##// END OF EJS Templates
Add Ville's patch for the new %store persistence magic.
fperez -
Show More
@@ -1,7 +1,7 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 966 2005-12-29 08:34:07Z fperez $"""
4 $Id: Magic.py 968 2005-12-29 17:15:38Z fperez $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
@@ -30,6 +30,7 b' import sys'
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 from cStringIO import StringIO
34 from cStringIO import StringIO
34 from getopt import getopt
35 from getopt import getopt
35 from pprint import pprint, pformat
36 from pprint import pprint, pformat
@@ -2525,6 +2526,80 b' Defaulting color scheme to \'NoColor\'"""'
2525
2526
2526 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2527 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2527
2528
2529 def magic_store(self, parameter_s=''):
2530 """Lightweight persistence for ipython variables
2531
2532 Example:
2533
2534 ville@badger[~]|1> A = ['hello',10,'world']
2535 ville@badger[~]|2> %store A
2536 ville@badger[~]|3> Exit
2537
2538 (IPython session is closed and started again...)
2539
2540 ville@badger:~$ ipython -p pysh
2541 ville@badger[~]|1> print A
2542
2543 ['hello', 10, 'world']
2544
2545 Usage:
2546
2547 %store - Show list of all variables and their current values\\
2548 %store <var> - Store the *current* value of the variable to disk\\
2549 %store -d - Remove the variable and its value from storage\\
2550 %store -r - Remove all variables from storage
2551
2552 It should be noted that if you change the value of a variable, you
2553 need to %store it again if you want to persist the new value.
2554
2555 Note also that the variables will need to be pickleable; most basic
2556 python types can be safely %stored.
2557 """
2558
2559 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2560 # delete
2561 if opts.has_key('d'):
2562 try:
2563 todel = args[0]
2564 except IndexError:
2565 error('You must provide the variable to forget')
2566 else:
2567 try:
2568 del self.shell.persist['S:' + todel]
2569 except:
2570 error("Can't delete variable '%s'" % todel)
2571 # reset
2572 elif opts.has_key('r'):
2573 for k in self.shell.persist.keys():
2574 if k.startswith('S:'):
2575 del self.shell.persist[k]
2576
2577 # run without arguments -> list variables & values
2578 elif not args:
2579 vars = [v[2:] for v in self.shell.persist.keys() if v.startswith('S:')]
2580 vars.sort()
2581 if vars:
2582 size = max(map(len,vars))
2583 else:
2584 size = 0
2585
2586 fmt = '%-'+str(size)+'s -> %s'
2587 print 'Stored variables and their in-memory values:'
2588 for var in vars:
2589 # print 30 first characters from every var
2590 print fmt % (var,repr(self.shell.user_ns.get(var, '<unavailable>'))[:50])
2591
2592 # default action - store the variable
2593 else:
2594 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2595 self.shell.persist[ 'S:' + args[0] ] = pickled
2596 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2597
2598
2599
2600
2601
2602
2528 def magic_bookmark(self, parameter_s=''):
2603 def magic_bookmark(self, parameter_s=''):
2529 """Manage IPython's bookmark system.
2604 """Manage IPython's bookmark system.
2530
2605
@@ -6,7 +6,7 b' Requires Python 2.1 or newer.'
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 967 2005-12-29 09:02:13Z fperez $
9 $Id: iplib.py 968 2005-12-29 17:15:38Z fperez $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
@@ -691,6 +691,22 b' class InteractiveShell(Magic):'
691 self.persist = pickle.load(file(self.persist_fname))
691 self.persist = pickle.load(file(self.persist_fname))
692 except:
692 except:
693 self.persist = {}
693 self.persist = {}
694
695
696 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
697 try:
698 obj = pickle.loads(value)
699 except:
700
701 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
702 print "The error was:",sys.exc_info()[0]
703 continue
704
705
706 self.user_ns[key] = obj
707
708
709
694
710
695 def set_hook(self,name,hook):
711 def set_hook(self,name,hook):
696 """set_hook(name,hook) -> sets an internal IPython hook.
712 """set_hook(name,hook) -> sets an internal IPython hook.
@@ -5,6 +5,10 b''
5 time, yet I was still avoiding subclassing the builtin types. No
5 time, yet I was still avoiding subclassing the builtin types. No
6 more (I'm also starting to use properties, though I won't shift to
6 more (I'm also starting to use properties, though I won't shift to
7 2.3-specific features quite yet).
7 2.3-specific features quite yet).
8 (magic_store): added Ville's patch for lightweight variable
9 persistence, after a request on the user list by Matt Wilkie
10 <maphew at gmail.com>. The new %store magic's docstring has full
11 details.
8
12
9 * IPython/iplib.py (InteractiveShell.post_config_initialization):
13 * IPython/iplib.py (InteractiveShell.post_config_initialization):
10 changed the default logfile name from 'ipython.log' to
14 changed the default logfile name from 'ipython.log' to
General Comments 0
You need to be logged in to leave comments. Login now