##// END OF EJS Templates
use history_saving_wrapper to store/restore readline history
vivainio -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,22 +1,15 b''
1 import pydb
1 import pydb
2 import IPython.ipapi
2 import IPython.ipapi
3 from IPython.genutils import arg_split
3 from IPython.genutils import arg_split
4 ip = IPython.ipapi.get()
4 ip = IPython.ipapi.get()
5
5
6 def call_pydb(self, args):
6 def call_pydb(self, args):
7 argl = arg_split(args)
7 argl = arg_split(args)
8 # print argl # dbg
8 # print argl # dbg
9 if ip.IP.has_readline:
9 ip.IP.history_saving_wrapper( lambda : pydb.runl(*argl) )()
10 ip.IP.savehist()
11 try:
12 pydb.runl(*argl)
13 finally:
14
15 if ip.IP.has_readline:
16 ip.IP.readline.read_history_file(self.shell.histfile)
17
10
18 ip.expose_magic("pydb",call_pydb)
11 ip.expose_magic("pydb",call_pydb)
19
12
20
13
21
14
22 No newline at end of file
15
@@ -1,2462 +1,2480 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 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 1859 2006-11-02 06:39:54Z vivainio $
9 $Id: iplib.py 1868 2006-11-02 15:29:10Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from IPython import Release
31 from IPython import Release
32 __author__ = '%s <%s>\n%s <%s>' % \
32 __author__ = '%s <%s>\n%s <%s>' % \
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 __license__ = Release.license
34 __license__ = Release.license
35 __version__ = Release.version
35 __version__ = Release.version
36
36
37 # Python standard modules
37 # Python standard modules
38 import __main__
38 import __main__
39 import __builtin__
39 import __builtin__
40 import StringIO
40 import StringIO
41 import bdb
41 import bdb
42 import cPickle as pickle
42 import cPickle as pickle
43 import codeop
43 import codeop
44 import exceptions
44 import exceptions
45 import glob
45 import glob
46 import inspect
46 import inspect
47 import keyword
47 import keyword
48 import new
48 import new
49 import os
49 import os
50 import pydoc
50 import pydoc
51 import re
51 import re
52 import shutil
52 import shutil
53 import string
53 import string
54 import sys
54 import sys
55 import tempfile
55 import tempfile
56 import traceback
56 import traceback
57 import types
57 import types
58 import pickleshare
58 import pickleshare
59 from sets import Set
59 from sets import Set
60 from pprint import pprint, pformat
60 from pprint import pprint, pformat
61
61
62 # IPython's own modules
62 # IPython's own modules
63 import IPython
63 import IPython
64 from IPython import OInspect,PyColorize,ultraTB
64 from IPython import OInspect,PyColorize,ultraTB
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 from IPython.FakeModule import FakeModule
66 from IPython.FakeModule import FakeModule
67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 from IPython.Logger import Logger
68 from IPython.Logger import Logger
69 from IPython.Magic import Magic
69 from IPython.Magic import Magic
70 from IPython.Prompts import CachedOutput
70 from IPython.Prompts import CachedOutput
71 from IPython.ipstruct import Struct
71 from IPython.ipstruct import Struct
72 from IPython.background_jobs import BackgroundJobManager
72 from IPython.background_jobs import BackgroundJobManager
73 from IPython.usage import cmd_line_usage,interactive_usage
73 from IPython.usage import cmd_line_usage,interactive_usage
74 from IPython.genutils import *
74 from IPython.genutils import *
75 from IPython.strdispatch import StrDispatch
75 from IPython.strdispatch import StrDispatch
76 import IPython.ipapi
76 import IPython.ipapi
77
77
78 # Globals
78 # Globals
79
79
80 # store the builtin raw_input globally, and use this always, in case user code
80 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
81 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
82 raw_input_original = raw_input
83
83
84 # compiled regexps for autoindent management
84 # compiled regexps for autoindent management
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86
86
87
87
88 #****************************************************************************
88 #****************************************************************************
89 # Some utility function definitions
89 # Some utility function definitions
90
90
91 ini_spaces_re = re.compile(r'^(\s+)')
91 ini_spaces_re = re.compile(r'^(\s+)')
92
92
93 def num_ini_spaces(strng):
93 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
94 """Return the number of initial spaces in a string"""
95
95
96 ini_spaces = ini_spaces_re.match(strng)
96 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
97 if ini_spaces:
98 return ini_spaces.end()
98 return ini_spaces.end()
99 else:
99 else:
100 return 0
100 return 0
101
101
102 def softspace(file, newvalue):
102 def softspace(file, newvalue):
103 """Copied from code.py, to remove the dependency"""
103 """Copied from code.py, to remove the dependency"""
104
104
105 oldvalue = 0
105 oldvalue = 0
106 try:
106 try:
107 oldvalue = file.softspace
107 oldvalue = file.softspace
108 except AttributeError:
108 except AttributeError:
109 pass
109 pass
110 try:
110 try:
111 file.softspace = newvalue
111 file.softspace = newvalue
112 except (AttributeError, TypeError):
112 except (AttributeError, TypeError):
113 # "attribute-less object" or "read-only attributes"
113 # "attribute-less object" or "read-only attributes"
114 pass
114 pass
115 return oldvalue
115 return oldvalue
116
116
117
117
118 #****************************************************************************
118 #****************************************************************************
119 # Local use exceptions
119 # Local use exceptions
120 class SpaceInInput(exceptions.Exception): pass
120 class SpaceInInput(exceptions.Exception): pass
121
121
122
122
123 #****************************************************************************
123 #****************************************************************************
124 # Local use classes
124 # Local use classes
125 class Bunch: pass
125 class Bunch: pass
126
126
127 class Undefined: pass
127 class Undefined: pass
128
128
129 class Quitter(object):
129 class Quitter(object):
130 """Simple class to handle exit, similar to Python 2.5's.
130 """Simple class to handle exit, similar to Python 2.5's.
131
131
132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
133 doesn't do (obviously, since it doesn't know about ipython)."""
133 doesn't do (obviously, since it doesn't know about ipython)."""
134
134
135 def __init__(self,shell,name):
135 def __init__(self,shell,name):
136 self.shell = shell
136 self.shell = shell
137 self.name = name
137 self.name = name
138
138
139 def __repr__(self):
139 def __repr__(self):
140 return 'Type %s() to exit.' % self.name
140 return 'Type %s() to exit.' % self.name
141 __str__ = __repr__
141 __str__ = __repr__
142
142
143 def __call__(self):
143 def __call__(self):
144 self.shell.exit()
144 self.shell.exit()
145
145
146 class InputList(list):
146 class InputList(list):
147 """Class to store user input.
147 """Class to store user input.
148
148
149 It's basically a list, but slices return a string instead of a list, thus
149 It's basically a list, but slices return a string instead of a list, thus
150 allowing things like (assuming 'In' is an instance):
150 allowing things like (assuming 'In' is an instance):
151
151
152 exec In[4:7]
152 exec In[4:7]
153
153
154 or
154 or
155
155
156 exec In[5:9] + In[14] + In[21:25]"""
156 exec In[5:9] + In[14] + In[21:25]"""
157
157
158 def __getslice__(self,i,j):
158 def __getslice__(self,i,j):
159 return ''.join(list.__getslice__(self,i,j))
159 return ''.join(list.__getslice__(self,i,j))
160
160
161 class SyntaxTB(ultraTB.ListTB):
161 class SyntaxTB(ultraTB.ListTB):
162 """Extension which holds some state: the last exception value"""
162 """Extension which holds some state: the last exception value"""
163
163
164 def __init__(self,color_scheme = 'NoColor'):
164 def __init__(self,color_scheme = 'NoColor'):
165 ultraTB.ListTB.__init__(self,color_scheme)
165 ultraTB.ListTB.__init__(self,color_scheme)
166 self.last_syntax_error = None
166 self.last_syntax_error = None
167
167
168 def __call__(self, etype, value, elist):
168 def __call__(self, etype, value, elist):
169 self.last_syntax_error = value
169 self.last_syntax_error = value
170 ultraTB.ListTB.__call__(self,etype,value,elist)
170 ultraTB.ListTB.__call__(self,etype,value,elist)
171
171
172 def clear_err_state(self):
172 def clear_err_state(self):
173 """Return the current error state and clear it"""
173 """Return the current error state and clear it"""
174 e = self.last_syntax_error
174 e = self.last_syntax_error
175 self.last_syntax_error = None
175 self.last_syntax_error = None
176 return e
176 return e
177
177
178 #****************************************************************************
178 #****************************************************************************
179 # Main IPython class
179 # Main IPython class
180
180
181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
182 # until a full rewrite is made. I've cleaned all cross-class uses of
182 # until a full rewrite is made. I've cleaned all cross-class uses of
183 # attributes and methods, but too much user code out there relies on the
183 # attributes and methods, but too much user code out there relies on the
184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
185 #
185 #
186 # But at least now, all the pieces have been separated and we could, in
186 # But at least now, all the pieces have been separated and we could, in
187 # principle, stop using the mixin. This will ease the transition to the
187 # principle, stop using the mixin. This will ease the transition to the
188 # chainsaw branch.
188 # chainsaw branch.
189
189
190 # For reference, the following is the list of 'self.foo' uses in the Magic
190 # For reference, the following is the list of 'self.foo' uses in the Magic
191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
192 # class, to prevent clashes.
192 # class, to prevent clashes.
193
193
194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
197 # 'self.value']
197 # 'self.value']
198
198
199 class InteractiveShell(object,Magic):
199 class InteractiveShell(object,Magic):
200 """An enhanced console for Python."""
200 """An enhanced console for Python."""
201
201
202 # class attribute to indicate whether the class supports threads or not.
202 # class attribute to indicate whether the class supports threads or not.
203 # Subclasses with thread support should override this as needed.
203 # Subclasses with thread support should override this as needed.
204 isthreaded = False
204 isthreaded = False
205
205
206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
207 user_ns = None,user_global_ns=None,banner2='',
207 user_ns = None,user_global_ns=None,banner2='',
208 custom_exceptions=((),None),embedded=False):
208 custom_exceptions=((),None),embedded=False):
209
209
210 # log system
210 # log system
211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
212
212
213 # some minimal strict typechecks. For some core data structures, I
213 # some minimal strict typechecks. For some core data structures, I
214 # want actual basic python types, not just anything that looks like
214 # want actual basic python types, not just anything that looks like
215 # one. This is especially true for namespaces.
215 # one. This is especially true for namespaces.
216 for ns in (user_ns,user_global_ns):
216 for ns in (user_ns,user_global_ns):
217 if ns is not None and type(ns) != types.DictType:
217 if ns is not None and type(ns) != types.DictType:
218 raise TypeError,'namespace must be a dictionary'
218 raise TypeError,'namespace must be a dictionary'
219
219
220 # Job manager (for jobs run as background threads)
220 # Job manager (for jobs run as background threads)
221 self.jobs = BackgroundJobManager()
221 self.jobs = BackgroundJobManager()
222
222
223 # Store the actual shell's name
223 # Store the actual shell's name
224 self.name = name
224 self.name = name
225
225
226 # We need to know whether the instance is meant for embedding, since
226 # We need to know whether the instance is meant for embedding, since
227 # global/local namespaces need to be handled differently in that case
227 # global/local namespaces need to be handled differently in that case
228 self.embedded = embedded
228 self.embedded = embedded
229
229
230 # command compiler
230 # command compiler
231 self.compile = codeop.CommandCompiler()
231 self.compile = codeop.CommandCompiler()
232
232
233 # User input buffer
233 # User input buffer
234 self.buffer = []
234 self.buffer = []
235
235
236 # Default name given in compilation of code
236 # Default name given in compilation of code
237 self.filename = '<ipython console>'
237 self.filename = '<ipython console>'
238
238
239 # Install our own quitter instead of the builtins. For python2.3-2.4,
239 # Install our own quitter instead of the builtins. For python2.3-2.4,
240 # this brings in behavior like 2.5, and for 2.5 it's identical.
240 # this brings in behavior like 2.5, and for 2.5 it's identical.
241 __builtin__.exit = Quitter(self,'exit')
241 __builtin__.exit = Quitter(self,'exit')
242 __builtin__.quit = Quitter(self,'quit')
242 __builtin__.quit = Quitter(self,'quit')
243
243
244 # Make an empty namespace, which extension writers can rely on both
244 # Make an empty namespace, which extension writers can rely on both
245 # existing and NEVER being used by ipython itself. This gives them a
245 # existing and NEVER being used by ipython itself. This gives them a
246 # convenient location for storing additional information and state
246 # convenient location for storing additional information and state
247 # their extensions may require, without fear of collisions with other
247 # their extensions may require, without fear of collisions with other
248 # ipython names that may develop later.
248 # ipython names that may develop later.
249 self.meta = Struct()
249 self.meta = Struct()
250
250
251 # Create the namespace where the user will operate. user_ns is
251 # Create the namespace where the user will operate. user_ns is
252 # normally the only one used, and it is passed to the exec calls as
252 # normally the only one used, and it is passed to the exec calls as
253 # the locals argument. But we do carry a user_global_ns namespace
253 # the locals argument. But we do carry a user_global_ns namespace
254 # given as the exec 'globals' argument, This is useful in embedding
254 # given as the exec 'globals' argument, This is useful in embedding
255 # situations where the ipython shell opens in a context where the
255 # situations where the ipython shell opens in a context where the
256 # distinction between locals and globals is meaningful.
256 # distinction between locals and globals is meaningful.
257
257
258 # FIXME. For some strange reason, __builtins__ is showing up at user
258 # FIXME. For some strange reason, __builtins__ is showing up at user
259 # level as a dict instead of a module. This is a manual fix, but I
259 # level as a dict instead of a module. This is a manual fix, but I
260 # should really track down where the problem is coming from. Alex
260 # should really track down where the problem is coming from. Alex
261 # Schmolck reported this problem first.
261 # Schmolck reported this problem first.
262
262
263 # A useful post by Alex Martelli on this topic:
263 # A useful post by Alex Martelli on this topic:
264 # Re: inconsistent value from __builtins__
264 # Re: inconsistent value from __builtins__
265 # Von: Alex Martelli <aleaxit@yahoo.com>
265 # Von: Alex Martelli <aleaxit@yahoo.com>
266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
267 # Gruppen: comp.lang.python
267 # Gruppen: comp.lang.python
268
268
269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
271 # > <type 'dict'>
271 # > <type 'dict'>
272 # > >>> print type(__builtins__)
272 # > >>> print type(__builtins__)
273 # > <type 'module'>
273 # > <type 'module'>
274 # > Is this difference in return value intentional?
274 # > Is this difference in return value intentional?
275
275
276 # Well, it's documented that '__builtins__' can be either a dictionary
276 # Well, it's documented that '__builtins__' can be either a dictionary
277 # or a module, and it's been that way for a long time. Whether it's
277 # or a module, and it's been that way for a long time. Whether it's
278 # intentional (or sensible), I don't know. In any case, the idea is
278 # intentional (or sensible), I don't know. In any case, the idea is
279 # that if you need to access the built-in namespace directly, you
279 # that if you need to access the built-in namespace directly, you
280 # should start with "import __builtin__" (note, no 's') which will
280 # should start with "import __builtin__" (note, no 's') which will
281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
282
282
283 # These routines return properly built dicts as needed by the rest of
283 # These routines return properly built dicts as needed by the rest of
284 # the code, and can also be used by extension writers to generate
284 # the code, and can also be used by extension writers to generate
285 # properly initialized namespaces.
285 # properly initialized namespaces.
286 user_ns = IPython.ipapi.make_user_ns(user_ns)
286 user_ns = IPython.ipapi.make_user_ns(user_ns)
287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
288
288
289 # Assign namespaces
289 # Assign namespaces
290 # This is the namespace where all normal user variables live
290 # This is the namespace where all normal user variables live
291 self.user_ns = user_ns
291 self.user_ns = user_ns
292 # Embedded instances require a separate namespace for globals.
292 # Embedded instances require a separate namespace for globals.
293 # Normally this one is unused by non-embedded instances.
293 # Normally this one is unused by non-embedded instances.
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312
312
313 # The user namespace MUST have a pointer to the shell itself.
313 # The user namespace MUST have a pointer to the shell itself.
314 self.user_ns[name] = self
314 self.user_ns[name] = self
315
315
316 # We need to insert into sys.modules something that looks like a
316 # We need to insert into sys.modules something that looks like a
317 # module but which accesses the IPython namespace, for shelve and
317 # module but which accesses the IPython namespace, for shelve and
318 # pickle to work interactively. Normally they rely on getting
318 # pickle to work interactively. Normally they rely on getting
319 # everything out of __main__, but for embedding purposes each IPython
319 # everything out of __main__, but for embedding purposes each IPython
320 # instance has its own private namespace, so we can't go shoving
320 # instance has its own private namespace, so we can't go shoving
321 # everything into __main__.
321 # everything into __main__.
322
322
323 # note, however, that we should only do this for non-embedded
323 # note, however, that we should only do this for non-embedded
324 # ipythons, which really mimic the __main__.__dict__ with their own
324 # ipythons, which really mimic the __main__.__dict__ with their own
325 # namespace. Embedded instances, on the other hand, should not do
325 # namespace. Embedded instances, on the other hand, should not do
326 # this because they need to manage the user local/global namespaces
326 # this because they need to manage the user local/global namespaces
327 # only, but they live within a 'normal' __main__ (meaning, they
327 # only, but they live within a 'normal' __main__ (meaning, they
328 # shouldn't overtake the execution environment of the script they're
328 # shouldn't overtake the execution environment of the script they're
329 # embedded in).
329 # embedded in).
330
330
331 if not embedded:
331 if not embedded:
332 try:
332 try:
333 main_name = self.user_ns['__name__']
333 main_name = self.user_ns['__name__']
334 except KeyError:
334 except KeyError:
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 else:
336 else:
337 #print "pickle hack in place" # dbg
337 #print "pickle hack in place" # dbg
338 #print 'main_name:',main_name # dbg
338 #print 'main_name:',main_name # dbg
339 sys.modules[main_name] = FakeModule(self.user_ns)
339 sys.modules[main_name] = FakeModule(self.user_ns)
340
340
341 # List of input with multi-line handling.
341 # List of input with multi-line handling.
342 # Fill its zero entry, user counter starts at 1
342 # Fill its zero entry, user counter starts at 1
343 self.input_hist = InputList(['\n'])
343 self.input_hist = InputList(['\n'])
344 # This one will hold the 'raw' input history, without any
344 # This one will hold the 'raw' input history, without any
345 # pre-processing. This will allow users to retrieve the input just as
345 # pre-processing. This will allow users to retrieve the input just as
346 # it was exactly typed in by the user, with %hist -r.
346 # it was exactly typed in by the user, with %hist -r.
347 self.input_hist_raw = InputList(['\n'])
347 self.input_hist_raw = InputList(['\n'])
348
348
349 # list of visited directories
349 # list of visited directories
350 try:
350 try:
351 self.dir_hist = [os.getcwd()]
351 self.dir_hist = [os.getcwd()]
352 except IOError, e:
352 except IOError, e:
353 self.dir_hist = []
353 self.dir_hist = []
354
354
355 # dict of output history
355 # dict of output history
356 self.output_hist = {}
356 self.output_hist = {}
357
357
358 # dict of things NOT to alias (keywords, builtins and some magics)
358 # dict of things NOT to alias (keywords, builtins and some magics)
359 no_alias = {}
359 no_alias = {}
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 for key in keyword.kwlist + no_alias_magics:
361 for key in keyword.kwlist + no_alias_magics:
362 no_alias[key] = 1
362 no_alias[key] = 1
363 no_alias.update(__builtin__.__dict__)
363 no_alias.update(__builtin__.__dict__)
364 self.no_alias = no_alias
364 self.no_alias = no_alias
365
365
366 # make global variables for user access to these
366 # make global variables for user access to these
367 self.user_ns['_ih'] = self.input_hist
367 self.user_ns['_ih'] = self.input_hist
368 self.user_ns['_oh'] = self.output_hist
368 self.user_ns['_oh'] = self.output_hist
369 self.user_ns['_dh'] = self.dir_hist
369 self.user_ns['_dh'] = self.dir_hist
370
370
371 # user aliases to input and output histories
371 # user aliases to input and output histories
372 self.user_ns['In'] = self.input_hist
372 self.user_ns['In'] = self.input_hist
373 self.user_ns['Out'] = self.output_hist
373 self.user_ns['Out'] = self.output_hist
374
374
375 # Object variable to store code object waiting execution. This is
375 # Object variable to store code object waiting execution. This is
376 # used mainly by the multithreaded shells, but it can come in handy in
376 # used mainly by the multithreaded shells, but it can come in handy in
377 # other situations. No need to use a Queue here, since it's a single
377 # other situations. No need to use a Queue here, since it's a single
378 # item which gets cleared once run.
378 # item which gets cleared once run.
379 self.code_to_run = None
379 self.code_to_run = None
380
380
381 # escapes for automatic behavior on the command line
381 # escapes for automatic behavior on the command line
382 self.ESC_SHELL = '!'
382 self.ESC_SHELL = '!'
383 self.ESC_HELP = '?'
383 self.ESC_HELP = '?'
384 self.ESC_MAGIC = '%'
384 self.ESC_MAGIC = '%'
385 self.ESC_QUOTE = ','
385 self.ESC_QUOTE = ','
386 self.ESC_QUOTE2 = ';'
386 self.ESC_QUOTE2 = ';'
387 self.ESC_PAREN = '/'
387 self.ESC_PAREN = '/'
388
388
389 # And their associated handlers
389 # And their associated handlers
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
393 self.ESC_MAGIC : self.handle_magic,
393 self.ESC_MAGIC : self.handle_magic,
394 self.ESC_HELP : self.handle_help,
394 self.ESC_HELP : self.handle_help,
395 self.ESC_SHELL : self.handle_shell_escape,
395 self.ESC_SHELL : self.handle_shell_escape,
396 }
396 }
397
397
398 # class initializations
398 # class initializations
399 Magic.__init__(self,self)
399 Magic.__init__(self,self)
400
400
401 # Python source parser/formatter for syntax highlighting
401 # Python source parser/formatter for syntax highlighting
402 pyformat = PyColorize.Parser().format
402 pyformat = PyColorize.Parser().format
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404
404
405 # hooks holds pointers used for user-side customizations
405 # hooks holds pointers used for user-side customizations
406 self.hooks = Struct()
406 self.hooks = Struct()
407
407
408 self.strdispatchers = {}
408 self.strdispatchers = {}
409
409
410 # Set all default hooks, defined in the IPython.hooks module.
410 # Set all default hooks, defined in the IPython.hooks module.
411 hooks = IPython.hooks
411 hooks = IPython.hooks
412 for hook_name in hooks.__all__:
412 for hook_name in hooks.__all__:
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
415 #print "bound hook",hook_name
415 #print "bound hook",hook_name
416
416
417 # Flag to mark unconditional exit
417 # Flag to mark unconditional exit
418 self.exit_now = False
418 self.exit_now = False
419
419
420 self.usage_min = """\
420 self.usage_min = """\
421 An enhanced console for Python.
421 An enhanced console for Python.
422 Some of its features are:
422 Some of its features are:
423 - Readline support if the readline library is present.
423 - Readline support if the readline library is present.
424 - Tab completion in the local namespace.
424 - Tab completion in the local namespace.
425 - Logging of input, see command-line options.
425 - Logging of input, see command-line options.
426 - System shell escape via ! , eg !ls.
426 - System shell escape via ! , eg !ls.
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
428 - Keeps track of locally defined variables via %who, %whos.
428 - Keeps track of locally defined variables via %who, %whos.
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
430 """
430 """
431 if usage: self.usage = usage
431 if usage: self.usage = usage
432 else: self.usage = self.usage_min
432 else: self.usage = self.usage_min
433
433
434 # Storage
434 # Storage
435 self.rc = rc # This will hold all configuration information
435 self.rc = rc # This will hold all configuration information
436 self.pager = 'less'
436 self.pager = 'less'
437 # temporary files used for various purposes. Deleted at exit.
437 # temporary files used for various purposes. Deleted at exit.
438 self.tempfiles = []
438 self.tempfiles = []
439
439
440 # Keep track of readline usage (later set by init_readline)
440 # Keep track of readline usage (later set by init_readline)
441 self.has_readline = False
441 self.has_readline = False
442
442
443 # template for logfile headers. It gets resolved at runtime by the
443 # template for logfile headers. It gets resolved at runtime by the
444 # logstart method.
444 # logstart method.
445 self.loghead_tpl = \
445 self.loghead_tpl = \
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
448 #log# opts = %s
448 #log# opts = %s
449 #log# args = %s
449 #log# args = %s
450 #log# It is safe to make manual edits below here.
450 #log# It is safe to make manual edits below here.
451 #log#-----------------------------------------------------------------------
451 #log#-----------------------------------------------------------------------
452 """
452 """
453 # for pushd/popd management
453 # for pushd/popd management
454 try:
454 try:
455 self.home_dir = get_home_dir()
455 self.home_dir = get_home_dir()
456 except HomeDirError,msg:
456 except HomeDirError,msg:
457 fatal(msg)
457 fatal(msg)
458
458
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
460
460
461 # Functions to call the underlying shell.
461 # Functions to call the underlying shell.
462
462
463 # utility to expand user variables via Itpl
463 # utility to expand user variables via Itpl
464 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
464 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
465 self.user_ns))
465 self.user_ns))
466 # The first is similar to os.system, but it doesn't return a value,
466 # The first is similar to os.system, but it doesn't return a value,
467 # and it allows interpolation of variables in the user's namespace.
467 # and it allows interpolation of variables in the user's namespace.
468 self.system = lambda cmd: shell(self.var_expand(cmd),
468 self.system = lambda cmd: shell(self.var_expand(cmd),
469 header='IPython system call: ',
469 header='IPython system call: ',
470 verbose=self.rc.system_verbose)
470 verbose=self.rc.system_verbose)
471 # These are for getoutput and getoutputerror:
471 # These are for getoutput and getoutputerror:
472 self.getoutput = lambda cmd: \
472 self.getoutput = lambda cmd: \
473 getoutput(self.var_expand(cmd),
473 getoutput(self.var_expand(cmd),
474 header='IPython system call: ',
474 header='IPython system call: ',
475 verbose=self.rc.system_verbose)
475 verbose=self.rc.system_verbose)
476 self.getoutputerror = lambda cmd: \
476 self.getoutputerror = lambda cmd: \
477 getoutputerror(self.var_expand(cmd),
477 getoutputerror(self.var_expand(cmd),
478 header='IPython system call: ',
478 header='IPython system call: ',
479 verbose=self.rc.system_verbose)
479 verbose=self.rc.system_verbose)
480
480
481 # RegExp for splitting line contents into pre-char//first
481 # RegExp for splitting line contents into pre-char//first
482 # word-method//rest. For clarity, each group in on one line.
482 # word-method//rest. For clarity, each group in on one line.
483
483
484 # WARNING: update the regexp if the above escapes are changed, as they
484 # WARNING: update the regexp if the above escapes are changed, as they
485 # are hardwired in.
485 # are hardwired in.
486
486
487 # Don't get carried away with trying to make the autocalling catch too
487 # Don't get carried away with trying to make the autocalling catch too
488 # much: it's better to be conservative rather than to trigger hidden
488 # much: it's better to be conservative rather than to trigger hidden
489 # evals() somewhere and end up causing side effects.
489 # evals() somewhere and end up causing side effects.
490
490
491 self.line_split = re.compile(r'^([\s*,;/])'
491 self.line_split = re.compile(r'^([\s*,;/])'
492 r'([\?\w\.]+\w*\s*)'
492 r'([\?\w\.]+\w*\s*)'
493 r'(\(?.*$)')
493 r'(\(?.*$)')
494
494
495 # Original re, keep around for a while in case changes break something
495 # Original re, keep around for a while in case changes break something
496 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
496 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
497 # r'(\s*[\?\w\.]+\w*\s*)'
497 # r'(\s*[\?\w\.]+\w*\s*)'
498 # r'(\(?.*$)')
498 # r'(\(?.*$)')
499
499
500 # RegExp to identify potential function names
500 # RegExp to identify potential function names
501 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
501 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
502
502
503 # RegExp to exclude strings with this start from autocalling. In
503 # RegExp to exclude strings with this start from autocalling. In
504 # particular, all binary operators should be excluded, so that if foo
504 # particular, all binary operators should be excluded, so that if foo
505 # is callable, foo OP bar doesn't become foo(OP bar), which is
505 # is callable, foo OP bar doesn't become foo(OP bar), which is
506 # invalid. The characters '!=()' don't need to be checked for, as the
506 # invalid. The characters '!=()' don't need to be checked for, as the
507 # _prefilter routine explicitely does so, to catch direct calls and
507 # _prefilter routine explicitely does so, to catch direct calls and
508 # rebindings of existing names.
508 # rebindings of existing names.
509
509
510 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
510 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
511 # it affects the rest of the group in square brackets.
511 # it affects the rest of the group in square brackets.
512 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
512 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
513 '|^is |^not |^in |^and |^or ')
513 '|^is |^not |^in |^and |^or ')
514
514
515 # try to catch also methods for stuff in lists/tuples/dicts: off
515 # try to catch also methods for stuff in lists/tuples/dicts: off
516 # (experimental). For this to work, the line_split regexp would need
516 # (experimental). For this to work, the line_split regexp would need
517 # to be modified so it wouldn't break things at '['. That line is
517 # to be modified so it wouldn't break things at '['. That line is
518 # nasty enough that I shouldn't change it until I can test it _well_.
518 # nasty enough that I shouldn't change it until I can test it _well_.
519 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
519 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
520
520
521 # keep track of where we started running (mainly for crash post-mortem)
521 # keep track of where we started running (mainly for crash post-mortem)
522 self.starting_dir = os.getcwd()
522 self.starting_dir = os.getcwd()
523
523
524 # Various switches which can be set
524 # Various switches which can be set
525 self.CACHELENGTH = 5000 # this is cheap, it's just text
525 self.CACHELENGTH = 5000 # this is cheap, it's just text
526 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
526 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
527 self.banner2 = banner2
527 self.banner2 = banner2
528
528
529 # TraceBack handlers:
529 # TraceBack handlers:
530
530
531 # Syntax error handler.
531 # Syntax error handler.
532 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
532 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
533
533
534 # The interactive one is initialized with an offset, meaning we always
534 # The interactive one is initialized with an offset, meaning we always
535 # want to remove the topmost item in the traceback, which is our own
535 # want to remove the topmost item in the traceback, which is our own
536 # internal code. Valid modes: ['Plain','Context','Verbose']
536 # internal code. Valid modes: ['Plain','Context','Verbose']
537 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
537 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
538 color_scheme='NoColor',
538 color_scheme='NoColor',
539 tb_offset = 1)
539 tb_offset = 1)
540
540
541 # IPython itself shouldn't crash. This will produce a detailed
541 # IPython itself shouldn't crash. This will produce a detailed
542 # post-mortem if it does. But we only install the crash handler for
542 # post-mortem if it does. But we only install the crash handler for
543 # non-threaded shells, the threaded ones use a normal verbose reporter
543 # non-threaded shells, the threaded ones use a normal verbose reporter
544 # and lose the crash handler. This is because exceptions in the main
544 # and lose the crash handler. This is because exceptions in the main
545 # thread (such as in GUI code) propagate directly to sys.excepthook,
545 # thread (such as in GUI code) propagate directly to sys.excepthook,
546 # and there's no point in printing crash dumps for every user exception.
546 # and there's no point in printing crash dumps for every user exception.
547 if self.isthreaded:
547 if self.isthreaded:
548 ipCrashHandler = ultraTB.FormattedTB()
548 ipCrashHandler = ultraTB.FormattedTB()
549 else:
549 else:
550 from IPython import CrashHandler
550 from IPython import CrashHandler
551 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
551 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
552 self.set_crash_handler(ipCrashHandler)
552 self.set_crash_handler(ipCrashHandler)
553
553
554 # and add any custom exception handlers the user may have specified
554 # and add any custom exception handlers the user may have specified
555 self.set_custom_exc(*custom_exceptions)
555 self.set_custom_exc(*custom_exceptions)
556
556
557 # indentation management
557 # indentation management
558 self.autoindent = False
558 self.autoindent = False
559 self.indent_current_nsp = 0
559 self.indent_current_nsp = 0
560
560
561 # Make some aliases automatically
561 # Make some aliases automatically
562 # Prepare list of shell aliases to auto-define
562 # Prepare list of shell aliases to auto-define
563 if os.name == 'posix':
563 if os.name == 'posix':
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
565 'mv mv -i','rm rm -i','cp cp -i',
565 'mv mv -i','rm rm -i','cp cp -i',
566 'cat cat','less less','clear clear',
566 'cat cat','less less','clear clear',
567 # a better ls
567 # a better ls
568 'ls ls -F',
568 'ls ls -F',
569 # long ls
569 # long ls
570 'll ls -lF')
570 'll ls -lF')
571 # Extra ls aliases with color, which need special treatment on BSD
571 # Extra ls aliases with color, which need special treatment on BSD
572 # variants
572 # variants
573 ls_extra = ( # color ls
573 ls_extra = ( # color ls
574 'lc ls -F -o --color',
574 'lc ls -F -o --color',
575 # ls normal files only
575 # ls normal files only
576 'lf ls -F -o --color %l | grep ^-',
576 'lf ls -F -o --color %l | grep ^-',
577 # ls symbolic links
577 # ls symbolic links
578 'lk ls -F -o --color %l | grep ^l',
578 'lk ls -F -o --color %l | grep ^l',
579 # directories or links to directories,
579 # directories or links to directories,
580 'ldir ls -F -o --color %l | grep /$',
580 'ldir ls -F -o --color %l | grep /$',
581 # things which are executable
581 # things which are executable
582 'lx ls -F -o --color %l | grep ^-..x',
582 'lx ls -F -o --color %l | grep ^-..x',
583 )
583 )
584 # The BSDs don't ship GNU ls, so they don't understand the
584 # The BSDs don't ship GNU ls, so they don't understand the
585 # --color switch out of the box
585 # --color switch out of the box
586 if 'bsd' in sys.platform:
586 if 'bsd' in sys.platform:
587 ls_extra = ( # ls normal files only
587 ls_extra = ( # ls normal files only
588 'lf ls -lF | grep ^-',
588 'lf ls -lF | grep ^-',
589 # ls symbolic links
589 # ls symbolic links
590 'lk ls -lF | grep ^l',
590 'lk ls -lF | grep ^l',
591 # directories or links to directories,
591 # directories or links to directories,
592 'ldir ls -lF | grep /$',
592 'ldir ls -lF | grep /$',
593 # things which are executable
593 # things which are executable
594 'lx ls -lF | grep ^-..x',
594 'lx ls -lF | grep ^-..x',
595 )
595 )
596 auto_alias = auto_alias + ls_extra
596 auto_alias = auto_alias + ls_extra
597 elif os.name in ['nt','dos']:
597 elif os.name in ['nt','dos']:
598 auto_alias = ('dir dir /on', 'ls dir /on',
598 auto_alias = ('dir dir /on', 'ls dir /on',
599 'ddir dir /ad /on', 'ldir dir /ad /on',
599 'ddir dir /ad /on', 'ldir dir /ad /on',
600 'mkdir mkdir','rmdir rmdir','echo echo',
600 'mkdir mkdir','rmdir rmdir','echo echo',
601 'ren ren','cls cls','copy copy')
601 'ren ren','cls cls','copy copy')
602 else:
602 else:
603 auto_alias = ()
603 auto_alias = ()
604 self.auto_alias = [s.split(None,1) for s in auto_alias]
604 self.auto_alias = [s.split(None,1) for s in auto_alias]
605 # Call the actual (public) initializer
605 # Call the actual (public) initializer
606 self.init_auto_alias()
606 self.init_auto_alias()
607
607
608 # Produce a public API instance
608 # Produce a public API instance
609 self.api = IPython.ipapi.IPApi(self)
609 self.api = IPython.ipapi.IPApi(self)
610
610
611 # track which builtins we add, so we can clean up later
611 # track which builtins we add, so we can clean up later
612 self.builtins_added = {}
612 self.builtins_added = {}
613 # This method will add the necessary builtins for operation, but
613 # This method will add the necessary builtins for operation, but
614 # tracking what it did via the builtins_added dict.
614 # tracking what it did via the builtins_added dict.
615 self.add_builtins()
615 self.add_builtins()
616
616
617 # end __init__
617 # end __init__
618
618
619 def pre_config_initialization(self):
619 def pre_config_initialization(self):
620 """Pre-configuration init method
620 """Pre-configuration init method
621
621
622 This is called before the configuration files are processed to
622 This is called before the configuration files are processed to
623 prepare the services the config files might need.
623 prepare the services the config files might need.
624
624
625 self.rc already has reasonable default values at this point.
625 self.rc already has reasonable default values at this point.
626 """
626 """
627 rc = self.rc
627 rc = self.rc
628
628
629 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
629 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
630
630
631 def post_config_initialization(self):
631 def post_config_initialization(self):
632 """Post configuration init method
632 """Post configuration init method
633
633
634 This is called after the configuration files have been processed to
634 This is called after the configuration files have been processed to
635 'finalize' the initialization."""
635 'finalize' the initialization."""
636
636
637 rc = self.rc
637 rc = self.rc
638
638
639 # Object inspector
639 # Object inspector
640 self.inspector = OInspect.Inspector(OInspect.InspectColors,
640 self.inspector = OInspect.Inspector(OInspect.InspectColors,
641 PyColorize.ANSICodeColors,
641 PyColorize.ANSICodeColors,
642 'NoColor',
642 'NoColor',
643 rc.object_info_string_level)
643 rc.object_info_string_level)
644
644
645 # Load readline proper
645 # Load readline proper
646 if rc.readline:
646 if rc.readline:
647 self.init_readline()
647 self.init_readline()
648
648
649 # local shortcut, this is used a LOT
649 # local shortcut, this is used a LOT
650 self.log = self.logger.log
650 self.log = self.logger.log
651
651
652 # Initialize cache, set in/out prompts and printing system
652 # Initialize cache, set in/out prompts and printing system
653 self.outputcache = CachedOutput(self,
653 self.outputcache = CachedOutput(self,
654 rc.cache_size,
654 rc.cache_size,
655 rc.pprint,
655 rc.pprint,
656 input_sep = rc.separate_in,
656 input_sep = rc.separate_in,
657 output_sep = rc.separate_out,
657 output_sep = rc.separate_out,
658 output_sep2 = rc.separate_out2,
658 output_sep2 = rc.separate_out2,
659 ps1 = rc.prompt_in1,
659 ps1 = rc.prompt_in1,
660 ps2 = rc.prompt_in2,
660 ps2 = rc.prompt_in2,
661 ps_out = rc.prompt_out,
661 ps_out = rc.prompt_out,
662 pad_left = rc.prompts_pad_left)
662 pad_left = rc.prompts_pad_left)
663
663
664 # user may have over-ridden the default print hook:
664 # user may have over-ridden the default print hook:
665 try:
665 try:
666 self.outputcache.__class__.display = self.hooks.display
666 self.outputcache.__class__.display = self.hooks.display
667 except AttributeError:
667 except AttributeError:
668 pass
668 pass
669
669
670 # I don't like assigning globally to sys, because it means when
670 # I don't like assigning globally to sys, because it means when
671 # embedding instances, each embedded instance overrides the previous
671 # embedding instances, each embedded instance overrides the previous
672 # choice. But sys.displayhook seems to be called internally by exec,
672 # choice. But sys.displayhook seems to be called internally by exec,
673 # so I don't see a way around it. We first save the original and then
673 # so I don't see a way around it. We first save the original and then
674 # overwrite it.
674 # overwrite it.
675 self.sys_displayhook = sys.displayhook
675 self.sys_displayhook = sys.displayhook
676 sys.displayhook = self.outputcache
676 sys.displayhook = self.outputcache
677
677
678 # Set user colors (don't do it in the constructor above so that it
678 # Set user colors (don't do it in the constructor above so that it
679 # doesn't crash if colors option is invalid)
679 # doesn't crash if colors option is invalid)
680 self.magic_colors(rc.colors)
680 self.magic_colors(rc.colors)
681
681
682 # Set calling of pdb on exceptions
682 # Set calling of pdb on exceptions
683 self.call_pdb = rc.pdb
683 self.call_pdb = rc.pdb
684
684
685 # Load user aliases
685 # Load user aliases
686 for alias in rc.alias:
686 for alias in rc.alias:
687 self.magic_alias(alias)
687 self.magic_alias(alias)
688 self.hooks.late_startup_hook()
688 self.hooks.late_startup_hook()
689
689
690 batchrun = False
690 batchrun = False
691 for batchfile in [path(arg) for arg in self.rc.args
691 for batchfile in [path(arg) for arg in self.rc.args
692 if arg.lower().endswith('.ipy')]:
692 if arg.lower().endswith('.ipy')]:
693 if not batchfile.isfile():
693 if not batchfile.isfile():
694 print "No such batch file:", batchfile
694 print "No such batch file:", batchfile
695 continue
695 continue
696 self.api.runlines(batchfile.text())
696 self.api.runlines(batchfile.text())
697 batchrun = True
697 batchrun = True
698 if batchrun:
698 if batchrun:
699 self.exit_now = True
699 self.exit_now = True
700
700
701 def add_builtins(self):
701 def add_builtins(self):
702 """Store ipython references into the builtin namespace.
702 """Store ipython references into the builtin namespace.
703
703
704 Some parts of ipython operate via builtins injected here, which hold a
704 Some parts of ipython operate via builtins injected here, which hold a
705 reference to IPython itself."""
705 reference to IPython itself."""
706
706
707 # TODO: deprecate all except _ip; 'jobs' should be installed
707 # TODO: deprecate all except _ip; 'jobs' should be installed
708 # by an extension and the rest are under _ip, ipalias is redundant
708 # by an extension and the rest are under _ip, ipalias is redundant
709 builtins_new = dict(__IPYTHON__ = self,
709 builtins_new = dict(__IPYTHON__ = self,
710 ip_set_hook = self.set_hook,
710 ip_set_hook = self.set_hook,
711 jobs = self.jobs,
711 jobs = self.jobs,
712 ipmagic = self.ipmagic,
712 ipmagic = self.ipmagic,
713 ipalias = self.ipalias,
713 ipalias = self.ipalias,
714 ipsystem = self.ipsystem,
714 ipsystem = self.ipsystem,
715 _ip = self.api
715 _ip = self.api
716 )
716 )
717 for biname,bival in builtins_new.items():
717 for biname,bival in builtins_new.items():
718 try:
718 try:
719 # store the orignal value so we can restore it
719 # store the orignal value so we can restore it
720 self.builtins_added[biname] = __builtin__.__dict__[biname]
720 self.builtins_added[biname] = __builtin__.__dict__[biname]
721 except KeyError:
721 except KeyError:
722 # or mark that it wasn't defined, and we'll just delete it at
722 # or mark that it wasn't defined, and we'll just delete it at
723 # cleanup
723 # cleanup
724 self.builtins_added[biname] = Undefined
724 self.builtins_added[biname] = Undefined
725 __builtin__.__dict__[biname] = bival
725 __builtin__.__dict__[biname] = bival
726
726
727 # Keep in the builtins a flag for when IPython is active. We set it
727 # Keep in the builtins a flag for when IPython is active. We set it
728 # with setdefault so that multiple nested IPythons don't clobber one
728 # with setdefault so that multiple nested IPythons don't clobber one
729 # another. Each will increase its value by one upon being activated,
729 # another. Each will increase its value by one upon being activated,
730 # which also gives us a way to determine the nesting level.
730 # which also gives us a way to determine the nesting level.
731 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
731 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
732
732
733 def clean_builtins(self):
733 def clean_builtins(self):
734 """Remove any builtins which might have been added by add_builtins, or
734 """Remove any builtins which might have been added by add_builtins, or
735 restore overwritten ones to their previous values."""
735 restore overwritten ones to their previous values."""
736 for biname,bival in self.builtins_added.items():
736 for biname,bival in self.builtins_added.items():
737 if bival is Undefined:
737 if bival is Undefined:
738 del __builtin__.__dict__[biname]
738 del __builtin__.__dict__[biname]
739 else:
739 else:
740 __builtin__.__dict__[biname] = bival
740 __builtin__.__dict__[biname] = bival
741 self.builtins_added.clear()
741 self.builtins_added.clear()
742
742
743 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
743 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
744 """set_hook(name,hook) -> sets an internal IPython hook.
744 """set_hook(name,hook) -> sets an internal IPython hook.
745
745
746 IPython exposes some of its internal API as user-modifiable hooks. By
746 IPython exposes some of its internal API as user-modifiable hooks. By
747 adding your function to one of these hooks, you can modify IPython's
747 adding your function to one of these hooks, you can modify IPython's
748 behavior to call at runtime your own routines."""
748 behavior to call at runtime your own routines."""
749
749
750 # At some point in the future, this should validate the hook before it
750 # At some point in the future, this should validate the hook before it
751 # accepts it. Probably at least check that the hook takes the number
751 # accepts it. Probably at least check that the hook takes the number
752 # of args it's supposed to.
752 # of args it's supposed to.
753
753
754 f = new.instancemethod(hook,self,self.__class__)
754 f = new.instancemethod(hook,self,self.__class__)
755
755
756 # check if the hook is for strdispatcher first
756 # check if the hook is for strdispatcher first
757 if str_key is not None:
757 if str_key is not None:
758 sdp = self.strdispatchers.get(name, StrDispatch())
758 sdp = self.strdispatchers.get(name, StrDispatch())
759 sdp.add_s(str_key, f, priority )
759 sdp.add_s(str_key, f, priority )
760 self.strdispatchers[name] = sdp
760 self.strdispatchers[name] = sdp
761 return
761 return
762 if re_key is not None:
762 if re_key is not None:
763 sdp = self.strdispatchers.get(name, StrDispatch())
763 sdp = self.strdispatchers.get(name, StrDispatch())
764 sdp.add_re(re.compile(re_key), f, priority )
764 sdp.add_re(re.compile(re_key), f, priority )
765 self.strdispatchers[name] = sdp
765 self.strdispatchers[name] = sdp
766 return
766 return
767
767
768 dp = getattr(self.hooks, name, None)
768 dp = getattr(self.hooks, name, None)
769 if name not in IPython.hooks.__all__:
769 if name not in IPython.hooks.__all__:
770 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
770 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
771 if not dp:
771 if not dp:
772 dp = IPython.hooks.CommandChainDispatcher()
772 dp = IPython.hooks.CommandChainDispatcher()
773
773
774 try:
774 try:
775 dp.add(f,priority)
775 dp.add(f,priority)
776 except AttributeError:
776 except AttributeError:
777 # it was not commandchain, plain old func - replace
777 # it was not commandchain, plain old func - replace
778 dp = f
778 dp = f
779
779
780 setattr(self.hooks,name, dp)
780 setattr(self.hooks,name, dp)
781
781
782
782
783 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
783 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
784
784
785 def set_crash_handler(self,crashHandler):
785 def set_crash_handler(self,crashHandler):
786 """Set the IPython crash handler.
786 """Set the IPython crash handler.
787
787
788 This must be a callable with a signature suitable for use as
788 This must be a callable with a signature suitable for use as
789 sys.excepthook."""
789 sys.excepthook."""
790
790
791 # Install the given crash handler as the Python exception hook
791 # Install the given crash handler as the Python exception hook
792 sys.excepthook = crashHandler
792 sys.excepthook = crashHandler
793
793
794 # The instance will store a pointer to this, so that runtime code
794 # The instance will store a pointer to this, so that runtime code
795 # (such as magics) can access it. This is because during the
795 # (such as magics) can access it. This is because during the
796 # read-eval loop, it gets temporarily overwritten (to deal with GUI
796 # read-eval loop, it gets temporarily overwritten (to deal with GUI
797 # frameworks).
797 # frameworks).
798 self.sys_excepthook = sys.excepthook
798 self.sys_excepthook = sys.excepthook
799
799
800
800
801 def set_custom_exc(self,exc_tuple,handler):
801 def set_custom_exc(self,exc_tuple,handler):
802 """set_custom_exc(exc_tuple,handler)
802 """set_custom_exc(exc_tuple,handler)
803
803
804 Set a custom exception handler, which will be called if any of the
804 Set a custom exception handler, which will be called if any of the
805 exceptions in exc_tuple occur in the mainloop (specifically, in the
805 exceptions in exc_tuple occur in the mainloop (specifically, in the
806 runcode() method.
806 runcode() method.
807
807
808 Inputs:
808 Inputs:
809
809
810 - exc_tuple: a *tuple* of valid exceptions to call the defined
810 - exc_tuple: a *tuple* of valid exceptions to call the defined
811 handler for. It is very important that you use a tuple, and NOT A
811 handler for. It is very important that you use a tuple, and NOT A
812 LIST here, because of the way Python's except statement works. If
812 LIST here, because of the way Python's except statement works. If
813 you only want to trap a single exception, use a singleton tuple:
813 you only want to trap a single exception, use a singleton tuple:
814
814
815 exc_tuple == (MyCustomException,)
815 exc_tuple == (MyCustomException,)
816
816
817 - handler: this must be defined as a function with the following
817 - handler: this must be defined as a function with the following
818 basic interface: def my_handler(self,etype,value,tb).
818 basic interface: def my_handler(self,etype,value,tb).
819
819
820 This will be made into an instance method (via new.instancemethod)
820 This will be made into an instance method (via new.instancemethod)
821 of IPython itself, and it will be called if any of the exceptions
821 of IPython itself, and it will be called if any of the exceptions
822 listed in the exc_tuple are caught. If the handler is None, an
822 listed in the exc_tuple are caught. If the handler is None, an
823 internal basic one is used, which just prints basic info.
823 internal basic one is used, which just prints basic info.
824
824
825 WARNING: by putting in your own exception handler into IPython's main
825 WARNING: by putting in your own exception handler into IPython's main
826 execution loop, you run a very good chance of nasty crashes. This
826 execution loop, you run a very good chance of nasty crashes. This
827 facility should only be used if you really know what you are doing."""
827 facility should only be used if you really know what you are doing."""
828
828
829 assert type(exc_tuple)==type(()) , \
829 assert type(exc_tuple)==type(()) , \
830 "The custom exceptions must be given AS A TUPLE."
830 "The custom exceptions must be given AS A TUPLE."
831
831
832 def dummy_handler(self,etype,value,tb):
832 def dummy_handler(self,etype,value,tb):
833 print '*** Simple custom exception handler ***'
833 print '*** Simple custom exception handler ***'
834 print 'Exception type :',etype
834 print 'Exception type :',etype
835 print 'Exception value:',value
835 print 'Exception value:',value
836 print 'Traceback :',tb
836 print 'Traceback :',tb
837 print 'Source code :','\n'.join(self.buffer)
837 print 'Source code :','\n'.join(self.buffer)
838
838
839 if handler is None: handler = dummy_handler
839 if handler is None: handler = dummy_handler
840
840
841 self.CustomTB = new.instancemethod(handler,self,self.__class__)
841 self.CustomTB = new.instancemethod(handler,self,self.__class__)
842 self.custom_exceptions = exc_tuple
842 self.custom_exceptions = exc_tuple
843
843
844 def set_custom_completer(self,completer,pos=0):
844 def set_custom_completer(self,completer,pos=0):
845 """set_custom_completer(completer,pos=0)
845 """set_custom_completer(completer,pos=0)
846
846
847 Adds a new custom completer function.
847 Adds a new custom completer function.
848
848
849 The position argument (defaults to 0) is the index in the completers
849 The position argument (defaults to 0) is the index in the completers
850 list where you want the completer to be inserted."""
850 list where you want the completer to be inserted."""
851
851
852 newcomp = new.instancemethod(completer,self.Completer,
852 newcomp = new.instancemethod(completer,self.Completer,
853 self.Completer.__class__)
853 self.Completer.__class__)
854 self.Completer.matchers.insert(pos,newcomp)
854 self.Completer.matchers.insert(pos,newcomp)
855
855
856 def _get_call_pdb(self):
856 def _get_call_pdb(self):
857 return self._call_pdb
857 return self._call_pdb
858
858
859 def _set_call_pdb(self,val):
859 def _set_call_pdb(self,val):
860
860
861 if val not in (0,1,False,True):
861 if val not in (0,1,False,True):
862 raise ValueError,'new call_pdb value must be boolean'
862 raise ValueError,'new call_pdb value must be boolean'
863
863
864 # store value in instance
864 # store value in instance
865 self._call_pdb = val
865 self._call_pdb = val
866
866
867 # notify the actual exception handlers
867 # notify the actual exception handlers
868 self.InteractiveTB.call_pdb = val
868 self.InteractiveTB.call_pdb = val
869 if self.isthreaded:
869 if self.isthreaded:
870 try:
870 try:
871 self.sys_excepthook.call_pdb = val
871 self.sys_excepthook.call_pdb = val
872 except:
872 except:
873 warn('Failed to activate pdb for threaded exception handler')
873 warn('Failed to activate pdb for threaded exception handler')
874
874
875 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
875 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
876 'Control auto-activation of pdb at exceptions')
876 'Control auto-activation of pdb at exceptions')
877
877
878
878
879 # These special functions get installed in the builtin namespace, to
879 # These special functions get installed in the builtin namespace, to
880 # provide programmatic (pure python) access to magics, aliases and system
880 # provide programmatic (pure python) access to magics, aliases and system
881 # calls. This is important for logging, user scripting, and more.
881 # calls. This is important for logging, user scripting, and more.
882
882
883 # We are basically exposing, via normal python functions, the three
883 # We are basically exposing, via normal python functions, the three
884 # mechanisms in which ipython offers special call modes (magics for
884 # mechanisms in which ipython offers special call modes (magics for
885 # internal control, aliases for direct system access via pre-selected
885 # internal control, aliases for direct system access via pre-selected
886 # names, and !cmd for calling arbitrary system commands).
886 # names, and !cmd for calling arbitrary system commands).
887
887
888 def ipmagic(self,arg_s):
888 def ipmagic(self,arg_s):
889 """Call a magic function by name.
889 """Call a magic function by name.
890
890
891 Input: a string containing the name of the magic function to call and any
891 Input: a string containing the name of the magic function to call and any
892 additional arguments to be passed to the magic.
892 additional arguments to be passed to the magic.
893
893
894 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
894 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
895 prompt:
895 prompt:
896
896
897 In[1]: %name -opt foo bar
897 In[1]: %name -opt foo bar
898
898
899 To call a magic without arguments, simply use ipmagic('name').
899 To call a magic without arguments, simply use ipmagic('name').
900
900
901 This provides a proper Python function to call IPython's magics in any
901 This provides a proper Python function to call IPython's magics in any
902 valid Python code you can type at the interpreter, including loops and
902 valid Python code you can type at the interpreter, including loops and
903 compound statements. It is added by IPython to the Python builtin
903 compound statements. It is added by IPython to the Python builtin
904 namespace upon initialization."""
904 namespace upon initialization."""
905
905
906 args = arg_s.split(' ',1)
906 args = arg_s.split(' ',1)
907 magic_name = args[0]
907 magic_name = args[0]
908 magic_name = magic_name.lstrip(self.ESC_MAGIC)
908 magic_name = magic_name.lstrip(self.ESC_MAGIC)
909
909
910 try:
910 try:
911 magic_args = args[1]
911 magic_args = args[1]
912 except IndexError:
912 except IndexError:
913 magic_args = ''
913 magic_args = ''
914 fn = getattr(self,'magic_'+magic_name,None)
914 fn = getattr(self,'magic_'+magic_name,None)
915 if fn is None:
915 if fn is None:
916 error("Magic function `%s` not found." % magic_name)
916 error("Magic function `%s` not found." % magic_name)
917 else:
917 else:
918 magic_args = self.var_expand(magic_args)
918 magic_args = self.var_expand(magic_args)
919 return fn(magic_args)
919 return fn(magic_args)
920
920
921 def ipalias(self,arg_s):
921 def ipalias(self,arg_s):
922 """Call an alias by name.
922 """Call an alias by name.
923
923
924 Input: a string containing the name of the alias to call and any
924 Input: a string containing the name of the alias to call and any
925 additional arguments to be passed to the magic.
925 additional arguments to be passed to the magic.
926
926
927 ipalias('name -opt foo bar') is equivalent to typing at the ipython
927 ipalias('name -opt foo bar') is equivalent to typing at the ipython
928 prompt:
928 prompt:
929
929
930 In[1]: name -opt foo bar
930 In[1]: name -opt foo bar
931
931
932 To call an alias without arguments, simply use ipalias('name').
932 To call an alias without arguments, simply use ipalias('name').
933
933
934 This provides a proper Python function to call IPython's aliases in any
934 This provides a proper Python function to call IPython's aliases in any
935 valid Python code you can type at the interpreter, including loops and
935 valid Python code you can type at the interpreter, including loops and
936 compound statements. It is added by IPython to the Python builtin
936 compound statements. It is added by IPython to the Python builtin
937 namespace upon initialization."""
937 namespace upon initialization."""
938
938
939 args = arg_s.split(' ',1)
939 args = arg_s.split(' ',1)
940 alias_name = args[0]
940 alias_name = args[0]
941 try:
941 try:
942 alias_args = args[1]
942 alias_args = args[1]
943 except IndexError:
943 except IndexError:
944 alias_args = ''
944 alias_args = ''
945 if alias_name in self.alias_table:
945 if alias_name in self.alias_table:
946 self.call_alias(alias_name,alias_args)
946 self.call_alias(alias_name,alias_args)
947 else:
947 else:
948 error("Alias `%s` not found." % alias_name)
948 error("Alias `%s` not found." % alias_name)
949
949
950 def ipsystem(self,arg_s):
950 def ipsystem(self,arg_s):
951 """Make a system call, using IPython."""
951 """Make a system call, using IPython."""
952
952
953 self.system(arg_s)
953 self.system(arg_s)
954
954
955 def complete(self,text):
955 def complete(self,text):
956 """Return a sorted list of all possible completions on text.
956 """Return a sorted list of all possible completions on text.
957
957
958 Inputs:
958 Inputs:
959
959
960 - text: a string of text to be completed on.
960 - text: a string of text to be completed on.
961
961
962 This is a wrapper around the completion mechanism, similar to what
962 This is a wrapper around the completion mechanism, similar to what
963 readline does at the command line when the TAB key is hit. By
963 readline does at the command line when the TAB key is hit. By
964 exposing it as a method, it can be used by other non-readline
964 exposing it as a method, it can be used by other non-readline
965 environments (such as GUIs) for text completion.
965 environments (such as GUIs) for text completion.
966
966
967 Simple usage example:
967 Simple usage example:
968
968
969 In [1]: x = 'hello'
969 In [1]: x = 'hello'
970
970
971 In [2]: __IP.complete('x.l')
971 In [2]: __IP.complete('x.l')
972 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
972 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
973
973
974 complete = self.Completer.complete
974 complete = self.Completer.complete
975 state = 0
975 state = 0
976 # use a dict so we get unique keys, since ipyhton's multiple
976 # use a dict so we get unique keys, since ipyhton's multiple
977 # completers can return duplicates.
977 # completers can return duplicates.
978 comps = {}
978 comps = {}
979 while True:
979 while True:
980 newcomp = complete(text,state)
980 newcomp = complete(text,state)
981 if newcomp is None:
981 if newcomp is None:
982 break
982 break
983 comps[newcomp] = 1
983 comps[newcomp] = 1
984 state += 1
984 state += 1
985 outcomps = comps.keys()
985 outcomps = comps.keys()
986 outcomps.sort()
986 outcomps.sort()
987 return outcomps
987 return outcomps
988
988
989 def set_completer_frame(self, frame=None):
989 def set_completer_frame(self, frame=None):
990 if frame:
990 if frame:
991 self.Completer.namespace = frame.f_locals
991 self.Completer.namespace = frame.f_locals
992 self.Completer.global_namespace = frame.f_globals
992 self.Completer.global_namespace = frame.f_globals
993 else:
993 else:
994 self.Completer.namespace = self.user_ns
994 self.Completer.namespace = self.user_ns
995 self.Completer.global_namespace = self.user_global_ns
995 self.Completer.global_namespace = self.user_global_ns
996
996
997 def init_auto_alias(self):
997 def init_auto_alias(self):
998 """Define some aliases automatically.
998 """Define some aliases automatically.
999
999
1000 These are ALL parameter-less aliases"""
1000 These are ALL parameter-less aliases"""
1001
1001
1002 for alias,cmd in self.auto_alias:
1002 for alias,cmd in self.auto_alias:
1003 self.alias_table[alias] = (0,cmd)
1003 self.alias_table[alias] = (0,cmd)
1004
1004
1005 def alias_table_validate(self,verbose=0):
1005 def alias_table_validate(self,verbose=0):
1006 """Update information about the alias table.
1006 """Update information about the alias table.
1007
1007
1008 In particular, make sure no Python keywords/builtins are in it."""
1008 In particular, make sure no Python keywords/builtins are in it."""
1009
1009
1010 no_alias = self.no_alias
1010 no_alias = self.no_alias
1011 for k in self.alias_table.keys():
1011 for k in self.alias_table.keys():
1012 if k in no_alias:
1012 if k in no_alias:
1013 del self.alias_table[k]
1013 del self.alias_table[k]
1014 if verbose:
1014 if verbose:
1015 print ("Deleting alias <%s>, it's a Python "
1015 print ("Deleting alias <%s>, it's a Python "
1016 "keyword or builtin." % k)
1016 "keyword or builtin." % k)
1017
1017
1018 def set_autoindent(self,value=None):
1018 def set_autoindent(self,value=None):
1019 """Set the autoindent flag, checking for readline support.
1019 """Set the autoindent flag, checking for readline support.
1020
1020
1021 If called with no arguments, it acts as a toggle."""
1021 If called with no arguments, it acts as a toggle."""
1022
1022
1023 if not self.has_readline:
1023 if not self.has_readline:
1024 if os.name == 'posix':
1024 if os.name == 'posix':
1025 warn("The auto-indent feature requires the readline library")
1025 warn("The auto-indent feature requires the readline library")
1026 self.autoindent = 0
1026 self.autoindent = 0
1027 return
1027 return
1028 if value is None:
1028 if value is None:
1029 self.autoindent = not self.autoindent
1029 self.autoindent = not self.autoindent
1030 else:
1030 else:
1031 self.autoindent = value
1031 self.autoindent = value
1032
1032
1033 def rc_set_toggle(self,rc_field,value=None):
1033 def rc_set_toggle(self,rc_field,value=None):
1034 """Set or toggle a field in IPython's rc config. structure.
1034 """Set or toggle a field in IPython's rc config. structure.
1035
1035
1036 If called with no arguments, it acts as a toggle.
1036 If called with no arguments, it acts as a toggle.
1037
1037
1038 If called with a non-existent field, the resulting AttributeError
1038 If called with a non-existent field, the resulting AttributeError
1039 exception will propagate out."""
1039 exception will propagate out."""
1040
1040
1041 rc_val = getattr(self.rc,rc_field)
1041 rc_val = getattr(self.rc,rc_field)
1042 if value is None:
1042 if value is None:
1043 value = not rc_val
1043 value = not rc_val
1044 setattr(self.rc,rc_field,value)
1044 setattr(self.rc,rc_field,value)
1045
1045
1046 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1046 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1047 """Install the user configuration directory.
1047 """Install the user configuration directory.
1048
1048
1049 Can be called when running for the first time or to upgrade the user's
1049 Can be called when running for the first time or to upgrade the user's
1050 .ipython/ directory with the mode parameter. Valid modes are 'install'
1050 .ipython/ directory with the mode parameter. Valid modes are 'install'
1051 and 'upgrade'."""
1051 and 'upgrade'."""
1052
1052
1053 def wait():
1053 def wait():
1054 try:
1054 try:
1055 raw_input("Please press <RETURN> to start IPython.")
1055 raw_input("Please press <RETURN> to start IPython.")
1056 except EOFError:
1056 except EOFError:
1057 print >> Term.cout
1057 print >> Term.cout
1058 print '*'*70
1058 print '*'*70
1059
1059
1060 cwd = os.getcwd() # remember where we started
1060 cwd = os.getcwd() # remember where we started
1061 glb = glob.glob
1061 glb = glob.glob
1062 print '*'*70
1062 print '*'*70
1063 if mode == 'install':
1063 if mode == 'install':
1064 print \
1064 print \
1065 """Welcome to IPython. I will try to create a personal configuration directory
1065 """Welcome to IPython. I will try to create a personal configuration directory
1066 where you can customize many aspects of IPython's functionality in:\n"""
1066 where you can customize many aspects of IPython's functionality in:\n"""
1067 else:
1067 else:
1068 print 'I am going to upgrade your configuration in:'
1068 print 'I am going to upgrade your configuration in:'
1069
1069
1070 print ipythondir
1070 print ipythondir
1071
1071
1072 rcdirend = os.path.join('IPython','UserConfig')
1072 rcdirend = os.path.join('IPython','UserConfig')
1073 cfg = lambda d: os.path.join(d,rcdirend)
1073 cfg = lambda d: os.path.join(d,rcdirend)
1074 try:
1074 try:
1075 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1075 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1076 except IOError:
1076 except IOError:
1077 warning = """
1077 warning = """
1078 Installation error. IPython's directory was not found.
1078 Installation error. IPython's directory was not found.
1079
1079
1080 Check the following:
1080 Check the following:
1081
1081
1082 The ipython/IPython directory should be in a directory belonging to your
1082 The ipython/IPython directory should be in a directory belonging to your
1083 PYTHONPATH environment variable (that is, it should be in a directory
1083 PYTHONPATH environment variable (that is, it should be in a directory
1084 belonging to sys.path). You can copy it explicitly there or just link to it.
1084 belonging to sys.path). You can copy it explicitly there or just link to it.
1085
1085
1086 IPython will proceed with builtin defaults.
1086 IPython will proceed with builtin defaults.
1087 """
1087 """
1088 warn(warning)
1088 warn(warning)
1089 wait()
1089 wait()
1090 return
1090 return
1091
1091
1092 if mode == 'install':
1092 if mode == 'install':
1093 try:
1093 try:
1094 shutil.copytree(rcdir,ipythondir)
1094 shutil.copytree(rcdir,ipythondir)
1095 os.chdir(ipythondir)
1095 os.chdir(ipythondir)
1096 rc_files = glb("ipythonrc*")
1096 rc_files = glb("ipythonrc*")
1097 for rc_file in rc_files:
1097 for rc_file in rc_files:
1098 os.rename(rc_file,rc_file+rc_suffix)
1098 os.rename(rc_file,rc_file+rc_suffix)
1099 except:
1099 except:
1100 warning = """
1100 warning = """
1101
1101
1102 There was a problem with the installation:
1102 There was a problem with the installation:
1103 %s
1103 %s
1104 Try to correct it or contact the developers if you think it's a bug.
1104 Try to correct it or contact the developers if you think it's a bug.
1105 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1105 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1106 warn(warning)
1106 warn(warning)
1107 wait()
1107 wait()
1108 return
1108 return
1109
1109
1110 elif mode == 'upgrade':
1110 elif mode == 'upgrade':
1111 try:
1111 try:
1112 os.chdir(ipythondir)
1112 os.chdir(ipythondir)
1113 except:
1113 except:
1114 print """
1114 print """
1115 Can not upgrade: changing to directory %s failed. Details:
1115 Can not upgrade: changing to directory %s failed. Details:
1116 %s
1116 %s
1117 """ % (ipythondir,sys.exc_info()[1])
1117 """ % (ipythondir,sys.exc_info()[1])
1118 wait()
1118 wait()
1119 return
1119 return
1120 else:
1120 else:
1121 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1121 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1122 for new_full_path in sources:
1122 for new_full_path in sources:
1123 new_filename = os.path.basename(new_full_path)
1123 new_filename = os.path.basename(new_full_path)
1124 if new_filename.startswith('ipythonrc'):
1124 if new_filename.startswith('ipythonrc'):
1125 new_filename = new_filename + rc_suffix
1125 new_filename = new_filename + rc_suffix
1126 # The config directory should only contain files, skip any
1126 # The config directory should only contain files, skip any
1127 # directories which may be there (like CVS)
1127 # directories which may be there (like CVS)
1128 if os.path.isdir(new_full_path):
1128 if os.path.isdir(new_full_path):
1129 continue
1129 continue
1130 if os.path.exists(new_filename):
1130 if os.path.exists(new_filename):
1131 old_file = new_filename+'.old'
1131 old_file = new_filename+'.old'
1132 if os.path.exists(old_file):
1132 if os.path.exists(old_file):
1133 os.remove(old_file)
1133 os.remove(old_file)
1134 os.rename(new_filename,old_file)
1134 os.rename(new_filename,old_file)
1135 shutil.copy(new_full_path,new_filename)
1135 shutil.copy(new_full_path,new_filename)
1136 else:
1136 else:
1137 raise ValueError,'unrecognized mode for install:',`mode`
1137 raise ValueError,'unrecognized mode for install:',`mode`
1138
1138
1139 # Fix line-endings to those native to each platform in the config
1139 # Fix line-endings to those native to each platform in the config
1140 # directory.
1140 # directory.
1141 try:
1141 try:
1142 os.chdir(ipythondir)
1142 os.chdir(ipythondir)
1143 except:
1143 except:
1144 print """
1144 print """
1145 Problem: changing to directory %s failed.
1145 Problem: changing to directory %s failed.
1146 Details:
1146 Details:
1147 %s
1147 %s
1148
1148
1149 Some configuration files may have incorrect line endings. This should not
1149 Some configuration files may have incorrect line endings. This should not
1150 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1150 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1151 wait()
1151 wait()
1152 else:
1152 else:
1153 for fname in glb('ipythonrc*'):
1153 for fname in glb('ipythonrc*'):
1154 try:
1154 try:
1155 native_line_ends(fname,backup=0)
1155 native_line_ends(fname,backup=0)
1156 except IOError:
1156 except IOError:
1157 pass
1157 pass
1158
1158
1159 if mode == 'install':
1159 if mode == 'install':
1160 print """
1160 print """
1161 Successful installation!
1161 Successful installation!
1162
1162
1163 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1163 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1164 IPython manual (there are both HTML and PDF versions supplied with the
1164 IPython manual (there are both HTML and PDF versions supplied with the
1165 distribution) to make sure that your system environment is properly configured
1165 distribution) to make sure that your system environment is properly configured
1166 to take advantage of IPython's features.
1166 to take advantage of IPython's features.
1167
1167
1168 Important note: the configuration system has changed! The old system is
1168 Important note: the configuration system has changed! The old system is
1169 still in place, but its setting may be partly overridden by the settings in
1169 still in place, but its setting may be partly overridden by the settings in
1170 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1170 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1171 if some of the new settings bother you.
1171 if some of the new settings bother you.
1172
1172
1173 """
1173 """
1174 else:
1174 else:
1175 print """
1175 print """
1176 Successful upgrade!
1176 Successful upgrade!
1177
1177
1178 All files in your directory:
1178 All files in your directory:
1179 %(ipythondir)s
1179 %(ipythondir)s
1180 which would have been overwritten by the upgrade were backed up with a .old
1180 which would have been overwritten by the upgrade were backed up with a .old
1181 extension. If you had made particular customizations in those files you may
1181 extension. If you had made particular customizations in those files you may
1182 want to merge them back into the new files.""" % locals()
1182 want to merge them back into the new files.""" % locals()
1183 wait()
1183 wait()
1184 os.chdir(cwd)
1184 os.chdir(cwd)
1185 # end user_setup()
1185 # end user_setup()
1186
1186
1187 def atexit_operations(self):
1187 def atexit_operations(self):
1188 """This will be executed at the time of exit.
1188 """This will be executed at the time of exit.
1189
1189
1190 Saving of persistent data should be performed here. """
1190 Saving of persistent data should be performed here. """
1191
1191
1192 #print '*** IPython exit cleanup ***' # dbg
1192 #print '*** IPython exit cleanup ***' # dbg
1193 # input history
1193 # input history
1194 self.savehist()
1194 self.savehist()
1195
1195
1196 # Cleanup all tempfiles left around
1196 # Cleanup all tempfiles left around
1197 for tfile in self.tempfiles:
1197 for tfile in self.tempfiles:
1198 try:
1198 try:
1199 os.unlink(tfile)
1199 os.unlink(tfile)
1200 except OSError:
1200 except OSError:
1201 pass
1201 pass
1202
1202
1203 # save the "persistent data" catch-all dictionary
1203 # save the "persistent data" catch-all dictionary
1204 self.hooks.shutdown_hook()
1204 self.hooks.shutdown_hook()
1205
1205
1206 def savehist(self):
1206 def savehist(self):
1207 """Save input history to a file (via readline library)."""
1207 """Save input history to a file (via readline library)."""
1208 try:
1208 try:
1209 self.readline.write_history_file(self.histfile)
1209 self.readline.write_history_file(self.histfile)
1210 except:
1210 except:
1211 print 'Unable to save IPython command history to file: ' + \
1211 print 'Unable to save IPython command history to file: ' + \
1212 `self.histfile`
1212 `self.histfile`
1213
1213
1214 def history_saving_wrapper(self, func):
1215 """ Wrap func for readline history saving
1216
1217 Convert func into callable that saves & restores
1218 history around the call """
1219
1220 if not self.has_readline:
1221 return func
1222
1223 def wrapper():
1224 self.savehist()
1225 try:
1226 func()
1227 finally:
1228 readline.read_history_file(self.histfile)
1229 return wrapper
1230
1231
1214 def pre_readline(self):
1232 def pre_readline(self):
1215 """readline hook to be used at the start of each line.
1233 """readline hook to be used at the start of each line.
1216
1234
1217 Currently it handles auto-indent only."""
1235 Currently it handles auto-indent only."""
1218
1236
1219 #debugx('self.indent_current_nsp','pre_readline:')
1237 #debugx('self.indent_current_nsp','pre_readline:')
1220 self.readline.insert_text(self.indent_current_str())
1238 self.readline.insert_text(self.indent_current_str())
1221
1239
1222 def init_readline(self):
1240 def init_readline(self):
1223 """Command history completion/saving/reloading."""
1241 """Command history completion/saving/reloading."""
1224
1242
1225 import IPython.rlineimpl as readline
1243 import IPython.rlineimpl as readline
1226 if not readline.have_readline:
1244 if not readline.have_readline:
1227 self.has_readline = 0
1245 self.has_readline = 0
1228 self.readline = None
1246 self.readline = None
1229 # no point in bugging windows users with this every time:
1247 # no point in bugging windows users with this every time:
1230 warn('Readline services not available on this platform.')
1248 warn('Readline services not available on this platform.')
1231 else:
1249 else:
1232 sys.modules['readline'] = readline
1250 sys.modules['readline'] = readline
1233 import atexit
1251 import atexit
1234 from IPython.completer import IPCompleter
1252 from IPython.completer import IPCompleter
1235 self.Completer = IPCompleter(self,
1253 self.Completer = IPCompleter(self,
1236 self.user_ns,
1254 self.user_ns,
1237 self.user_global_ns,
1255 self.user_global_ns,
1238 self.rc.readline_omit__names,
1256 self.rc.readline_omit__names,
1239 self.alias_table)
1257 self.alias_table)
1240 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1258 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1241 self.strdispatchers['complete_command'] = sdisp
1259 self.strdispatchers['complete_command'] = sdisp
1242 self.Completer.custom_completers = sdisp
1260 self.Completer.custom_completers = sdisp
1243 # Platform-specific configuration
1261 # Platform-specific configuration
1244 if os.name == 'nt':
1262 if os.name == 'nt':
1245 self.readline_startup_hook = readline.set_pre_input_hook
1263 self.readline_startup_hook = readline.set_pre_input_hook
1246 else:
1264 else:
1247 self.readline_startup_hook = readline.set_startup_hook
1265 self.readline_startup_hook = readline.set_startup_hook
1248
1266
1249 # Load user's initrc file (readline config)
1267 # Load user's initrc file (readline config)
1250 inputrc_name = os.environ.get('INPUTRC')
1268 inputrc_name = os.environ.get('INPUTRC')
1251 if inputrc_name is None:
1269 if inputrc_name is None:
1252 home_dir = get_home_dir()
1270 home_dir = get_home_dir()
1253 if home_dir is not None:
1271 if home_dir is not None:
1254 inputrc_name = os.path.join(home_dir,'.inputrc')
1272 inputrc_name = os.path.join(home_dir,'.inputrc')
1255 if os.path.isfile(inputrc_name):
1273 if os.path.isfile(inputrc_name):
1256 try:
1274 try:
1257 readline.read_init_file(inputrc_name)
1275 readline.read_init_file(inputrc_name)
1258 except:
1276 except:
1259 warn('Problems reading readline initialization file <%s>'
1277 warn('Problems reading readline initialization file <%s>'
1260 % inputrc_name)
1278 % inputrc_name)
1261
1279
1262 self.has_readline = 1
1280 self.has_readline = 1
1263 self.readline = readline
1281 self.readline = readline
1264 # save this in sys so embedded copies can restore it properly
1282 # save this in sys so embedded copies can restore it properly
1265 sys.ipcompleter = self.Completer.complete
1283 sys.ipcompleter = self.Completer.complete
1266 readline.set_completer(self.Completer.complete)
1284 readline.set_completer(self.Completer.complete)
1267
1285
1268 # Configure readline according to user's prefs
1286 # Configure readline according to user's prefs
1269 for rlcommand in self.rc.readline_parse_and_bind:
1287 for rlcommand in self.rc.readline_parse_and_bind:
1270 readline.parse_and_bind(rlcommand)
1288 readline.parse_and_bind(rlcommand)
1271
1289
1272 # remove some chars from the delimiters list
1290 # remove some chars from the delimiters list
1273 delims = readline.get_completer_delims()
1291 delims = readline.get_completer_delims()
1274 delims = delims.translate(string._idmap,
1292 delims = delims.translate(string._idmap,
1275 self.rc.readline_remove_delims)
1293 self.rc.readline_remove_delims)
1276 readline.set_completer_delims(delims)
1294 readline.set_completer_delims(delims)
1277 # otherwise we end up with a monster history after a while:
1295 # otherwise we end up with a monster history after a while:
1278 readline.set_history_length(1000)
1296 readline.set_history_length(1000)
1279 try:
1297 try:
1280 #print '*** Reading readline history' # dbg
1298 #print '*** Reading readline history' # dbg
1281 readline.read_history_file(self.histfile)
1299 readline.read_history_file(self.histfile)
1282 except IOError:
1300 except IOError:
1283 pass # It doesn't exist yet.
1301 pass # It doesn't exist yet.
1284
1302
1285 atexit.register(self.atexit_operations)
1303 atexit.register(self.atexit_operations)
1286 del atexit
1304 del atexit
1287
1305
1288 # Configure auto-indent for all platforms
1306 # Configure auto-indent for all platforms
1289 self.set_autoindent(self.rc.autoindent)
1307 self.set_autoindent(self.rc.autoindent)
1290
1308
1291 def ask_yes_no(self,prompt,default=True):
1309 def ask_yes_no(self,prompt,default=True):
1292 if self.rc.quiet:
1310 if self.rc.quiet:
1293 return True
1311 return True
1294 return ask_yes_no(prompt,default)
1312 return ask_yes_no(prompt,default)
1295
1313
1296 def _should_recompile(self,e):
1314 def _should_recompile(self,e):
1297 """Utility routine for edit_syntax_error"""
1315 """Utility routine for edit_syntax_error"""
1298
1316
1299 if e.filename in ('<ipython console>','<input>','<string>',
1317 if e.filename in ('<ipython console>','<input>','<string>',
1300 '<console>','<BackgroundJob compilation>',
1318 '<console>','<BackgroundJob compilation>',
1301 None):
1319 None):
1302
1320
1303 return False
1321 return False
1304 try:
1322 try:
1305 if (self.rc.autoedit_syntax and
1323 if (self.rc.autoedit_syntax and
1306 not self.ask_yes_no('Return to editor to correct syntax error? '
1324 not self.ask_yes_no('Return to editor to correct syntax error? '
1307 '[Y/n] ','y')):
1325 '[Y/n] ','y')):
1308 return False
1326 return False
1309 except EOFError:
1327 except EOFError:
1310 return False
1328 return False
1311
1329
1312 def int0(x):
1330 def int0(x):
1313 try:
1331 try:
1314 return int(x)
1332 return int(x)
1315 except TypeError:
1333 except TypeError:
1316 return 0
1334 return 0
1317 # always pass integer line and offset values to editor hook
1335 # always pass integer line and offset values to editor hook
1318 self.hooks.fix_error_editor(e.filename,
1336 self.hooks.fix_error_editor(e.filename,
1319 int0(e.lineno),int0(e.offset),e.msg)
1337 int0(e.lineno),int0(e.offset),e.msg)
1320 return True
1338 return True
1321
1339
1322 def edit_syntax_error(self):
1340 def edit_syntax_error(self):
1323 """The bottom half of the syntax error handler called in the main loop.
1341 """The bottom half of the syntax error handler called in the main loop.
1324
1342
1325 Loop until syntax error is fixed or user cancels.
1343 Loop until syntax error is fixed or user cancels.
1326 """
1344 """
1327
1345
1328 while self.SyntaxTB.last_syntax_error:
1346 while self.SyntaxTB.last_syntax_error:
1329 # copy and clear last_syntax_error
1347 # copy and clear last_syntax_error
1330 err = self.SyntaxTB.clear_err_state()
1348 err = self.SyntaxTB.clear_err_state()
1331 if not self._should_recompile(err):
1349 if not self._should_recompile(err):
1332 return
1350 return
1333 try:
1351 try:
1334 # may set last_syntax_error again if a SyntaxError is raised
1352 # may set last_syntax_error again if a SyntaxError is raised
1335 self.safe_execfile(err.filename,self.user_ns)
1353 self.safe_execfile(err.filename,self.user_ns)
1336 except:
1354 except:
1337 self.showtraceback()
1355 self.showtraceback()
1338 else:
1356 else:
1339 try:
1357 try:
1340 f = file(err.filename)
1358 f = file(err.filename)
1341 try:
1359 try:
1342 sys.displayhook(f.read())
1360 sys.displayhook(f.read())
1343 finally:
1361 finally:
1344 f.close()
1362 f.close()
1345 except:
1363 except:
1346 self.showtraceback()
1364 self.showtraceback()
1347
1365
1348 def showsyntaxerror(self, filename=None):
1366 def showsyntaxerror(self, filename=None):
1349 """Display the syntax error that just occurred.
1367 """Display the syntax error that just occurred.
1350
1368
1351 This doesn't display a stack trace because there isn't one.
1369 This doesn't display a stack trace because there isn't one.
1352
1370
1353 If a filename is given, it is stuffed in the exception instead
1371 If a filename is given, it is stuffed in the exception instead
1354 of what was there before (because Python's parser always uses
1372 of what was there before (because Python's parser always uses
1355 "<string>" when reading from a string).
1373 "<string>" when reading from a string).
1356 """
1374 """
1357 etype, value, last_traceback = sys.exc_info()
1375 etype, value, last_traceback = sys.exc_info()
1358
1376
1359 # See note about these variables in showtraceback() below
1377 # See note about these variables in showtraceback() below
1360 sys.last_type = etype
1378 sys.last_type = etype
1361 sys.last_value = value
1379 sys.last_value = value
1362 sys.last_traceback = last_traceback
1380 sys.last_traceback = last_traceback
1363
1381
1364 if filename and etype is SyntaxError:
1382 if filename and etype is SyntaxError:
1365 # Work hard to stuff the correct filename in the exception
1383 # Work hard to stuff the correct filename in the exception
1366 try:
1384 try:
1367 msg, (dummy_filename, lineno, offset, line) = value
1385 msg, (dummy_filename, lineno, offset, line) = value
1368 except:
1386 except:
1369 # Not the format we expect; leave it alone
1387 # Not the format we expect; leave it alone
1370 pass
1388 pass
1371 else:
1389 else:
1372 # Stuff in the right filename
1390 # Stuff in the right filename
1373 try:
1391 try:
1374 # Assume SyntaxError is a class exception
1392 # Assume SyntaxError is a class exception
1375 value = SyntaxError(msg, (filename, lineno, offset, line))
1393 value = SyntaxError(msg, (filename, lineno, offset, line))
1376 except:
1394 except:
1377 # If that failed, assume SyntaxError is a string
1395 # If that failed, assume SyntaxError is a string
1378 value = msg, (filename, lineno, offset, line)
1396 value = msg, (filename, lineno, offset, line)
1379 self.SyntaxTB(etype,value,[])
1397 self.SyntaxTB(etype,value,[])
1380
1398
1381 def debugger(self):
1399 def debugger(self):
1382 """Call the pydb/pdb debugger."""
1400 """Call the pydb/pdb debugger."""
1383
1401
1384 if not self.rc.pdb:
1402 if not self.rc.pdb:
1385 return
1403 return
1386 have_pydb = False
1404 have_pydb = False
1387 if sys.version[:3] >= '2.5':
1405 if sys.version[:3] >= '2.5':
1388 try:
1406 try:
1389 from pydb import pm
1407 from pydb import pm
1390 have_pydb = True
1408 have_pydb = True
1391 except ImportError:
1409 except ImportError:
1392 pass
1410 pass
1393 if not have_pydb:
1411 if not have_pydb:
1394 from pdb import pm
1412 from pdb import pm
1395 pm()
1413 self.history_saving_wrapper(pm)()
1396
1414
1397 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1415 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1398 """Display the exception that just occurred.
1416 """Display the exception that just occurred.
1399
1417
1400 If nothing is known about the exception, this is the method which
1418 If nothing is known about the exception, this is the method which
1401 should be used throughout the code for presenting user tracebacks,
1419 should be used throughout the code for presenting user tracebacks,
1402 rather than directly invoking the InteractiveTB object.
1420 rather than directly invoking the InteractiveTB object.
1403
1421
1404 A specific showsyntaxerror() also exists, but this method can take
1422 A specific showsyntaxerror() also exists, but this method can take
1405 care of calling it if needed, so unless you are explicitly catching a
1423 care of calling it if needed, so unless you are explicitly catching a
1406 SyntaxError exception, don't try to analyze the stack manually and
1424 SyntaxError exception, don't try to analyze the stack manually and
1407 simply call this method."""
1425 simply call this method."""
1408
1426
1409 # Though this won't be called by syntax errors in the input line,
1427 # Though this won't be called by syntax errors in the input line,
1410 # there may be SyntaxError cases whith imported code.
1428 # there may be SyntaxError cases whith imported code.
1411 if exc_tuple is None:
1429 if exc_tuple is None:
1412 etype, value, tb = sys.exc_info()
1430 etype, value, tb = sys.exc_info()
1413 else:
1431 else:
1414 etype, value, tb = exc_tuple
1432 etype, value, tb = exc_tuple
1415 if etype is SyntaxError:
1433 if etype is SyntaxError:
1416 self.showsyntaxerror(filename)
1434 self.showsyntaxerror(filename)
1417 else:
1435 else:
1418 # WARNING: these variables are somewhat deprecated and not
1436 # WARNING: these variables are somewhat deprecated and not
1419 # necessarily safe to use in a threaded environment, but tools
1437 # necessarily safe to use in a threaded environment, but tools
1420 # like pdb depend on their existence, so let's set them. If we
1438 # like pdb depend on their existence, so let's set them. If we
1421 # find problems in the field, we'll need to revisit their use.
1439 # find problems in the field, we'll need to revisit their use.
1422 sys.last_type = etype
1440 sys.last_type = etype
1423 sys.last_value = value
1441 sys.last_value = value
1424 sys.last_traceback = tb
1442 sys.last_traceback = tb
1425
1443
1426 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1444 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1427 if self.InteractiveTB.call_pdb and self.has_readline:
1445 if self.InteractiveTB.call_pdb and self.has_readline:
1428 # pdb mucks up readline, fix it back
1446 # pdb mucks up readline, fix it back
1429 self.readline.set_completer(self.Completer.complete)
1447 self.readline.set_completer(self.Completer.complete)
1430
1448
1431 def mainloop(self,banner=None):
1449 def mainloop(self,banner=None):
1432 """Creates the local namespace and starts the mainloop.
1450 """Creates the local namespace and starts the mainloop.
1433
1451
1434 If an optional banner argument is given, it will override the
1452 If an optional banner argument is given, it will override the
1435 internally created default banner."""
1453 internally created default banner."""
1436
1454
1437 if self.rc.c: # Emulate Python's -c option
1455 if self.rc.c: # Emulate Python's -c option
1438 self.exec_init_cmd()
1456 self.exec_init_cmd()
1439 if banner is None:
1457 if banner is None:
1440 if not self.rc.banner:
1458 if not self.rc.banner:
1441 banner = ''
1459 banner = ''
1442 # banner is string? Use it directly!
1460 # banner is string? Use it directly!
1443 elif isinstance(self.rc.banner,basestring):
1461 elif isinstance(self.rc.banner,basestring):
1444 banner = self.rc.banner
1462 banner = self.rc.banner
1445 else:
1463 else:
1446 banner = self.BANNER+self.banner2
1464 banner = self.BANNER+self.banner2
1447
1465
1448 self.interact(banner)
1466 self.interact(banner)
1449
1467
1450 def exec_init_cmd(self):
1468 def exec_init_cmd(self):
1451 """Execute a command given at the command line.
1469 """Execute a command given at the command line.
1452
1470
1453 This emulates Python's -c option."""
1471 This emulates Python's -c option."""
1454
1472
1455 #sys.argv = ['-c']
1473 #sys.argv = ['-c']
1456 self.push(self.rc.c)
1474 self.push(self.rc.c)
1457
1475
1458 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1476 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1459 """Embeds IPython into a running python program.
1477 """Embeds IPython into a running python program.
1460
1478
1461 Input:
1479 Input:
1462
1480
1463 - header: An optional header message can be specified.
1481 - header: An optional header message can be specified.
1464
1482
1465 - local_ns, global_ns: working namespaces. If given as None, the
1483 - local_ns, global_ns: working namespaces. If given as None, the
1466 IPython-initialized one is updated with __main__.__dict__, so that
1484 IPython-initialized one is updated with __main__.__dict__, so that
1467 program variables become visible but user-specific configuration
1485 program variables become visible but user-specific configuration
1468 remains possible.
1486 remains possible.
1469
1487
1470 - stack_depth: specifies how many levels in the stack to go to
1488 - stack_depth: specifies how many levels in the stack to go to
1471 looking for namespaces (when local_ns and global_ns are None). This
1489 looking for namespaces (when local_ns and global_ns are None). This
1472 allows an intermediate caller to make sure that this function gets
1490 allows an intermediate caller to make sure that this function gets
1473 the namespace from the intended level in the stack. By default (0)
1491 the namespace from the intended level in the stack. By default (0)
1474 it will get its locals and globals from the immediate caller.
1492 it will get its locals and globals from the immediate caller.
1475
1493
1476 Warning: it's possible to use this in a program which is being run by
1494 Warning: it's possible to use this in a program which is being run by
1477 IPython itself (via %run), but some funny things will happen (a few
1495 IPython itself (via %run), but some funny things will happen (a few
1478 globals get overwritten). In the future this will be cleaned up, as
1496 globals get overwritten). In the future this will be cleaned up, as
1479 there is no fundamental reason why it can't work perfectly."""
1497 there is no fundamental reason why it can't work perfectly."""
1480
1498
1481 # Get locals and globals from caller
1499 # Get locals and globals from caller
1482 if local_ns is None or global_ns is None:
1500 if local_ns is None or global_ns is None:
1483 call_frame = sys._getframe(stack_depth).f_back
1501 call_frame = sys._getframe(stack_depth).f_back
1484
1502
1485 if local_ns is None:
1503 if local_ns is None:
1486 local_ns = call_frame.f_locals
1504 local_ns = call_frame.f_locals
1487 if global_ns is None:
1505 if global_ns is None:
1488 global_ns = call_frame.f_globals
1506 global_ns = call_frame.f_globals
1489
1507
1490 # Update namespaces and fire up interpreter
1508 # Update namespaces and fire up interpreter
1491
1509
1492 # The global one is easy, we can just throw it in
1510 # The global one is easy, we can just throw it in
1493 self.user_global_ns = global_ns
1511 self.user_global_ns = global_ns
1494
1512
1495 # but the user/local one is tricky: ipython needs it to store internal
1513 # but the user/local one is tricky: ipython needs it to store internal
1496 # data, but we also need the locals. We'll copy locals in the user
1514 # data, but we also need the locals. We'll copy locals in the user
1497 # one, but will track what got copied so we can delete them at exit.
1515 # one, but will track what got copied so we can delete them at exit.
1498 # This is so that a later embedded call doesn't see locals from a
1516 # This is so that a later embedded call doesn't see locals from a
1499 # previous call (which most likely existed in a separate scope).
1517 # previous call (which most likely existed in a separate scope).
1500 local_varnames = local_ns.keys()
1518 local_varnames = local_ns.keys()
1501 self.user_ns.update(local_ns)
1519 self.user_ns.update(local_ns)
1502
1520
1503 # Patch for global embedding to make sure that things don't overwrite
1521 # Patch for global embedding to make sure that things don't overwrite
1504 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1522 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1505 # FIXME. Test this a bit more carefully (the if.. is new)
1523 # FIXME. Test this a bit more carefully (the if.. is new)
1506 if local_ns is None and global_ns is None:
1524 if local_ns is None and global_ns is None:
1507 self.user_global_ns.update(__main__.__dict__)
1525 self.user_global_ns.update(__main__.__dict__)
1508
1526
1509 # make sure the tab-completer has the correct frame information, so it
1527 # make sure the tab-completer has the correct frame information, so it
1510 # actually completes using the frame's locals/globals
1528 # actually completes using the frame's locals/globals
1511 self.set_completer_frame()
1529 self.set_completer_frame()
1512
1530
1513 # before activating the interactive mode, we need to make sure that
1531 # before activating the interactive mode, we need to make sure that
1514 # all names in the builtin namespace needed by ipython point to
1532 # all names in the builtin namespace needed by ipython point to
1515 # ourselves, and not to other instances.
1533 # ourselves, and not to other instances.
1516 self.add_builtins()
1534 self.add_builtins()
1517
1535
1518 self.interact(header)
1536 self.interact(header)
1519
1537
1520 # now, purge out the user namespace from anything we might have added
1538 # now, purge out the user namespace from anything we might have added
1521 # from the caller's local namespace
1539 # from the caller's local namespace
1522 delvar = self.user_ns.pop
1540 delvar = self.user_ns.pop
1523 for var in local_varnames:
1541 for var in local_varnames:
1524 delvar(var,None)
1542 delvar(var,None)
1525 # and clean builtins we may have overridden
1543 # and clean builtins we may have overridden
1526 self.clean_builtins()
1544 self.clean_builtins()
1527
1545
1528 def interact(self, banner=None):
1546 def interact(self, banner=None):
1529 """Closely emulate the interactive Python console.
1547 """Closely emulate the interactive Python console.
1530
1548
1531 The optional banner argument specify the banner to print
1549 The optional banner argument specify the banner to print
1532 before the first interaction; by default it prints a banner
1550 before the first interaction; by default it prints a banner
1533 similar to the one printed by the real Python interpreter,
1551 similar to the one printed by the real Python interpreter,
1534 followed by the current class name in parentheses (so as not
1552 followed by the current class name in parentheses (so as not
1535 to confuse this with the real interpreter -- since it's so
1553 to confuse this with the real interpreter -- since it's so
1536 close!).
1554 close!).
1537
1555
1538 """
1556 """
1539
1557
1540 if self.exit_now:
1558 if self.exit_now:
1541 # batch run -> do not interact
1559 # batch run -> do not interact
1542 return
1560 return
1543 cprt = 'Type "copyright", "credits" or "license" for more information.'
1561 cprt = 'Type "copyright", "credits" or "license" for more information.'
1544 if banner is None:
1562 if banner is None:
1545 self.write("Python %s on %s\n%s\n(%s)\n" %
1563 self.write("Python %s on %s\n%s\n(%s)\n" %
1546 (sys.version, sys.platform, cprt,
1564 (sys.version, sys.platform, cprt,
1547 self.__class__.__name__))
1565 self.__class__.__name__))
1548 else:
1566 else:
1549 self.write(banner)
1567 self.write(banner)
1550
1568
1551 more = 0
1569 more = 0
1552
1570
1553 # Mark activity in the builtins
1571 # Mark activity in the builtins
1554 __builtin__.__dict__['__IPYTHON__active'] += 1
1572 __builtin__.__dict__['__IPYTHON__active'] += 1
1555
1573
1556 # exit_now is set by a call to %Exit or %Quit
1574 # exit_now is set by a call to %Exit or %Quit
1557 while not self.exit_now:
1575 while not self.exit_now:
1558 if more:
1576 if more:
1559 prompt = self.hooks.generate_prompt(True)
1577 prompt = self.hooks.generate_prompt(True)
1560 if self.autoindent:
1578 if self.autoindent:
1561 self.readline_startup_hook(self.pre_readline)
1579 self.readline_startup_hook(self.pre_readline)
1562 else:
1580 else:
1563 prompt = self.hooks.generate_prompt(False)
1581 prompt = self.hooks.generate_prompt(False)
1564 try:
1582 try:
1565 line = self.raw_input(prompt,more)
1583 line = self.raw_input(prompt,more)
1566 if self.exit_now:
1584 if self.exit_now:
1567 # quick exit on sys.std[in|out] close
1585 # quick exit on sys.std[in|out] close
1568 break
1586 break
1569 if self.autoindent:
1587 if self.autoindent:
1570 self.readline_startup_hook(None)
1588 self.readline_startup_hook(None)
1571 except KeyboardInterrupt:
1589 except KeyboardInterrupt:
1572 self.write('\nKeyboardInterrupt\n')
1590 self.write('\nKeyboardInterrupt\n')
1573 self.resetbuffer()
1591 self.resetbuffer()
1574 # keep cache in sync with the prompt counter:
1592 # keep cache in sync with the prompt counter:
1575 self.outputcache.prompt_count -= 1
1593 self.outputcache.prompt_count -= 1
1576
1594
1577 if self.autoindent:
1595 if self.autoindent:
1578 self.indent_current_nsp = 0
1596 self.indent_current_nsp = 0
1579 more = 0
1597 more = 0
1580 except EOFError:
1598 except EOFError:
1581 if self.autoindent:
1599 if self.autoindent:
1582 self.readline_startup_hook(None)
1600 self.readline_startup_hook(None)
1583 self.write('\n')
1601 self.write('\n')
1584 self.exit()
1602 self.exit()
1585 except bdb.BdbQuit:
1603 except bdb.BdbQuit:
1586 warn('The Python debugger has exited with a BdbQuit exception.\n'
1604 warn('The Python debugger has exited with a BdbQuit exception.\n'
1587 'Because of how pdb handles the stack, it is impossible\n'
1605 'Because of how pdb handles the stack, it is impossible\n'
1588 'for IPython to properly format this particular exception.\n'
1606 'for IPython to properly format this particular exception.\n'
1589 'IPython will resume normal operation.')
1607 'IPython will resume normal operation.')
1590 except:
1608 except:
1591 # exceptions here are VERY RARE, but they can be triggered
1609 # exceptions here are VERY RARE, but they can be triggered
1592 # asynchronously by signal handlers, for example.
1610 # asynchronously by signal handlers, for example.
1593 self.showtraceback()
1611 self.showtraceback()
1594 else:
1612 else:
1595 more = self.push(line)
1613 more = self.push(line)
1596 if (self.SyntaxTB.last_syntax_error and
1614 if (self.SyntaxTB.last_syntax_error and
1597 self.rc.autoedit_syntax):
1615 self.rc.autoedit_syntax):
1598 self.edit_syntax_error()
1616 self.edit_syntax_error()
1599
1617
1600 # We are off again...
1618 # We are off again...
1601 __builtin__.__dict__['__IPYTHON__active'] -= 1
1619 __builtin__.__dict__['__IPYTHON__active'] -= 1
1602
1620
1603 def excepthook(self, etype, value, tb):
1621 def excepthook(self, etype, value, tb):
1604 """One more defense for GUI apps that call sys.excepthook.
1622 """One more defense for GUI apps that call sys.excepthook.
1605
1623
1606 GUI frameworks like wxPython trap exceptions and call
1624 GUI frameworks like wxPython trap exceptions and call
1607 sys.excepthook themselves. I guess this is a feature that
1625 sys.excepthook themselves. I guess this is a feature that
1608 enables them to keep running after exceptions that would
1626 enables them to keep running after exceptions that would
1609 otherwise kill their mainloop. This is a bother for IPython
1627 otherwise kill their mainloop. This is a bother for IPython
1610 which excepts to catch all of the program exceptions with a try:
1628 which excepts to catch all of the program exceptions with a try:
1611 except: statement.
1629 except: statement.
1612
1630
1613 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1631 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1614 any app directly invokes sys.excepthook, it will look to the user like
1632 any app directly invokes sys.excepthook, it will look to the user like
1615 IPython crashed. In order to work around this, we can disable the
1633 IPython crashed. In order to work around this, we can disable the
1616 CrashHandler and replace it with this excepthook instead, which prints a
1634 CrashHandler and replace it with this excepthook instead, which prints a
1617 regular traceback using our InteractiveTB. In this fashion, apps which
1635 regular traceback using our InteractiveTB. In this fashion, apps which
1618 call sys.excepthook will generate a regular-looking exception from
1636 call sys.excepthook will generate a regular-looking exception from
1619 IPython, and the CrashHandler will only be triggered by real IPython
1637 IPython, and the CrashHandler will only be triggered by real IPython
1620 crashes.
1638 crashes.
1621
1639
1622 This hook should be used sparingly, only in places which are not likely
1640 This hook should be used sparingly, only in places which are not likely
1623 to be true IPython errors.
1641 to be true IPython errors.
1624 """
1642 """
1625 self.showtraceback((etype,value,tb),tb_offset=0)
1643 self.showtraceback((etype,value,tb),tb_offset=0)
1626
1644
1627 def expand_aliases(self,fn,rest):
1645 def expand_aliases(self,fn,rest):
1628 """ Expand multiple levels of aliases:
1646 """ Expand multiple levels of aliases:
1629
1647
1630 if:
1648 if:
1631
1649
1632 alias foo bar /tmp
1650 alias foo bar /tmp
1633 alias baz foo
1651 alias baz foo
1634
1652
1635 then:
1653 then:
1636
1654
1637 baz huhhahhei -> bar /tmp huhhahhei
1655 baz huhhahhei -> bar /tmp huhhahhei
1638
1656
1639 """
1657 """
1640 line = fn + " " + rest
1658 line = fn + " " + rest
1641
1659
1642 done = Set()
1660 done = Set()
1643 while 1:
1661 while 1:
1644 pre,fn,rest = self.split_user_input(line)
1662 pre,fn,rest = self.split_user_input(line)
1645 if fn in self.alias_table:
1663 if fn in self.alias_table:
1646 if fn in done:
1664 if fn in done:
1647 warn("Cyclic alias definition, repeated '%s'" % fn)
1665 warn("Cyclic alias definition, repeated '%s'" % fn)
1648 return ""
1666 return ""
1649 done.add(fn)
1667 done.add(fn)
1650
1668
1651 l2 = self.transform_alias(fn,rest)
1669 l2 = self.transform_alias(fn,rest)
1652 # dir -> dir
1670 # dir -> dir
1653 # print "alias",line, "->",l2 #dbg
1671 # print "alias",line, "->",l2 #dbg
1654 if l2 == line:
1672 if l2 == line:
1655 break
1673 break
1656 # ls -> ls -F should not recurse forever
1674 # ls -> ls -F should not recurse forever
1657 if l2.split(None,1)[0] == line.split(None,1)[0]:
1675 if l2.split(None,1)[0] == line.split(None,1)[0]:
1658 line = l2
1676 line = l2
1659 break
1677 break
1660
1678
1661 line=l2
1679 line=l2
1662
1680
1663
1681
1664 # print "al expand to",line #dbg
1682 # print "al expand to",line #dbg
1665 else:
1683 else:
1666 break
1684 break
1667
1685
1668 return line
1686 return line
1669
1687
1670 def transform_alias(self, alias,rest=''):
1688 def transform_alias(self, alias,rest=''):
1671 """ Transform alias to system command string.
1689 """ Transform alias to system command string.
1672 """
1690 """
1673 nargs,cmd = self.alias_table[alias]
1691 nargs,cmd = self.alias_table[alias]
1674 if ' ' in cmd and os.path.isfile(cmd):
1692 if ' ' in cmd and os.path.isfile(cmd):
1675 cmd = '"%s"' % cmd
1693 cmd = '"%s"' % cmd
1676
1694
1677 # Expand the %l special to be the user's input line
1695 # Expand the %l special to be the user's input line
1678 if cmd.find('%l') >= 0:
1696 if cmd.find('%l') >= 0:
1679 cmd = cmd.replace('%l',rest)
1697 cmd = cmd.replace('%l',rest)
1680 rest = ''
1698 rest = ''
1681 if nargs==0:
1699 if nargs==0:
1682 # Simple, argument-less aliases
1700 # Simple, argument-less aliases
1683 cmd = '%s %s' % (cmd,rest)
1701 cmd = '%s %s' % (cmd,rest)
1684 else:
1702 else:
1685 # Handle aliases with positional arguments
1703 # Handle aliases with positional arguments
1686 args = rest.split(None,nargs)
1704 args = rest.split(None,nargs)
1687 if len(args)< nargs:
1705 if len(args)< nargs:
1688 error('Alias <%s> requires %s arguments, %s given.' %
1706 error('Alias <%s> requires %s arguments, %s given.' %
1689 (alias,nargs,len(args)))
1707 (alias,nargs,len(args)))
1690 return None
1708 return None
1691 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1709 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1692 # Now call the macro, evaluating in the user's namespace
1710 # Now call the macro, evaluating in the user's namespace
1693 #print 'new command: <%r>' % cmd # dbg
1711 #print 'new command: <%r>' % cmd # dbg
1694 return cmd
1712 return cmd
1695
1713
1696 def call_alias(self,alias,rest=''):
1714 def call_alias(self,alias,rest=''):
1697 """Call an alias given its name and the rest of the line.
1715 """Call an alias given its name and the rest of the line.
1698
1716
1699 This is only used to provide backwards compatibility for users of
1717 This is only used to provide backwards compatibility for users of
1700 ipalias(), use of which is not recommended for anymore."""
1718 ipalias(), use of which is not recommended for anymore."""
1701
1719
1702 # Now call the macro, evaluating in the user's namespace
1720 # Now call the macro, evaluating in the user's namespace
1703 cmd = self.transform_alias(alias, rest)
1721 cmd = self.transform_alias(alias, rest)
1704 try:
1722 try:
1705 self.system(cmd)
1723 self.system(cmd)
1706 except:
1724 except:
1707 self.showtraceback()
1725 self.showtraceback()
1708
1726
1709 def indent_current_str(self):
1727 def indent_current_str(self):
1710 """return the current level of indentation as a string"""
1728 """return the current level of indentation as a string"""
1711 return self.indent_current_nsp * ' '
1729 return self.indent_current_nsp * ' '
1712
1730
1713 def autoindent_update(self,line):
1731 def autoindent_update(self,line):
1714 """Keep track of the indent level."""
1732 """Keep track of the indent level."""
1715
1733
1716 #debugx('line')
1734 #debugx('line')
1717 #debugx('self.indent_current_nsp')
1735 #debugx('self.indent_current_nsp')
1718 if self.autoindent:
1736 if self.autoindent:
1719 if line:
1737 if line:
1720 inisp = num_ini_spaces(line)
1738 inisp = num_ini_spaces(line)
1721 if inisp < self.indent_current_nsp:
1739 if inisp < self.indent_current_nsp:
1722 self.indent_current_nsp = inisp
1740 self.indent_current_nsp = inisp
1723
1741
1724 if line[-1] == ':':
1742 if line[-1] == ':':
1725 self.indent_current_nsp += 4
1743 self.indent_current_nsp += 4
1726 elif dedent_re.match(line):
1744 elif dedent_re.match(line):
1727 self.indent_current_nsp -= 4
1745 self.indent_current_nsp -= 4
1728 else:
1746 else:
1729 self.indent_current_nsp = 0
1747 self.indent_current_nsp = 0
1730
1748
1731 def runlines(self,lines):
1749 def runlines(self,lines):
1732 """Run a string of one or more lines of source.
1750 """Run a string of one or more lines of source.
1733
1751
1734 This method is capable of running a string containing multiple source
1752 This method is capable of running a string containing multiple source
1735 lines, as if they had been entered at the IPython prompt. Since it
1753 lines, as if they had been entered at the IPython prompt. Since it
1736 exposes IPython's processing machinery, the given strings can contain
1754 exposes IPython's processing machinery, the given strings can contain
1737 magic calls (%magic), special shell access (!cmd), etc."""
1755 magic calls (%magic), special shell access (!cmd), etc."""
1738
1756
1739 # We must start with a clean buffer, in case this is run from an
1757 # We must start with a clean buffer, in case this is run from an
1740 # interactive IPython session (via a magic, for example).
1758 # interactive IPython session (via a magic, for example).
1741 self.resetbuffer()
1759 self.resetbuffer()
1742 lines = lines.split('\n')
1760 lines = lines.split('\n')
1743 more = 0
1761 more = 0
1744 for line in lines:
1762 for line in lines:
1745 # skip blank lines so we don't mess up the prompt counter, but do
1763 # skip blank lines so we don't mess up the prompt counter, but do
1746 # NOT skip even a blank line if we are in a code block (more is
1764 # NOT skip even a blank line if we are in a code block (more is
1747 # true)
1765 # true)
1748 if line or more:
1766 if line or more:
1749 more = self.push(self.prefilter(line,more))
1767 more = self.push(self.prefilter(line,more))
1750 # IPython's runsource returns None if there was an error
1768 # IPython's runsource returns None if there was an error
1751 # compiling the code. This allows us to stop processing right
1769 # compiling the code. This allows us to stop processing right
1752 # away, so the user gets the error message at the right place.
1770 # away, so the user gets the error message at the right place.
1753 if more is None:
1771 if more is None:
1754 break
1772 break
1755 # final newline in case the input didn't have it, so that the code
1773 # final newline in case the input didn't have it, so that the code
1756 # actually does get executed
1774 # actually does get executed
1757 if more:
1775 if more:
1758 self.push('\n')
1776 self.push('\n')
1759
1777
1760 def runsource(self, source, filename='<input>', symbol='single'):
1778 def runsource(self, source, filename='<input>', symbol='single'):
1761 """Compile and run some source in the interpreter.
1779 """Compile and run some source in the interpreter.
1762
1780
1763 Arguments are as for compile_command().
1781 Arguments are as for compile_command().
1764
1782
1765 One several things can happen:
1783 One several things can happen:
1766
1784
1767 1) The input is incorrect; compile_command() raised an
1785 1) The input is incorrect; compile_command() raised an
1768 exception (SyntaxError or OverflowError). A syntax traceback
1786 exception (SyntaxError or OverflowError). A syntax traceback
1769 will be printed by calling the showsyntaxerror() method.
1787 will be printed by calling the showsyntaxerror() method.
1770
1788
1771 2) The input is incomplete, and more input is required;
1789 2) The input is incomplete, and more input is required;
1772 compile_command() returned None. Nothing happens.
1790 compile_command() returned None. Nothing happens.
1773
1791
1774 3) The input is complete; compile_command() returned a code
1792 3) The input is complete; compile_command() returned a code
1775 object. The code is executed by calling self.runcode() (which
1793 object. The code is executed by calling self.runcode() (which
1776 also handles run-time exceptions, except for SystemExit).
1794 also handles run-time exceptions, except for SystemExit).
1777
1795
1778 The return value is:
1796 The return value is:
1779
1797
1780 - True in case 2
1798 - True in case 2
1781
1799
1782 - False in the other cases, unless an exception is raised, where
1800 - False in the other cases, unless an exception is raised, where
1783 None is returned instead. This can be used by external callers to
1801 None is returned instead. This can be used by external callers to
1784 know whether to continue feeding input or not.
1802 know whether to continue feeding input or not.
1785
1803
1786 The return value can be used to decide whether to use sys.ps1 or
1804 The return value can be used to decide whether to use sys.ps1 or
1787 sys.ps2 to prompt the next line."""
1805 sys.ps2 to prompt the next line."""
1788
1806
1789 try:
1807 try:
1790 code = self.compile(source,filename,symbol)
1808 code = self.compile(source,filename,symbol)
1791 except (OverflowError, SyntaxError, ValueError):
1809 except (OverflowError, SyntaxError, ValueError):
1792 # Case 1
1810 # Case 1
1793 self.showsyntaxerror(filename)
1811 self.showsyntaxerror(filename)
1794 return None
1812 return None
1795
1813
1796 if code is None:
1814 if code is None:
1797 # Case 2
1815 # Case 2
1798 return True
1816 return True
1799
1817
1800 # Case 3
1818 # Case 3
1801 # We store the code object so that threaded shells and
1819 # We store the code object so that threaded shells and
1802 # custom exception handlers can access all this info if needed.
1820 # custom exception handlers can access all this info if needed.
1803 # The source corresponding to this can be obtained from the
1821 # The source corresponding to this can be obtained from the
1804 # buffer attribute as '\n'.join(self.buffer).
1822 # buffer attribute as '\n'.join(self.buffer).
1805 self.code_to_run = code
1823 self.code_to_run = code
1806 # now actually execute the code object
1824 # now actually execute the code object
1807 if self.runcode(code) == 0:
1825 if self.runcode(code) == 0:
1808 return False
1826 return False
1809 else:
1827 else:
1810 return None
1828 return None
1811
1829
1812 def runcode(self,code_obj):
1830 def runcode(self,code_obj):
1813 """Execute a code object.
1831 """Execute a code object.
1814
1832
1815 When an exception occurs, self.showtraceback() is called to display a
1833 When an exception occurs, self.showtraceback() is called to display a
1816 traceback.
1834 traceback.
1817
1835
1818 Return value: a flag indicating whether the code to be run completed
1836 Return value: a flag indicating whether the code to be run completed
1819 successfully:
1837 successfully:
1820
1838
1821 - 0: successful execution.
1839 - 0: successful execution.
1822 - 1: an error occurred.
1840 - 1: an error occurred.
1823 """
1841 """
1824
1842
1825 # Set our own excepthook in case the user code tries to call it
1843 # Set our own excepthook in case the user code tries to call it
1826 # directly, so that the IPython crash handler doesn't get triggered
1844 # directly, so that the IPython crash handler doesn't get triggered
1827 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1845 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1828
1846
1829 # we save the original sys.excepthook in the instance, in case config
1847 # we save the original sys.excepthook in the instance, in case config
1830 # code (such as magics) needs access to it.
1848 # code (such as magics) needs access to it.
1831 self.sys_excepthook = old_excepthook
1849 self.sys_excepthook = old_excepthook
1832 outflag = 1 # happens in more places, so it's easier as default
1850 outflag = 1 # happens in more places, so it's easier as default
1833 try:
1851 try:
1834 try:
1852 try:
1835 # Embedded instances require separate global/local namespaces
1853 # Embedded instances require separate global/local namespaces
1836 # so they can see both the surrounding (local) namespace and
1854 # so they can see both the surrounding (local) namespace and
1837 # the module-level globals when called inside another function.
1855 # the module-level globals when called inside another function.
1838 if self.embedded:
1856 if self.embedded:
1839 exec code_obj in self.user_global_ns, self.user_ns
1857 exec code_obj in self.user_global_ns, self.user_ns
1840 # Normal (non-embedded) instances should only have a single
1858 # Normal (non-embedded) instances should only have a single
1841 # namespace for user code execution, otherwise functions won't
1859 # namespace for user code execution, otherwise functions won't
1842 # see interactive top-level globals.
1860 # see interactive top-level globals.
1843 else:
1861 else:
1844 exec code_obj in self.user_ns
1862 exec code_obj in self.user_ns
1845 finally:
1863 finally:
1846 # Reset our crash handler in place
1864 # Reset our crash handler in place
1847 sys.excepthook = old_excepthook
1865 sys.excepthook = old_excepthook
1848 except SystemExit:
1866 except SystemExit:
1849 self.resetbuffer()
1867 self.resetbuffer()
1850 self.showtraceback()
1868 self.showtraceback()
1851 warn("Type %exit or %quit to exit IPython "
1869 warn("Type %exit or %quit to exit IPython "
1852 "(%Exit or %Quit do so unconditionally).",level=1)
1870 "(%Exit or %Quit do so unconditionally).",level=1)
1853 except self.custom_exceptions:
1871 except self.custom_exceptions:
1854 etype,value,tb = sys.exc_info()
1872 etype,value,tb = sys.exc_info()
1855 self.CustomTB(etype,value,tb)
1873 self.CustomTB(etype,value,tb)
1856 except:
1874 except:
1857 self.showtraceback()
1875 self.showtraceback()
1858 else:
1876 else:
1859 outflag = 0
1877 outflag = 0
1860 if softspace(sys.stdout, 0):
1878 if softspace(sys.stdout, 0):
1861 print
1879 print
1862 # Flush out code object which has been run (and source)
1880 # Flush out code object which has been run (and source)
1863 self.code_to_run = None
1881 self.code_to_run = None
1864 return outflag
1882 return outflag
1865
1883
1866 def push(self, line):
1884 def push(self, line):
1867 """Push a line to the interpreter.
1885 """Push a line to the interpreter.
1868
1886
1869 The line should not have a trailing newline; it may have
1887 The line should not have a trailing newline; it may have
1870 internal newlines. The line is appended to a buffer and the
1888 internal newlines. The line is appended to a buffer and the
1871 interpreter's runsource() method is called with the
1889 interpreter's runsource() method is called with the
1872 concatenated contents of the buffer as source. If this
1890 concatenated contents of the buffer as source. If this
1873 indicates that the command was executed or invalid, the buffer
1891 indicates that the command was executed or invalid, the buffer
1874 is reset; otherwise, the command is incomplete, and the buffer
1892 is reset; otherwise, the command is incomplete, and the buffer
1875 is left as it was after the line was appended. The return
1893 is left as it was after the line was appended. The return
1876 value is 1 if more input is required, 0 if the line was dealt
1894 value is 1 if more input is required, 0 if the line was dealt
1877 with in some way (this is the same as runsource()).
1895 with in some way (this is the same as runsource()).
1878 """
1896 """
1879
1897
1880 # autoindent management should be done here, and not in the
1898 # autoindent management should be done here, and not in the
1881 # interactive loop, since that one is only seen by keyboard input. We
1899 # interactive loop, since that one is only seen by keyboard input. We
1882 # need this done correctly even for code run via runlines (which uses
1900 # need this done correctly even for code run via runlines (which uses
1883 # push).
1901 # push).
1884
1902
1885 #print 'push line: <%s>' % line # dbg
1903 #print 'push line: <%s>' % line # dbg
1886 for subline in line.splitlines():
1904 for subline in line.splitlines():
1887 self.autoindent_update(subline)
1905 self.autoindent_update(subline)
1888 self.buffer.append(line)
1906 self.buffer.append(line)
1889 more = self.runsource('\n'.join(self.buffer), self.filename)
1907 more = self.runsource('\n'.join(self.buffer), self.filename)
1890 if not more:
1908 if not more:
1891 self.resetbuffer()
1909 self.resetbuffer()
1892 return more
1910 return more
1893
1911
1894 def resetbuffer(self):
1912 def resetbuffer(self):
1895 """Reset the input buffer."""
1913 """Reset the input buffer."""
1896 self.buffer[:] = []
1914 self.buffer[:] = []
1897
1915
1898 def raw_input(self,prompt='',continue_prompt=False):
1916 def raw_input(self,prompt='',continue_prompt=False):
1899 """Write a prompt and read a line.
1917 """Write a prompt and read a line.
1900
1918
1901 The returned line does not include the trailing newline.
1919 The returned line does not include the trailing newline.
1902 When the user enters the EOF key sequence, EOFError is raised.
1920 When the user enters the EOF key sequence, EOFError is raised.
1903
1921
1904 Optional inputs:
1922 Optional inputs:
1905
1923
1906 - prompt(''): a string to be printed to prompt the user.
1924 - prompt(''): a string to be printed to prompt the user.
1907
1925
1908 - continue_prompt(False): whether this line is the first one or a
1926 - continue_prompt(False): whether this line is the first one or a
1909 continuation in a sequence of inputs.
1927 continuation in a sequence of inputs.
1910 """
1928 """
1911
1929
1912 try:
1930 try:
1913 line = raw_input_original(prompt)
1931 line = raw_input_original(prompt)
1914 except ValueError:
1932 except ValueError:
1915 warn("\n********\nYou or a %run:ed script called sys.stdin.close() or sys.stdout.close()!\nExiting IPython!")
1933 warn("\n********\nYou or a %run:ed script called sys.stdin.close() or sys.stdout.close()!\nExiting IPython!")
1916 self.exit_now = True
1934 self.exit_now = True
1917 return ""
1935 return ""
1918
1936
1919
1937
1920 # Try to be reasonably smart about not re-indenting pasted input more
1938 # Try to be reasonably smart about not re-indenting pasted input more
1921 # than necessary. We do this by trimming out the auto-indent initial
1939 # than necessary. We do this by trimming out the auto-indent initial
1922 # spaces, if the user's actual input started itself with whitespace.
1940 # spaces, if the user's actual input started itself with whitespace.
1923 #debugx('self.buffer[-1]')
1941 #debugx('self.buffer[-1]')
1924
1942
1925 if self.autoindent:
1943 if self.autoindent:
1926 if num_ini_spaces(line) > self.indent_current_nsp:
1944 if num_ini_spaces(line) > self.indent_current_nsp:
1927 line = line[self.indent_current_nsp:]
1945 line = line[self.indent_current_nsp:]
1928 self.indent_current_nsp = 0
1946 self.indent_current_nsp = 0
1929
1947
1930 # store the unfiltered input before the user has any chance to modify
1948 # store the unfiltered input before the user has any chance to modify
1931 # it.
1949 # it.
1932 if line.strip():
1950 if line.strip():
1933 if continue_prompt:
1951 if continue_prompt:
1934 self.input_hist_raw[-1] += '%s\n' % line
1952 self.input_hist_raw[-1] += '%s\n' % line
1935 if self.has_readline: # and some config option is set?
1953 if self.has_readline: # and some config option is set?
1936 try:
1954 try:
1937 histlen = self.readline.get_current_history_length()
1955 histlen = self.readline.get_current_history_length()
1938 newhist = self.input_hist_raw[-1].rstrip()
1956 newhist = self.input_hist_raw[-1].rstrip()
1939 self.readline.remove_history_item(histlen-1)
1957 self.readline.remove_history_item(histlen-1)
1940 self.readline.replace_history_item(histlen-2,newhist)
1958 self.readline.replace_history_item(histlen-2,newhist)
1941 except AttributeError:
1959 except AttributeError:
1942 pass # re{move,place}_history_item are new in 2.4.
1960 pass # re{move,place}_history_item are new in 2.4.
1943 else:
1961 else:
1944 self.input_hist_raw.append('%s\n' % line)
1962 self.input_hist_raw.append('%s\n' % line)
1945
1963
1946 try:
1964 try:
1947 lineout = self.prefilter(line,continue_prompt)
1965 lineout = self.prefilter(line,continue_prompt)
1948 except:
1966 except:
1949 # blanket except, in case a user-defined prefilter crashes, so it
1967 # blanket except, in case a user-defined prefilter crashes, so it
1950 # can't take all of ipython with it.
1968 # can't take all of ipython with it.
1951 self.showtraceback()
1969 self.showtraceback()
1952 return ''
1970 return ''
1953 else:
1971 else:
1954 return lineout
1972 return lineout
1955
1973
1956 def split_user_input(self,line):
1974 def split_user_input(self,line):
1957 """Split user input into pre-char, function part and rest."""
1975 """Split user input into pre-char, function part and rest."""
1958
1976
1959 lsplit = self.line_split.match(line)
1977 lsplit = self.line_split.match(line)
1960 if lsplit is None: # no regexp match returns None
1978 if lsplit is None: # no regexp match returns None
1961 try:
1979 try:
1962 iFun,theRest = line.split(None,1)
1980 iFun,theRest = line.split(None,1)
1963 except ValueError:
1981 except ValueError:
1964 iFun,theRest = line,''
1982 iFun,theRest = line,''
1965 pre = re.match('^(\s*)(.*)',line).groups()[0]
1983 pre = re.match('^(\s*)(.*)',line).groups()[0]
1966 else:
1984 else:
1967 pre,iFun,theRest = lsplit.groups()
1985 pre,iFun,theRest = lsplit.groups()
1968
1986
1969 #print 'line:<%s>' % line # dbg
1987 #print 'line:<%s>' % line # dbg
1970 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1988 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1971 return pre,iFun.strip(),theRest
1989 return pre,iFun.strip(),theRest
1972
1990
1973 def _prefilter(self, line, continue_prompt):
1991 def _prefilter(self, line, continue_prompt):
1974 """Calls different preprocessors, depending on the form of line."""
1992 """Calls different preprocessors, depending on the form of line."""
1975
1993
1976 # All handlers *must* return a value, even if it's blank ('').
1994 # All handlers *must* return a value, even if it's blank ('').
1977
1995
1978 # Lines are NOT logged here. Handlers should process the line as
1996 # Lines are NOT logged here. Handlers should process the line as
1979 # needed, update the cache AND log it (so that the input cache array
1997 # needed, update the cache AND log it (so that the input cache array
1980 # stays synced).
1998 # stays synced).
1981
1999
1982 # This function is _very_ delicate, and since it's also the one which
2000 # This function is _very_ delicate, and since it's also the one which
1983 # determines IPython's response to user input, it must be as efficient
2001 # determines IPython's response to user input, it must be as efficient
1984 # as possible. For this reason it has _many_ returns in it, trying
2002 # as possible. For this reason it has _many_ returns in it, trying
1985 # always to exit as quickly as it can figure out what it needs to do.
2003 # always to exit as quickly as it can figure out what it needs to do.
1986
2004
1987 # This function is the main responsible for maintaining IPython's
2005 # This function is the main responsible for maintaining IPython's
1988 # behavior respectful of Python's semantics. So be _very_ careful if
2006 # behavior respectful of Python's semantics. So be _very_ careful if
1989 # making changes to anything here.
2007 # making changes to anything here.
1990
2008
1991 #.....................................................................
2009 #.....................................................................
1992 # Code begins
2010 # Code begins
1993
2011
1994 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2012 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1995
2013
1996 # save the line away in case we crash, so the post-mortem handler can
2014 # save the line away in case we crash, so the post-mortem handler can
1997 # record it
2015 # record it
1998 self._last_input_line = line
2016 self._last_input_line = line
1999
2017
2000 #print '***line: <%s>' % line # dbg
2018 #print '***line: <%s>' % line # dbg
2001
2019
2002 # the input history needs to track even empty lines
2020 # the input history needs to track even empty lines
2003 stripped = line.strip()
2021 stripped = line.strip()
2004
2022
2005 if not stripped:
2023 if not stripped:
2006 if not continue_prompt:
2024 if not continue_prompt:
2007 self.outputcache.prompt_count -= 1
2025 self.outputcache.prompt_count -= 1
2008 return self.handle_normal(line,continue_prompt)
2026 return self.handle_normal(line,continue_prompt)
2009 #return self.handle_normal('',continue_prompt)
2027 #return self.handle_normal('',continue_prompt)
2010
2028
2011 # print '***cont',continue_prompt # dbg
2029 # print '***cont',continue_prompt # dbg
2012 # special handlers are only allowed for single line statements
2030 # special handlers are only allowed for single line statements
2013 if continue_prompt and not self.rc.multi_line_specials:
2031 if continue_prompt and not self.rc.multi_line_specials:
2014 return self.handle_normal(line,continue_prompt)
2032 return self.handle_normal(line,continue_prompt)
2015
2033
2016
2034
2017 # For the rest, we need the structure of the input
2035 # For the rest, we need the structure of the input
2018 pre,iFun,theRest = self.split_user_input(line)
2036 pre,iFun,theRest = self.split_user_input(line)
2019
2037
2020 # See whether any pre-existing handler can take care of it
2038 # See whether any pre-existing handler can take care of it
2021
2039
2022 rewritten = self.hooks.input_prefilter(stripped)
2040 rewritten = self.hooks.input_prefilter(stripped)
2023 if rewritten != stripped: # ok, some prefilter did something
2041 if rewritten != stripped: # ok, some prefilter did something
2024 rewritten = pre + rewritten # add indentation
2042 rewritten = pre + rewritten # add indentation
2025 return self.handle_normal(rewritten)
2043 return self.handle_normal(rewritten)
2026
2044
2027 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2045 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2028
2046
2029 # First check for explicit escapes in the last/first character
2047 # First check for explicit escapes in the last/first character
2030 handler = None
2048 handler = None
2031 if line[-1] == self.ESC_HELP:
2049 if line[-1] == self.ESC_HELP:
2032 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2050 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2033 if handler is None:
2051 if handler is None:
2034 # look at the first character of iFun, NOT of line, so we skip
2052 # look at the first character of iFun, NOT of line, so we skip
2035 # leading whitespace in multiline input
2053 # leading whitespace in multiline input
2036 handler = self.esc_handlers.get(iFun[0:1])
2054 handler = self.esc_handlers.get(iFun[0:1])
2037 if handler is not None:
2055 if handler is not None:
2038 return handler(line,continue_prompt,pre,iFun,theRest)
2056 return handler(line,continue_prompt,pre,iFun,theRest)
2039 # Emacs ipython-mode tags certain input lines
2057 # Emacs ipython-mode tags certain input lines
2040 if line.endswith('# PYTHON-MODE'):
2058 if line.endswith('# PYTHON-MODE'):
2041 return self.handle_emacs(line,continue_prompt)
2059 return self.handle_emacs(line,continue_prompt)
2042
2060
2043 # Next, check if we can automatically execute this thing
2061 # Next, check if we can automatically execute this thing
2044
2062
2045 # Allow ! in multi-line statements if multi_line_specials is on:
2063 # Allow ! in multi-line statements if multi_line_specials is on:
2046 if continue_prompt and self.rc.multi_line_specials and \
2064 if continue_prompt and self.rc.multi_line_specials and \
2047 iFun.startswith(self.ESC_SHELL):
2065 iFun.startswith(self.ESC_SHELL):
2048 return self.handle_shell_escape(line,continue_prompt,
2066 return self.handle_shell_escape(line,continue_prompt,
2049 pre=pre,iFun=iFun,
2067 pre=pre,iFun=iFun,
2050 theRest=theRest)
2068 theRest=theRest)
2051
2069
2052 # Let's try to find if the input line is a magic fn
2070 # Let's try to find if the input line is a magic fn
2053 oinfo = None
2071 oinfo = None
2054 if hasattr(self,'magic_'+iFun):
2072 if hasattr(self,'magic_'+iFun):
2055 # WARNING: _ofind uses getattr(), so it can consume generators and
2073 # WARNING: _ofind uses getattr(), so it can consume generators and
2056 # cause other side effects.
2074 # cause other side effects.
2057 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2075 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2058 if oinfo['ismagic']:
2076 if oinfo['ismagic']:
2059 # Be careful not to call magics when a variable assignment is
2077 # Be careful not to call magics when a variable assignment is
2060 # being made (ls='hi', for example)
2078 # being made (ls='hi', for example)
2061 if self.rc.automagic and \
2079 if self.rc.automagic and \
2062 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2080 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2063 (self.rc.multi_line_specials or not continue_prompt):
2081 (self.rc.multi_line_specials or not continue_prompt):
2064 return self.handle_magic(line,continue_prompt,
2082 return self.handle_magic(line,continue_prompt,
2065 pre,iFun,theRest)
2083 pre,iFun,theRest)
2066 else:
2084 else:
2067 return self.handle_normal(line,continue_prompt)
2085 return self.handle_normal(line,continue_prompt)
2068
2086
2069 # If the rest of the line begins with an (in)equality, assginment or
2087 # If the rest of the line begins with an (in)equality, assginment or
2070 # function call, we should not call _ofind but simply execute it.
2088 # function call, we should not call _ofind but simply execute it.
2071 # This avoids spurious geattr() accesses on objects upon assignment.
2089 # This avoids spurious geattr() accesses on objects upon assignment.
2072 #
2090 #
2073 # It also allows users to assign to either alias or magic names true
2091 # It also allows users to assign to either alias or magic names true
2074 # python variables (the magic/alias systems always take second seat to
2092 # python variables (the magic/alias systems always take second seat to
2075 # true python code).
2093 # true python code).
2076 if theRest and theRest[0] in '!=()':
2094 if theRest and theRest[0] in '!=()':
2077 return self.handle_normal(line,continue_prompt)
2095 return self.handle_normal(line,continue_prompt)
2078
2096
2079 if oinfo is None:
2097 if oinfo is None:
2080 # let's try to ensure that _oinfo is ONLY called when autocall is
2098 # let's try to ensure that _oinfo is ONLY called when autocall is
2081 # on. Since it has inevitable potential side effects, at least
2099 # on. Since it has inevitable potential side effects, at least
2082 # having autocall off should be a guarantee to the user that no
2100 # having autocall off should be a guarantee to the user that no
2083 # weird things will happen.
2101 # weird things will happen.
2084
2102
2085 if self.rc.autocall:
2103 if self.rc.autocall:
2086 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2104 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2087 else:
2105 else:
2088 # in this case, all that's left is either an alias or
2106 # in this case, all that's left is either an alias or
2089 # processing the line normally.
2107 # processing the line normally.
2090 if iFun in self.alias_table:
2108 if iFun in self.alias_table:
2091 # if autocall is off, by not running _ofind we won't know
2109 # if autocall is off, by not running _ofind we won't know
2092 # whether the given name may also exist in one of the
2110 # whether the given name may also exist in one of the
2093 # user's namespace. At this point, it's best to do a
2111 # user's namespace. At this point, it's best to do a
2094 # quick check just to be sure that we don't let aliases
2112 # quick check just to be sure that we don't let aliases
2095 # shadow variables.
2113 # shadow variables.
2096 head = iFun.split('.',1)[0]
2114 head = iFun.split('.',1)[0]
2097 if head in self.user_ns or head in self.internal_ns \
2115 if head in self.user_ns or head in self.internal_ns \
2098 or head in __builtin__.__dict__:
2116 or head in __builtin__.__dict__:
2099 return self.handle_normal(line,continue_prompt)
2117 return self.handle_normal(line,continue_prompt)
2100 else:
2118 else:
2101 return self.handle_alias(line,continue_prompt,
2119 return self.handle_alias(line,continue_prompt,
2102 pre,iFun,theRest)
2120 pre,iFun,theRest)
2103
2121
2104 else:
2122 else:
2105 return self.handle_normal(line,continue_prompt)
2123 return self.handle_normal(line,continue_prompt)
2106
2124
2107 if not oinfo['found']:
2125 if not oinfo['found']:
2108 return self.handle_normal(line,continue_prompt)
2126 return self.handle_normal(line,continue_prompt)
2109 else:
2127 else:
2110 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2128 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2111 if oinfo['isalias']:
2129 if oinfo['isalias']:
2112 return self.handle_alias(line,continue_prompt,
2130 return self.handle_alias(line,continue_prompt,
2113 pre,iFun,theRest)
2131 pre,iFun,theRest)
2114
2132
2115 if (self.rc.autocall
2133 if (self.rc.autocall
2116 and
2134 and
2117 (
2135 (
2118 #only consider exclusion re if not "," or ";" autoquoting
2136 #only consider exclusion re if not "," or ";" autoquoting
2119 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2137 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2120 or pre == self.ESC_PAREN) or
2138 or pre == self.ESC_PAREN) or
2121 (not self.re_exclude_auto.match(theRest)))
2139 (not self.re_exclude_auto.match(theRest)))
2122 and
2140 and
2123 self.re_fun_name.match(iFun) and
2141 self.re_fun_name.match(iFun) and
2124 callable(oinfo['obj'])) :
2142 callable(oinfo['obj'])) :
2125 #print 'going auto' # dbg
2143 #print 'going auto' # dbg
2126 return self.handle_auto(line,continue_prompt,
2144 return self.handle_auto(line,continue_prompt,
2127 pre,iFun,theRest,oinfo['obj'])
2145 pre,iFun,theRest,oinfo['obj'])
2128 else:
2146 else:
2129 #print 'was callable?', callable(oinfo['obj']) # dbg
2147 #print 'was callable?', callable(oinfo['obj']) # dbg
2130 return self.handle_normal(line,continue_prompt)
2148 return self.handle_normal(line,continue_prompt)
2131
2149
2132 # If we get here, we have a normal Python line. Log and return.
2150 # If we get here, we have a normal Python line. Log and return.
2133 return self.handle_normal(line,continue_prompt)
2151 return self.handle_normal(line,continue_prompt)
2134
2152
2135 def _prefilter_dumb(self, line, continue_prompt):
2153 def _prefilter_dumb(self, line, continue_prompt):
2136 """simple prefilter function, for debugging"""
2154 """simple prefilter function, for debugging"""
2137 return self.handle_normal(line,continue_prompt)
2155 return self.handle_normal(line,continue_prompt)
2138
2156
2139
2157
2140 def multiline_prefilter(self, line, continue_prompt):
2158 def multiline_prefilter(self, line, continue_prompt):
2141 """ Run _prefilter for each line of input
2159 """ Run _prefilter for each line of input
2142
2160
2143 Covers cases where there are multiple lines in the user entry,
2161 Covers cases where there are multiple lines in the user entry,
2144 which is the case when the user goes back to a multiline history
2162 which is the case when the user goes back to a multiline history
2145 entry and presses enter.
2163 entry and presses enter.
2146
2164
2147 """
2165 """
2148 out = []
2166 out = []
2149 for l in line.rstrip('\n').split('\n'):
2167 for l in line.rstrip('\n').split('\n'):
2150 out.append(self._prefilter(l, continue_prompt))
2168 out.append(self._prefilter(l, continue_prompt))
2151 return '\n'.join(out)
2169 return '\n'.join(out)
2152
2170
2153 # Set the default prefilter() function (this can be user-overridden)
2171 # Set the default prefilter() function (this can be user-overridden)
2154 prefilter = multiline_prefilter
2172 prefilter = multiline_prefilter
2155
2173
2156 def handle_normal(self,line,continue_prompt=None,
2174 def handle_normal(self,line,continue_prompt=None,
2157 pre=None,iFun=None,theRest=None):
2175 pre=None,iFun=None,theRest=None):
2158 """Handle normal input lines. Use as a template for handlers."""
2176 """Handle normal input lines. Use as a template for handlers."""
2159
2177
2160 # With autoindent on, we need some way to exit the input loop, and I
2178 # With autoindent on, we need some way to exit the input loop, and I
2161 # don't want to force the user to have to backspace all the way to
2179 # don't want to force the user to have to backspace all the way to
2162 # clear the line. The rule will be in this case, that either two
2180 # clear the line. The rule will be in this case, that either two
2163 # lines of pure whitespace in a row, or a line of pure whitespace but
2181 # lines of pure whitespace in a row, or a line of pure whitespace but
2164 # of a size different to the indent level, will exit the input loop.
2182 # of a size different to the indent level, will exit the input loop.
2165
2183
2166 if (continue_prompt and self.autoindent and line.isspace() and
2184 if (continue_prompt and self.autoindent and line.isspace() and
2167 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2185 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2168 (self.buffer[-1]).isspace() )):
2186 (self.buffer[-1]).isspace() )):
2169 line = ''
2187 line = ''
2170
2188
2171 self.log(line,line,continue_prompt)
2189 self.log(line,line,continue_prompt)
2172 return line
2190 return line
2173
2191
2174 def handle_alias(self,line,continue_prompt=None,
2192 def handle_alias(self,line,continue_prompt=None,
2175 pre=None,iFun=None,theRest=None):
2193 pre=None,iFun=None,theRest=None):
2176 """Handle alias input lines. """
2194 """Handle alias input lines. """
2177
2195
2178 # pre is needed, because it carries the leading whitespace. Otherwise
2196 # pre is needed, because it carries the leading whitespace. Otherwise
2179 # aliases won't work in indented sections.
2197 # aliases won't work in indented sections.
2180 transformed = self.expand_aliases(iFun, theRest)
2198 transformed = self.expand_aliases(iFun, theRest)
2181 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2199 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2182 self.log(line,line_out,continue_prompt)
2200 self.log(line,line_out,continue_prompt)
2183 #print 'line out:',line_out # dbg
2201 #print 'line out:',line_out # dbg
2184 return line_out
2202 return line_out
2185
2203
2186 def handle_shell_escape(self, line, continue_prompt=None,
2204 def handle_shell_escape(self, line, continue_prompt=None,
2187 pre=None,iFun=None,theRest=None):
2205 pre=None,iFun=None,theRest=None):
2188 """Execute the line in a shell, empty return value"""
2206 """Execute the line in a shell, empty return value"""
2189
2207
2190 #print 'line in :', `line` # dbg
2208 #print 'line in :', `line` # dbg
2191 # Example of a special handler. Others follow a similar pattern.
2209 # Example of a special handler. Others follow a similar pattern.
2192 if line.lstrip().startswith('!!'):
2210 if line.lstrip().startswith('!!'):
2193 # rewrite iFun/theRest to properly hold the call to %sx and
2211 # rewrite iFun/theRest to properly hold the call to %sx and
2194 # the actual command to be executed, so handle_magic can work
2212 # the actual command to be executed, so handle_magic can work
2195 # correctly
2213 # correctly
2196 theRest = '%s %s' % (iFun[2:],theRest)
2214 theRest = '%s %s' % (iFun[2:],theRest)
2197 iFun = 'sx'
2215 iFun = 'sx'
2198 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2216 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2199 line.lstrip()[2:]),
2217 line.lstrip()[2:]),
2200 continue_prompt,pre,iFun,theRest)
2218 continue_prompt,pre,iFun,theRest)
2201 else:
2219 else:
2202 cmd=line.lstrip().lstrip('!')
2220 cmd=line.lstrip().lstrip('!')
2203 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2221 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2204 # update cache/log and return
2222 # update cache/log and return
2205 self.log(line,line_out,continue_prompt)
2223 self.log(line,line_out,continue_prompt)
2206 return line_out
2224 return line_out
2207
2225
2208 def handle_magic(self, line, continue_prompt=None,
2226 def handle_magic(self, line, continue_prompt=None,
2209 pre=None,iFun=None,theRest=None):
2227 pre=None,iFun=None,theRest=None):
2210 """Execute magic functions."""
2228 """Execute magic functions."""
2211
2229
2212
2230
2213 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2231 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2214 self.log(line,cmd,continue_prompt)
2232 self.log(line,cmd,continue_prompt)
2215 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2233 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2216 return cmd
2234 return cmd
2217
2235
2218 def handle_auto(self, line, continue_prompt=None,
2236 def handle_auto(self, line, continue_prompt=None,
2219 pre=None,iFun=None,theRest=None,obj=None):
2237 pre=None,iFun=None,theRest=None,obj=None):
2220 """Hande lines which can be auto-executed, quoting if requested."""
2238 """Hande lines which can be auto-executed, quoting if requested."""
2221
2239
2222 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2240 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2223
2241
2224 # This should only be active for single-line input!
2242 # This should only be active for single-line input!
2225 if continue_prompt:
2243 if continue_prompt:
2226 self.log(line,line,continue_prompt)
2244 self.log(line,line,continue_prompt)
2227 return line
2245 return line
2228
2246
2229 auto_rewrite = True
2247 auto_rewrite = True
2230
2248
2231 if pre == self.ESC_QUOTE:
2249 if pre == self.ESC_QUOTE:
2232 # Auto-quote splitting on whitespace
2250 # Auto-quote splitting on whitespace
2233 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2251 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2234 elif pre == self.ESC_QUOTE2:
2252 elif pre == self.ESC_QUOTE2:
2235 # Auto-quote whole string
2253 # Auto-quote whole string
2236 newcmd = '%s("%s")' % (iFun,theRest)
2254 newcmd = '%s("%s")' % (iFun,theRest)
2237 elif pre == self.ESC_PAREN:
2255 elif pre == self.ESC_PAREN:
2238 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2256 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2239 else:
2257 else:
2240 # Auto-paren.
2258 # Auto-paren.
2241 # We only apply it to argument-less calls if the autocall
2259 # We only apply it to argument-less calls if the autocall
2242 # parameter is set to 2. We only need to check that autocall is <
2260 # parameter is set to 2. We only need to check that autocall is <
2243 # 2, since this function isn't called unless it's at least 1.
2261 # 2, since this function isn't called unless it's at least 1.
2244 if not theRest and (self.rc.autocall < 2):
2262 if not theRest and (self.rc.autocall < 2):
2245 newcmd = '%s %s' % (iFun,theRest)
2263 newcmd = '%s %s' % (iFun,theRest)
2246 auto_rewrite = False
2264 auto_rewrite = False
2247 else:
2265 else:
2248 if theRest.startswith('['):
2266 if theRest.startswith('['):
2249 if hasattr(obj,'__getitem__'):
2267 if hasattr(obj,'__getitem__'):
2250 # Don't autocall in this case: item access for an object
2268 # Don't autocall in this case: item access for an object
2251 # which is BOTH callable and implements __getitem__.
2269 # which is BOTH callable and implements __getitem__.
2252 newcmd = '%s %s' % (iFun,theRest)
2270 newcmd = '%s %s' % (iFun,theRest)
2253 auto_rewrite = False
2271 auto_rewrite = False
2254 else:
2272 else:
2255 # if the object doesn't support [] access, go ahead and
2273 # if the object doesn't support [] access, go ahead and
2256 # autocall
2274 # autocall
2257 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2275 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2258 elif theRest.endswith(';'):
2276 elif theRest.endswith(';'):
2259 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2277 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2260 else:
2278 else:
2261 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2279 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2262
2280
2263 if auto_rewrite:
2281 if auto_rewrite:
2264 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2282 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2265 # log what is now valid Python, not the actual user input (without the
2283 # log what is now valid Python, not the actual user input (without the
2266 # final newline)
2284 # final newline)
2267 self.log(line,newcmd,continue_prompt)
2285 self.log(line,newcmd,continue_prompt)
2268 return newcmd
2286 return newcmd
2269
2287
2270 def handle_help(self, line, continue_prompt=None,
2288 def handle_help(self, line, continue_prompt=None,
2271 pre=None,iFun=None,theRest=None):
2289 pre=None,iFun=None,theRest=None):
2272 """Try to get some help for the object.
2290 """Try to get some help for the object.
2273
2291
2274 obj? or ?obj -> basic information.
2292 obj? or ?obj -> basic information.
2275 obj?? or ??obj -> more details.
2293 obj?? or ??obj -> more details.
2276 """
2294 """
2277
2295
2278 # We need to make sure that we don't process lines which would be
2296 # We need to make sure that we don't process lines which would be
2279 # otherwise valid python, such as "x=1 # what?"
2297 # otherwise valid python, such as "x=1 # what?"
2280 try:
2298 try:
2281 codeop.compile_command(line)
2299 codeop.compile_command(line)
2282 except SyntaxError:
2300 except SyntaxError:
2283 # We should only handle as help stuff which is NOT valid syntax
2301 # We should only handle as help stuff which is NOT valid syntax
2284 if line[0]==self.ESC_HELP:
2302 if line[0]==self.ESC_HELP:
2285 line = line[1:]
2303 line = line[1:]
2286 elif line[-1]==self.ESC_HELP:
2304 elif line[-1]==self.ESC_HELP:
2287 line = line[:-1]
2305 line = line[:-1]
2288 self.log(line,'#?'+line,continue_prompt)
2306 self.log(line,'#?'+line,continue_prompt)
2289 if line:
2307 if line:
2290 self.magic_pinfo(line)
2308 self.magic_pinfo(line)
2291 else:
2309 else:
2292 page(self.usage,screen_lines=self.rc.screen_length)
2310 page(self.usage,screen_lines=self.rc.screen_length)
2293 return '' # Empty string is needed here!
2311 return '' # Empty string is needed here!
2294 except:
2312 except:
2295 # Pass any other exceptions through to the normal handler
2313 # Pass any other exceptions through to the normal handler
2296 return self.handle_normal(line,continue_prompt)
2314 return self.handle_normal(line,continue_prompt)
2297 else:
2315 else:
2298 # If the code compiles ok, we should handle it normally
2316 # If the code compiles ok, we should handle it normally
2299 return self.handle_normal(line,continue_prompt)
2317 return self.handle_normal(line,continue_prompt)
2300
2318
2301 def getapi(self):
2319 def getapi(self):
2302 """ Get an IPApi object for this shell instance
2320 """ Get an IPApi object for this shell instance
2303
2321
2304 Getting an IPApi object is always preferable to accessing the shell
2322 Getting an IPApi object is always preferable to accessing the shell
2305 directly, but this holds true especially for extensions.
2323 directly, but this holds true especially for extensions.
2306
2324
2307 It should always be possible to implement an extension with IPApi
2325 It should always be possible to implement an extension with IPApi
2308 alone. If not, contact maintainer to request an addition.
2326 alone. If not, contact maintainer to request an addition.
2309
2327
2310 """
2328 """
2311 return self.api
2329 return self.api
2312
2330
2313 def handle_emacs(self,line,continue_prompt=None,
2331 def handle_emacs(self,line,continue_prompt=None,
2314 pre=None,iFun=None,theRest=None):
2332 pre=None,iFun=None,theRest=None):
2315 """Handle input lines marked by python-mode."""
2333 """Handle input lines marked by python-mode."""
2316
2334
2317 # Currently, nothing is done. Later more functionality can be added
2335 # Currently, nothing is done. Later more functionality can be added
2318 # here if needed.
2336 # here if needed.
2319
2337
2320 # The input cache shouldn't be updated
2338 # The input cache shouldn't be updated
2321
2339
2322 return line
2340 return line
2323
2341
2324 def mktempfile(self,data=None):
2342 def mktempfile(self,data=None):
2325 """Make a new tempfile and return its filename.
2343 """Make a new tempfile and return its filename.
2326
2344
2327 This makes a call to tempfile.mktemp, but it registers the created
2345 This makes a call to tempfile.mktemp, but it registers the created
2328 filename internally so ipython cleans it up at exit time.
2346 filename internally so ipython cleans it up at exit time.
2329
2347
2330 Optional inputs:
2348 Optional inputs:
2331
2349
2332 - data(None): if data is given, it gets written out to the temp file
2350 - data(None): if data is given, it gets written out to the temp file
2333 immediately, and the file is closed again."""
2351 immediately, and the file is closed again."""
2334
2352
2335 filename = tempfile.mktemp('.py','ipython_edit_')
2353 filename = tempfile.mktemp('.py','ipython_edit_')
2336 self.tempfiles.append(filename)
2354 self.tempfiles.append(filename)
2337
2355
2338 if data:
2356 if data:
2339 tmp_file = open(filename,'w')
2357 tmp_file = open(filename,'w')
2340 tmp_file.write(data)
2358 tmp_file.write(data)
2341 tmp_file.close()
2359 tmp_file.close()
2342 return filename
2360 return filename
2343
2361
2344 def write(self,data):
2362 def write(self,data):
2345 """Write a string to the default output"""
2363 """Write a string to the default output"""
2346 Term.cout.write(data)
2364 Term.cout.write(data)
2347
2365
2348 def write_err(self,data):
2366 def write_err(self,data):
2349 """Write a string to the default error output"""
2367 """Write a string to the default error output"""
2350 Term.cerr.write(data)
2368 Term.cerr.write(data)
2351
2369
2352 def exit(self):
2370 def exit(self):
2353 """Handle interactive exit.
2371 """Handle interactive exit.
2354
2372
2355 This method sets the exit_now attribute."""
2373 This method sets the exit_now attribute."""
2356
2374
2357 if self.rc.confirm_exit:
2375 if self.rc.confirm_exit:
2358 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2376 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2359 self.exit_now = True
2377 self.exit_now = True
2360 else:
2378 else:
2361 self.exit_now = True
2379 self.exit_now = True
2362
2380
2363 def safe_execfile(self,fname,*where,**kw):
2381 def safe_execfile(self,fname,*where,**kw):
2364 fname = os.path.expanduser(fname)
2382 fname = os.path.expanduser(fname)
2365
2383
2366 # find things also in current directory
2384 # find things also in current directory
2367 dname = os.path.dirname(fname)
2385 dname = os.path.dirname(fname)
2368 if not sys.path.count(dname):
2386 if not sys.path.count(dname):
2369 sys.path.append(dname)
2387 sys.path.append(dname)
2370
2388
2371 try:
2389 try:
2372 xfile = open(fname)
2390 xfile = open(fname)
2373 except:
2391 except:
2374 print >> Term.cerr, \
2392 print >> Term.cerr, \
2375 'Could not open file <%s> for safe execution.' % fname
2393 'Could not open file <%s> for safe execution.' % fname
2376 return None
2394 return None
2377
2395
2378 kw.setdefault('islog',0)
2396 kw.setdefault('islog',0)
2379 kw.setdefault('quiet',1)
2397 kw.setdefault('quiet',1)
2380 kw.setdefault('exit_ignore',0)
2398 kw.setdefault('exit_ignore',0)
2381 first = xfile.readline()
2399 first = xfile.readline()
2382 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2400 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2383 xfile.close()
2401 xfile.close()
2384 # line by line execution
2402 # line by line execution
2385 if first.startswith(loghead) or kw['islog']:
2403 if first.startswith(loghead) or kw['islog']:
2386 print 'Loading log file <%s> one line at a time...' % fname
2404 print 'Loading log file <%s> one line at a time...' % fname
2387 if kw['quiet']:
2405 if kw['quiet']:
2388 stdout_save = sys.stdout
2406 stdout_save = sys.stdout
2389 sys.stdout = StringIO.StringIO()
2407 sys.stdout = StringIO.StringIO()
2390 try:
2408 try:
2391 globs,locs = where[0:2]
2409 globs,locs = where[0:2]
2392 except:
2410 except:
2393 try:
2411 try:
2394 globs = locs = where[0]
2412 globs = locs = where[0]
2395 except:
2413 except:
2396 globs = locs = globals()
2414 globs = locs = globals()
2397 badblocks = []
2415 badblocks = []
2398
2416
2399 # we also need to identify indented blocks of code when replaying
2417 # we also need to identify indented blocks of code when replaying
2400 # logs and put them together before passing them to an exec
2418 # logs and put them together before passing them to an exec
2401 # statement. This takes a bit of regexp and look-ahead work in the
2419 # statement. This takes a bit of regexp and look-ahead work in the
2402 # file. It's easiest if we swallow the whole thing in memory
2420 # file. It's easiest if we swallow the whole thing in memory
2403 # first, and manually walk through the lines list moving the
2421 # first, and manually walk through the lines list moving the
2404 # counter ourselves.
2422 # counter ourselves.
2405 indent_re = re.compile('\s+\S')
2423 indent_re = re.compile('\s+\S')
2406 xfile = open(fname)
2424 xfile = open(fname)
2407 filelines = xfile.readlines()
2425 filelines = xfile.readlines()
2408 xfile.close()
2426 xfile.close()
2409 nlines = len(filelines)
2427 nlines = len(filelines)
2410 lnum = 0
2428 lnum = 0
2411 while lnum < nlines:
2429 while lnum < nlines:
2412 line = filelines[lnum]
2430 line = filelines[lnum]
2413 lnum += 1
2431 lnum += 1
2414 # don't re-insert logger status info into cache
2432 # don't re-insert logger status info into cache
2415 if line.startswith('#log#'):
2433 if line.startswith('#log#'):
2416 continue
2434 continue
2417 else:
2435 else:
2418 # build a block of code (maybe a single line) for execution
2436 # build a block of code (maybe a single line) for execution
2419 block = line
2437 block = line
2420 try:
2438 try:
2421 next = filelines[lnum] # lnum has already incremented
2439 next = filelines[lnum] # lnum has already incremented
2422 except:
2440 except:
2423 next = None
2441 next = None
2424 while next and indent_re.match(next):
2442 while next and indent_re.match(next):
2425 block += next
2443 block += next
2426 lnum += 1
2444 lnum += 1
2427 try:
2445 try:
2428 next = filelines[lnum]
2446 next = filelines[lnum]
2429 except:
2447 except:
2430 next = None
2448 next = None
2431 # now execute the block of one or more lines
2449 # now execute the block of one or more lines
2432 try:
2450 try:
2433 exec block in globs,locs
2451 exec block in globs,locs
2434 except SystemExit:
2452 except SystemExit:
2435 pass
2453 pass
2436 except:
2454 except:
2437 badblocks.append(block.rstrip())
2455 badblocks.append(block.rstrip())
2438 if kw['quiet']: # restore stdout
2456 if kw['quiet']: # restore stdout
2439 sys.stdout.close()
2457 sys.stdout.close()
2440 sys.stdout = stdout_save
2458 sys.stdout = stdout_save
2441 print 'Finished replaying log file <%s>' % fname
2459 print 'Finished replaying log file <%s>' % fname
2442 if badblocks:
2460 if badblocks:
2443 print >> sys.stderr, ('\nThe following lines/blocks in file '
2461 print >> sys.stderr, ('\nThe following lines/blocks in file '
2444 '<%s> reported errors:' % fname)
2462 '<%s> reported errors:' % fname)
2445
2463
2446 for badline in badblocks:
2464 for badline in badblocks:
2447 print >> sys.stderr, badline
2465 print >> sys.stderr, badline
2448 else: # regular file execution
2466 else: # regular file execution
2449 try:
2467 try:
2450 execfile(fname,*where)
2468 execfile(fname,*where)
2451 except SyntaxError:
2469 except SyntaxError:
2452 self.showsyntaxerror()
2470 self.showsyntaxerror()
2453 warn('Failure executing file: <%s>' % fname)
2471 warn('Failure executing file: <%s>' % fname)
2454 except SystemExit,status:
2472 except SystemExit,status:
2455 if not kw['exit_ignore']:
2473 if not kw['exit_ignore']:
2456 self.showtraceback()
2474 self.showtraceback()
2457 warn('Failure executing file: <%s>' % fname)
2475 warn('Failure executing file: <%s>' % fname)
2458 except:
2476 except:
2459 self.showtraceback()
2477 self.showtraceback()
2460 warn('Failure executing file: <%s>' % fname)
2478 warn('Failure executing file: <%s>' % fname)
2461
2479
2462 #************************* end of file <iplib.py> *****************************
2480 #************************* end of file <iplib.py> *****************************
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now