##// END OF EJS Templates
Prevent a nasty traceback if %debug is called before any exception has occurred.
fperez -
Show More
@@ -1,2534 +1,2538 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 1961 2006-12-05 21:02:40Z vivainio $
9 $Id: iplib.py 1977 2006-12-11 16:52:12Z fperez $
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 # The first is similar to os.system, but it doesn't return a value,
463 # The first is similar to os.system, but it doesn't return a value,
464 # and it allows interpolation of variables in the user's namespace.
464 # and it allows interpolation of variables in the user's namespace.
465 self.system = lambda cmd: \
465 self.system = lambda cmd: \
466 shell(self.var_expand(cmd,depth=2),
466 shell(self.var_expand(cmd,depth=2),
467 header=self.rc.system_header,
467 header=self.rc.system_header,
468 verbose=self.rc.system_verbose)
468 verbose=self.rc.system_verbose)
469
469
470 # These are for getoutput and getoutputerror:
470 # These are for getoutput and getoutputerror:
471 self.getoutput = lambda cmd: \
471 self.getoutput = lambda cmd: \
472 getoutput(self.var_expand(cmd,depth=2),
472 getoutput(self.var_expand(cmd,depth=2),
473 header=self.rc.system_header,
473 header=self.rc.system_header,
474 verbose=self.rc.system_verbose)
474 verbose=self.rc.system_verbose)
475
475
476 self.getoutputerror = lambda cmd: \
476 self.getoutputerror = lambda cmd: \
477 getoutputerror(self.var_expand(cmd,depth=2),
477 getoutputerror(self.var_expand(cmd,depth=2),
478 header=self.rc.system_header,
478 header=self.rc.system_header,
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 var_expand(self,cmd,depth=0):
619 def var_expand(self,cmd,depth=0):
620 """Expand python variables in a string.
620 """Expand python variables in a string.
621
621
622 The depth argument indicates how many frames above the caller should
622 The depth argument indicates how many frames above the caller should
623 be walked to look for the local namespace where to expand variables.
623 be walked to look for the local namespace where to expand variables.
624
624
625 The global namespace for expansion is always the user's interactive
625 The global namespace for expansion is always the user's interactive
626 namespace.
626 namespace.
627 """
627 """
628
628
629 return str(ItplNS(cmd.replace('#','\#'),
629 return str(ItplNS(cmd.replace('#','\#'),
630 self.user_ns, # globals
630 self.user_ns, # globals
631 # Skip our own frame in searching for locals:
631 # Skip our own frame in searching for locals:
632 sys._getframe(depth+1).f_locals # locals
632 sys._getframe(depth+1).f_locals # locals
633 ))
633 ))
634
634
635 def pre_config_initialization(self):
635 def pre_config_initialization(self):
636 """Pre-configuration init method
636 """Pre-configuration init method
637
637
638 This is called before the configuration files are processed to
638 This is called before the configuration files are processed to
639 prepare the services the config files might need.
639 prepare the services the config files might need.
640
640
641 self.rc already has reasonable default values at this point.
641 self.rc already has reasonable default values at this point.
642 """
642 """
643 rc = self.rc
643 rc = self.rc
644
644
645 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
645 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
646
646
647 def post_config_initialization(self):
647 def post_config_initialization(self):
648 """Post configuration init method
648 """Post configuration init method
649
649
650 This is called after the configuration files have been processed to
650 This is called after the configuration files have been processed to
651 'finalize' the initialization."""
651 'finalize' the initialization."""
652
652
653 rc = self.rc
653 rc = self.rc
654
654
655 # Object inspector
655 # Object inspector
656 self.inspector = OInspect.Inspector(OInspect.InspectColors,
656 self.inspector = OInspect.Inspector(OInspect.InspectColors,
657 PyColorize.ANSICodeColors,
657 PyColorize.ANSICodeColors,
658 'NoColor',
658 'NoColor',
659 rc.object_info_string_level)
659 rc.object_info_string_level)
660
660
661 # Load readline proper
661 # Load readline proper
662 if rc.readline:
662 if rc.readline:
663 self.init_readline()
663 self.init_readline()
664
664
665 # local shortcut, this is used a LOT
665 # local shortcut, this is used a LOT
666 self.log = self.logger.log
666 self.log = self.logger.log
667
667
668 # Initialize cache, set in/out prompts and printing system
668 # Initialize cache, set in/out prompts and printing system
669 self.outputcache = CachedOutput(self,
669 self.outputcache = CachedOutput(self,
670 rc.cache_size,
670 rc.cache_size,
671 rc.pprint,
671 rc.pprint,
672 input_sep = rc.separate_in,
672 input_sep = rc.separate_in,
673 output_sep = rc.separate_out,
673 output_sep = rc.separate_out,
674 output_sep2 = rc.separate_out2,
674 output_sep2 = rc.separate_out2,
675 ps1 = rc.prompt_in1,
675 ps1 = rc.prompt_in1,
676 ps2 = rc.prompt_in2,
676 ps2 = rc.prompt_in2,
677 ps_out = rc.prompt_out,
677 ps_out = rc.prompt_out,
678 pad_left = rc.prompts_pad_left)
678 pad_left = rc.prompts_pad_left)
679
679
680 # user may have over-ridden the default print hook:
680 # user may have over-ridden the default print hook:
681 try:
681 try:
682 self.outputcache.__class__.display = self.hooks.display
682 self.outputcache.__class__.display = self.hooks.display
683 except AttributeError:
683 except AttributeError:
684 pass
684 pass
685
685
686 # I don't like assigning globally to sys, because it means when
686 # I don't like assigning globally to sys, because it means when
687 # embedding instances, each embedded instance overrides the previous
687 # embedding instances, each embedded instance overrides the previous
688 # choice. But sys.displayhook seems to be called internally by exec,
688 # choice. But sys.displayhook seems to be called internally by exec,
689 # so I don't see a way around it. We first save the original and then
689 # so I don't see a way around it. We first save the original and then
690 # overwrite it.
690 # overwrite it.
691 self.sys_displayhook = sys.displayhook
691 self.sys_displayhook = sys.displayhook
692 sys.displayhook = self.outputcache
692 sys.displayhook = self.outputcache
693
693
694 # Set user colors (don't do it in the constructor above so that it
694 # Set user colors (don't do it in the constructor above so that it
695 # doesn't crash if colors option is invalid)
695 # doesn't crash if colors option is invalid)
696 self.magic_colors(rc.colors)
696 self.magic_colors(rc.colors)
697
697
698 # Set calling of pdb on exceptions
698 # Set calling of pdb on exceptions
699 self.call_pdb = rc.pdb
699 self.call_pdb = rc.pdb
700
700
701 # Load user aliases
701 # Load user aliases
702 for alias in rc.alias:
702 for alias in rc.alias:
703 self.magic_alias(alias)
703 self.magic_alias(alias)
704 self.hooks.late_startup_hook()
704 self.hooks.late_startup_hook()
705
705
706 batchrun = False
706 batchrun = False
707 for batchfile in [path(arg) for arg in self.rc.args
707 for batchfile in [path(arg) for arg in self.rc.args
708 if arg.lower().endswith('.ipy')]:
708 if arg.lower().endswith('.ipy')]:
709 if not batchfile.isfile():
709 if not batchfile.isfile():
710 print "No such batch file:", batchfile
710 print "No such batch file:", batchfile
711 continue
711 continue
712 self.api.runlines(batchfile.text())
712 self.api.runlines(batchfile.text())
713 batchrun = True
713 batchrun = True
714 if batchrun:
714 if batchrun:
715 self.exit_now = True
715 self.exit_now = True
716
716
717 def add_builtins(self):
717 def add_builtins(self):
718 """Store ipython references into the builtin namespace.
718 """Store ipython references into the builtin namespace.
719
719
720 Some parts of ipython operate via builtins injected here, which hold a
720 Some parts of ipython operate via builtins injected here, which hold a
721 reference to IPython itself."""
721 reference to IPython itself."""
722
722
723 # TODO: deprecate all except _ip; 'jobs' should be installed
723 # TODO: deprecate all except _ip; 'jobs' should be installed
724 # by an extension and the rest are under _ip, ipalias is redundant
724 # by an extension and the rest are under _ip, ipalias is redundant
725 builtins_new = dict(__IPYTHON__ = self,
725 builtins_new = dict(__IPYTHON__ = self,
726 ip_set_hook = self.set_hook,
726 ip_set_hook = self.set_hook,
727 jobs = self.jobs,
727 jobs = self.jobs,
728 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
728 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
729 ipalias = wrap_deprecated(self.ipalias),
729 ipalias = wrap_deprecated(self.ipalias),
730 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
730 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
731 _ip = self.api
731 _ip = self.api
732 )
732 )
733 for biname,bival in builtins_new.items():
733 for biname,bival in builtins_new.items():
734 try:
734 try:
735 # store the orignal value so we can restore it
735 # store the orignal value so we can restore it
736 self.builtins_added[biname] = __builtin__.__dict__[biname]
736 self.builtins_added[biname] = __builtin__.__dict__[biname]
737 except KeyError:
737 except KeyError:
738 # or mark that it wasn't defined, and we'll just delete it at
738 # or mark that it wasn't defined, and we'll just delete it at
739 # cleanup
739 # cleanup
740 self.builtins_added[biname] = Undefined
740 self.builtins_added[biname] = Undefined
741 __builtin__.__dict__[biname] = bival
741 __builtin__.__dict__[biname] = bival
742
742
743 # Keep in the builtins a flag for when IPython is active. We set it
743 # Keep in the builtins a flag for when IPython is active. We set it
744 # with setdefault so that multiple nested IPythons don't clobber one
744 # with setdefault so that multiple nested IPythons don't clobber one
745 # another. Each will increase its value by one upon being activated,
745 # another. Each will increase its value by one upon being activated,
746 # which also gives us a way to determine the nesting level.
746 # which also gives us a way to determine the nesting level.
747 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
747 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
748
748
749 def clean_builtins(self):
749 def clean_builtins(self):
750 """Remove any builtins which might have been added by add_builtins, or
750 """Remove any builtins which might have been added by add_builtins, or
751 restore overwritten ones to their previous values."""
751 restore overwritten ones to their previous values."""
752 for biname,bival in self.builtins_added.items():
752 for biname,bival in self.builtins_added.items():
753 if bival is Undefined:
753 if bival is Undefined:
754 del __builtin__.__dict__[biname]
754 del __builtin__.__dict__[biname]
755 else:
755 else:
756 __builtin__.__dict__[biname] = bival
756 __builtin__.__dict__[biname] = bival
757 self.builtins_added.clear()
757 self.builtins_added.clear()
758
758
759 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
759 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
760 """set_hook(name,hook) -> sets an internal IPython hook.
760 """set_hook(name,hook) -> sets an internal IPython hook.
761
761
762 IPython exposes some of its internal API as user-modifiable hooks. By
762 IPython exposes some of its internal API as user-modifiable hooks. By
763 adding your function to one of these hooks, you can modify IPython's
763 adding your function to one of these hooks, you can modify IPython's
764 behavior to call at runtime your own routines."""
764 behavior to call at runtime your own routines."""
765
765
766 # At some point in the future, this should validate the hook before it
766 # At some point in the future, this should validate the hook before it
767 # accepts it. Probably at least check that the hook takes the number
767 # accepts it. Probably at least check that the hook takes the number
768 # of args it's supposed to.
768 # of args it's supposed to.
769
769
770 f = new.instancemethod(hook,self,self.__class__)
770 f = new.instancemethod(hook,self,self.__class__)
771
771
772 # check if the hook is for strdispatcher first
772 # check if the hook is for strdispatcher first
773 if str_key is not None:
773 if str_key is not None:
774 sdp = self.strdispatchers.get(name, StrDispatch())
774 sdp = self.strdispatchers.get(name, StrDispatch())
775 sdp.add_s(str_key, f, priority )
775 sdp.add_s(str_key, f, priority )
776 self.strdispatchers[name] = sdp
776 self.strdispatchers[name] = sdp
777 return
777 return
778 if re_key is not None:
778 if re_key is not None:
779 sdp = self.strdispatchers.get(name, StrDispatch())
779 sdp = self.strdispatchers.get(name, StrDispatch())
780 sdp.add_re(re.compile(re_key), f, priority )
780 sdp.add_re(re.compile(re_key), f, priority )
781 self.strdispatchers[name] = sdp
781 self.strdispatchers[name] = sdp
782 return
782 return
783
783
784 dp = getattr(self.hooks, name, None)
784 dp = getattr(self.hooks, name, None)
785 if name not in IPython.hooks.__all__:
785 if name not in IPython.hooks.__all__:
786 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
786 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
787 if not dp:
787 if not dp:
788 dp = IPython.hooks.CommandChainDispatcher()
788 dp = IPython.hooks.CommandChainDispatcher()
789
789
790 try:
790 try:
791 dp.add(f,priority)
791 dp.add(f,priority)
792 except AttributeError:
792 except AttributeError:
793 # it was not commandchain, plain old func - replace
793 # it was not commandchain, plain old func - replace
794 dp = f
794 dp = f
795
795
796 setattr(self.hooks,name, dp)
796 setattr(self.hooks,name, dp)
797
797
798
798
799 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
799 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
800
800
801 def set_crash_handler(self,crashHandler):
801 def set_crash_handler(self,crashHandler):
802 """Set the IPython crash handler.
802 """Set the IPython crash handler.
803
803
804 This must be a callable with a signature suitable for use as
804 This must be a callable with a signature suitable for use as
805 sys.excepthook."""
805 sys.excepthook."""
806
806
807 # Install the given crash handler as the Python exception hook
807 # Install the given crash handler as the Python exception hook
808 sys.excepthook = crashHandler
808 sys.excepthook = crashHandler
809
809
810 # The instance will store a pointer to this, so that runtime code
810 # The instance will store a pointer to this, so that runtime code
811 # (such as magics) can access it. This is because during the
811 # (such as magics) can access it. This is because during the
812 # read-eval loop, it gets temporarily overwritten (to deal with GUI
812 # read-eval loop, it gets temporarily overwritten (to deal with GUI
813 # frameworks).
813 # frameworks).
814 self.sys_excepthook = sys.excepthook
814 self.sys_excepthook = sys.excepthook
815
815
816
816
817 def set_custom_exc(self,exc_tuple,handler):
817 def set_custom_exc(self,exc_tuple,handler):
818 """set_custom_exc(exc_tuple,handler)
818 """set_custom_exc(exc_tuple,handler)
819
819
820 Set a custom exception handler, which will be called if any of the
820 Set a custom exception handler, which will be called if any of the
821 exceptions in exc_tuple occur in the mainloop (specifically, in the
821 exceptions in exc_tuple occur in the mainloop (specifically, in the
822 runcode() method.
822 runcode() method.
823
823
824 Inputs:
824 Inputs:
825
825
826 - exc_tuple: a *tuple* of valid exceptions to call the defined
826 - exc_tuple: a *tuple* of valid exceptions to call the defined
827 handler for. It is very important that you use a tuple, and NOT A
827 handler for. It is very important that you use a tuple, and NOT A
828 LIST here, because of the way Python's except statement works. If
828 LIST here, because of the way Python's except statement works. If
829 you only want to trap a single exception, use a singleton tuple:
829 you only want to trap a single exception, use a singleton tuple:
830
830
831 exc_tuple == (MyCustomException,)
831 exc_tuple == (MyCustomException,)
832
832
833 - handler: this must be defined as a function with the following
833 - handler: this must be defined as a function with the following
834 basic interface: def my_handler(self,etype,value,tb).
834 basic interface: def my_handler(self,etype,value,tb).
835
835
836 This will be made into an instance method (via new.instancemethod)
836 This will be made into an instance method (via new.instancemethod)
837 of IPython itself, and it will be called if any of the exceptions
837 of IPython itself, and it will be called if any of the exceptions
838 listed in the exc_tuple are caught. If the handler is None, an
838 listed in the exc_tuple are caught. If the handler is None, an
839 internal basic one is used, which just prints basic info.
839 internal basic one is used, which just prints basic info.
840
840
841 WARNING: by putting in your own exception handler into IPython's main
841 WARNING: by putting in your own exception handler into IPython's main
842 execution loop, you run a very good chance of nasty crashes. This
842 execution loop, you run a very good chance of nasty crashes. This
843 facility should only be used if you really know what you are doing."""
843 facility should only be used if you really know what you are doing."""
844
844
845 assert type(exc_tuple)==type(()) , \
845 assert type(exc_tuple)==type(()) , \
846 "The custom exceptions must be given AS A TUPLE."
846 "The custom exceptions must be given AS A TUPLE."
847
847
848 def dummy_handler(self,etype,value,tb):
848 def dummy_handler(self,etype,value,tb):
849 print '*** Simple custom exception handler ***'
849 print '*** Simple custom exception handler ***'
850 print 'Exception type :',etype
850 print 'Exception type :',etype
851 print 'Exception value:',value
851 print 'Exception value:',value
852 print 'Traceback :',tb
852 print 'Traceback :',tb
853 print 'Source code :','\n'.join(self.buffer)
853 print 'Source code :','\n'.join(self.buffer)
854
854
855 if handler is None: handler = dummy_handler
855 if handler is None: handler = dummy_handler
856
856
857 self.CustomTB = new.instancemethod(handler,self,self.__class__)
857 self.CustomTB = new.instancemethod(handler,self,self.__class__)
858 self.custom_exceptions = exc_tuple
858 self.custom_exceptions = exc_tuple
859
859
860 def set_custom_completer(self,completer,pos=0):
860 def set_custom_completer(self,completer,pos=0):
861 """set_custom_completer(completer,pos=0)
861 """set_custom_completer(completer,pos=0)
862
862
863 Adds a new custom completer function.
863 Adds a new custom completer function.
864
864
865 The position argument (defaults to 0) is the index in the completers
865 The position argument (defaults to 0) is the index in the completers
866 list where you want the completer to be inserted."""
866 list where you want the completer to be inserted."""
867
867
868 newcomp = new.instancemethod(completer,self.Completer,
868 newcomp = new.instancemethod(completer,self.Completer,
869 self.Completer.__class__)
869 self.Completer.__class__)
870 self.Completer.matchers.insert(pos,newcomp)
870 self.Completer.matchers.insert(pos,newcomp)
871
871
872 def _get_call_pdb(self):
872 def _get_call_pdb(self):
873 return self._call_pdb
873 return self._call_pdb
874
874
875 def _set_call_pdb(self,val):
875 def _set_call_pdb(self,val):
876
876
877 if val not in (0,1,False,True):
877 if val not in (0,1,False,True):
878 raise ValueError,'new call_pdb value must be boolean'
878 raise ValueError,'new call_pdb value must be boolean'
879
879
880 # store value in instance
880 # store value in instance
881 self._call_pdb = val
881 self._call_pdb = val
882
882
883 # notify the actual exception handlers
883 # notify the actual exception handlers
884 self.InteractiveTB.call_pdb = val
884 self.InteractiveTB.call_pdb = val
885 if self.isthreaded:
885 if self.isthreaded:
886 try:
886 try:
887 self.sys_excepthook.call_pdb = val
887 self.sys_excepthook.call_pdb = val
888 except:
888 except:
889 warn('Failed to activate pdb for threaded exception handler')
889 warn('Failed to activate pdb for threaded exception handler')
890
890
891 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
891 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
892 'Control auto-activation of pdb at exceptions')
892 'Control auto-activation of pdb at exceptions')
893
893
894
894
895 # These special functions get installed in the builtin namespace, to
895 # These special functions get installed in the builtin namespace, to
896 # provide programmatic (pure python) access to magics, aliases and system
896 # provide programmatic (pure python) access to magics, aliases and system
897 # calls. This is important for logging, user scripting, and more.
897 # calls. This is important for logging, user scripting, and more.
898
898
899 # We are basically exposing, via normal python functions, the three
899 # We are basically exposing, via normal python functions, the three
900 # mechanisms in which ipython offers special call modes (magics for
900 # mechanisms in which ipython offers special call modes (magics for
901 # internal control, aliases for direct system access via pre-selected
901 # internal control, aliases for direct system access via pre-selected
902 # names, and !cmd for calling arbitrary system commands).
902 # names, and !cmd for calling arbitrary system commands).
903
903
904 def ipmagic(self,arg_s):
904 def ipmagic(self,arg_s):
905 """Call a magic function by name.
905 """Call a magic function by name.
906
906
907 Input: a string containing the name of the magic function to call and any
907 Input: a string containing the name of the magic function to call and any
908 additional arguments to be passed to the magic.
908 additional arguments to be passed to the magic.
909
909
910 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
910 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
911 prompt:
911 prompt:
912
912
913 In[1]: %name -opt foo bar
913 In[1]: %name -opt foo bar
914
914
915 To call a magic without arguments, simply use ipmagic('name').
915 To call a magic without arguments, simply use ipmagic('name').
916
916
917 This provides a proper Python function to call IPython's magics in any
917 This provides a proper Python function to call IPython's magics in any
918 valid Python code you can type at the interpreter, including loops and
918 valid Python code you can type at the interpreter, including loops and
919 compound statements. It is added by IPython to the Python builtin
919 compound statements. It is added by IPython to the Python builtin
920 namespace upon initialization."""
920 namespace upon initialization."""
921
921
922 args = arg_s.split(' ',1)
922 args = arg_s.split(' ',1)
923 magic_name = args[0]
923 magic_name = args[0]
924 magic_name = magic_name.lstrip(self.ESC_MAGIC)
924 magic_name = magic_name.lstrip(self.ESC_MAGIC)
925
925
926 try:
926 try:
927 magic_args = args[1]
927 magic_args = args[1]
928 except IndexError:
928 except IndexError:
929 magic_args = ''
929 magic_args = ''
930 fn = getattr(self,'magic_'+magic_name,None)
930 fn = getattr(self,'magic_'+magic_name,None)
931 if fn is None:
931 if fn is None:
932 error("Magic function `%s` not found." % magic_name)
932 error("Magic function `%s` not found." % magic_name)
933 else:
933 else:
934 magic_args = self.var_expand(magic_args,1)
934 magic_args = self.var_expand(magic_args,1)
935 return fn(magic_args)
935 return fn(magic_args)
936
936
937 def ipalias(self,arg_s):
937 def ipalias(self,arg_s):
938 """Call an alias by name.
938 """Call an alias by name.
939
939
940 Input: a string containing the name of the alias to call and any
940 Input: a string containing the name of the alias to call and any
941 additional arguments to be passed to the magic.
941 additional arguments to be passed to the magic.
942
942
943 ipalias('name -opt foo bar') is equivalent to typing at the ipython
943 ipalias('name -opt foo bar') is equivalent to typing at the ipython
944 prompt:
944 prompt:
945
945
946 In[1]: name -opt foo bar
946 In[1]: name -opt foo bar
947
947
948 To call an alias without arguments, simply use ipalias('name').
948 To call an alias without arguments, simply use ipalias('name').
949
949
950 This provides a proper Python function to call IPython's aliases in any
950 This provides a proper Python function to call IPython's aliases in any
951 valid Python code you can type at the interpreter, including loops and
951 valid Python code you can type at the interpreter, including loops and
952 compound statements. It is added by IPython to the Python builtin
952 compound statements. It is added by IPython to the Python builtin
953 namespace upon initialization."""
953 namespace upon initialization."""
954
954
955 args = arg_s.split(' ',1)
955 args = arg_s.split(' ',1)
956 alias_name = args[0]
956 alias_name = args[0]
957 try:
957 try:
958 alias_args = args[1]
958 alias_args = args[1]
959 except IndexError:
959 except IndexError:
960 alias_args = ''
960 alias_args = ''
961 if alias_name in self.alias_table:
961 if alias_name in self.alias_table:
962 self.call_alias(alias_name,alias_args)
962 self.call_alias(alias_name,alias_args)
963 else:
963 else:
964 error("Alias `%s` not found." % alias_name)
964 error("Alias `%s` not found." % alias_name)
965
965
966 def ipsystem(self,arg_s):
966 def ipsystem(self,arg_s):
967 """Make a system call, using IPython."""
967 """Make a system call, using IPython."""
968
968
969 self.system(arg_s)
969 self.system(arg_s)
970
970
971 def complete(self,text):
971 def complete(self,text):
972 """Return a sorted list of all possible completions on text.
972 """Return a sorted list of all possible completions on text.
973
973
974 Inputs:
974 Inputs:
975
975
976 - text: a string of text to be completed on.
976 - text: a string of text to be completed on.
977
977
978 This is a wrapper around the completion mechanism, similar to what
978 This is a wrapper around the completion mechanism, similar to what
979 readline does at the command line when the TAB key is hit. By
979 readline does at the command line when the TAB key is hit. By
980 exposing it as a method, it can be used by other non-readline
980 exposing it as a method, it can be used by other non-readline
981 environments (such as GUIs) for text completion.
981 environments (such as GUIs) for text completion.
982
982
983 Simple usage example:
983 Simple usage example:
984
984
985 In [1]: x = 'hello'
985 In [1]: x = 'hello'
986
986
987 In [2]: __IP.complete('x.l')
987 In [2]: __IP.complete('x.l')
988 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
988 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
989
989
990 complete = self.Completer.complete
990 complete = self.Completer.complete
991 state = 0
991 state = 0
992 # use a dict so we get unique keys, since ipyhton's multiple
992 # use a dict so we get unique keys, since ipyhton's multiple
993 # completers can return duplicates.
993 # completers can return duplicates.
994 comps = {}
994 comps = {}
995 while True:
995 while True:
996 newcomp = complete(text,state)
996 newcomp = complete(text,state)
997 if newcomp is None:
997 if newcomp is None:
998 break
998 break
999 comps[newcomp] = 1
999 comps[newcomp] = 1
1000 state += 1
1000 state += 1
1001 outcomps = comps.keys()
1001 outcomps = comps.keys()
1002 outcomps.sort()
1002 outcomps.sort()
1003 return outcomps
1003 return outcomps
1004
1004
1005 def set_completer_frame(self, frame=None):
1005 def set_completer_frame(self, frame=None):
1006 if frame:
1006 if frame:
1007 self.Completer.namespace = frame.f_locals
1007 self.Completer.namespace = frame.f_locals
1008 self.Completer.global_namespace = frame.f_globals
1008 self.Completer.global_namespace = frame.f_globals
1009 else:
1009 else:
1010 self.Completer.namespace = self.user_ns
1010 self.Completer.namespace = self.user_ns
1011 self.Completer.global_namespace = self.user_global_ns
1011 self.Completer.global_namespace = self.user_global_ns
1012
1012
1013 def init_auto_alias(self):
1013 def init_auto_alias(self):
1014 """Define some aliases automatically.
1014 """Define some aliases automatically.
1015
1015
1016 These are ALL parameter-less aliases"""
1016 These are ALL parameter-less aliases"""
1017
1017
1018 for alias,cmd in self.auto_alias:
1018 for alias,cmd in self.auto_alias:
1019 self.alias_table[alias] = (0,cmd)
1019 self.alias_table[alias] = (0,cmd)
1020
1020
1021 def alias_table_validate(self,verbose=0):
1021 def alias_table_validate(self,verbose=0):
1022 """Update information about the alias table.
1022 """Update information about the alias table.
1023
1023
1024 In particular, make sure no Python keywords/builtins are in it."""
1024 In particular, make sure no Python keywords/builtins are in it."""
1025
1025
1026 no_alias = self.no_alias
1026 no_alias = self.no_alias
1027 for k in self.alias_table.keys():
1027 for k in self.alias_table.keys():
1028 if k in no_alias:
1028 if k in no_alias:
1029 del self.alias_table[k]
1029 del self.alias_table[k]
1030 if verbose:
1030 if verbose:
1031 print ("Deleting alias <%s>, it's a Python "
1031 print ("Deleting alias <%s>, it's a Python "
1032 "keyword or builtin." % k)
1032 "keyword or builtin." % k)
1033
1033
1034 def set_autoindent(self,value=None):
1034 def set_autoindent(self,value=None):
1035 """Set the autoindent flag, checking for readline support.
1035 """Set the autoindent flag, checking for readline support.
1036
1036
1037 If called with no arguments, it acts as a toggle."""
1037 If called with no arguments, it acts as a toggle."""
1038
1038
1039 if not self.has_readline:
1039 if not self.has_readline:
1040 if os.name == 'posix':
1040 if os.name == 'posix':
1041 warn("The auto-indent feature requires the readline library")
1041 warn("The auto-indent feature requires the readline library")
1042 self.autoindent = 0
1042 self.autoindent = 0
1043 return
1043 return
1044 if value is None:
1044 if value is None:
1045 self.autoindent = not self.autoindent
1045 self.autoindent = not self.autoindent
1046 else:
1046 else:
1047 self.autoindent = value
1047 self.autoindent = value
1048
1048
1049 def rc_set_toggle(self,rc_field,value=None):
1049 def rc_set_toggle(self,rc_field,value=None):
1050 """Set or toggle a field in IPython's rc config. structure.
1050 """Set or toggle a field in IPython's rc config. structure.
1051
1051
1052 If called with no arguments, it acts as a toggle.
1052 If called with no arguments, it acts as a toggle.
1053
1053
1054 If called with a non-existent field, the resulting AttributeError
1054 If called with a non-existent field, the resulting AttributeError
1055 exception will propagate out."""
1055 exception will propagate out."""
1056
1056
1057 rc_val = getattr(self.rc,rc_field)
1057 rc_val = getattr(self.rc,rc_field)
1058 if value is None:
1058 if value is None:
1059 value = not rc_val
1059 value = not rc_val
1060 setattr(self.rc,rc_field,value)
1060 setattr(self.rc,rc_field,value)
1061
1061
1062 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1062 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1063 """Install the user configuration directory.
1063 """Install the user configuration directory.
1064
1064
1065 Can be called when running for the first time or to upgrade the user's
1065 Can be called when running for the first time or to upgrade the user's
1066 .ipython/ directory with the mode parameter. Valid modes are 'install'
1066 .ipython/ directory with the mode parameter. Valid modes are 'install'
1067 and 'upgrade'."""
1067 and 'upgrade'."""
1068
1068
1069 def wait():
1069 def wait():
1070 try:
1070 try:
1071 raw_input("Please press <RETURN> to start IPython.")
1071 raw_input("Please press <RETURN> to start IPython.")
1072 except EOFError:
1072 except EOFError:
1073 print >> Term.cout
1073 print >> Term.cout
1074 print '*'*70
1074 print '*'*70
1075
1075
1076 cwd = os.getcwd() # remember where we started
1076 cwd = os.getcwd() # remember where we started
1077 glb = glob.glob
1077 glb = glob.glob
1078 print '*'*70
1078 print '*'*70
1079 if mode == 'install':
1079 if mode == 'install':
1080 print \
1080 print \
1081 """Welcome to IPython. I will try to create a personal configuration directory
1081 """Welcome to IPython. I will try to create a personal configuration directory
1082 where you can customize many aspects of IPython's functionality in:\n"""
1082 where you can customize many aspects of IPython's functionality in:\n"""
1083 else:
1083 else:
1084 print 'I am going to upgrade your configuration in:'
1084 print 'I am going to upgrade your configuration in:'
1085
1085
1086 print ipythondir
1086 print ipythondir
1087
1087
1088 rcdirend = os.path.join('IPython','UserConfig')
1088 rcdirend = os.path.join('IPython','UserConfig')
1089 cfg = lambda d: os.path.join(d,rcdirend)
1089 cfg = lambda d: os.path.join(d,rcdirend)
1090 try:
1090 try:
1091 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1091 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1092 except IOError:
1092 except IOError:
1093 warning = """
1093 warning = """
1094 Installation error. IPython's directory was not found.
1094 Installation error. IPython's directory was not found.
1095
1095
1096 Check the following:
1096 Check the following:
1097
1097
1098 The ipython/IPython directory should be in a directory belonging to your
1098 The ipython/IPython directory should be in a directory belonging to your
1099 PYTHONPATH environment variable (that is, it should be in a directory
1099 PYTHONPATH environment variable (that is, it should be in a directory
1100 belonging to sys.path). You can copy it explicitly there or just link to it.
1100 belonging to sys.path). You can copy it explicitly there or just link to it.
1101
1101
1102 IPython will proceed with builtin defaults.
1102 IPython will proceed with builtin defaults.
1103 """
1103 """
1104 warn(warning)
1104 warn(warning)
1105 wait()
1105 wait()
1106 return
1106 return
1107
1107
1108 if mode == 'install':
1108 if mode == 'install':
1109 try:
1109 try:
1110 shutil.copytree(rcdir,ipythondir)
1110 shutil.copytree(rcdir,ipythondir)
1111 os.chdir(ipythondir)
1111 os.chdir(ipythondir)
1112 rc_files = glb("ipythonrc*")
1112 rc_files = glb("ipythonrc*")
1113 for rc_file in rc_files:
1113 for rc_file in rc_files:
1114 os.rename(rc_file,rc_file+rc_suffix)
1114 os.rename(rc_file,rc_file+rc_suffix)
1115 except:
1115 except:
1116 warning = """
1116 warning = """
1117
1117
1118 There was a problem with the installation:
1118 There was a problem with the installation:
1119 %s
1119 %s
1120 Try to correct it or contact the developers if you think it's a bug.
1120 Try to correct it or contact the developers if you think it's a bug.
1121 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1121 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1122 warn(warning)
1122 warn(warning)
1123 wait()
1123 wait()
1124 return
1124 return
1125
1125
1126 elif mode == 'upgrade':
1126 elif mode == 'upgrade':
1127 try:
1127 try:
1128 os.chdir(ipythondir)
1128 os.chdir(ipythondir)
1129 except:
1129 except:
1130 print """
1130 print """
1131 Can not upgrade: changing to directory %s failed. Details:
1131 Can not upgrade: changing to directory %s failed. Details:
1132 %s
1132 %s
1133 """ % (ipythondir,sys.exc_info()[1])
1133 """ % (ipythondir,sys.exc_info()[1])
1134 wait()
1134 wait()
1135 return
1135 return
1136 else:
1136 else:
1137 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1137 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1138 for new_full_path in sources:
1138 for new_full_path in sources:
1139 new_filename = os.path.basename(new_full_path)
1139 new_filename = os.path.basename(new_full_path)
1140 if new_filename.startswith('ipythonrc'):
1140 if new_filename.startswith('ipythonrc'):
1141 new_filename = new_filename + rc_suffix
1141 new_filename = new_filename + rc_suffix
1142 # The config directory should only contain files, skip any
1142 # The config directory should only contain files, skip any
1143 # directories which may be there (like CVS)
1143 # directories which may be there (like CVS)
1144 if os.path.isdir(new_full_path):
1144 if os.path.isdir(new_full_path):
1145 continue
1145 continue
1146 if os.path.exists(new_filename):
1146 if os.path.exists(new_filename):
1147 old_file = new_filename+'.old'
1147 old_file = new_filename+'.old'
1148 if os.path.exists(old_file):
1148 if os.path.exists(old_file):
1149 os.remove(old_file)
1149 os.remove(old_file)
1150 os.rename(new_filename,old_file)
1150 os.rename(new_filename,old_file)
1151 shutil.copy(new_full_path,new_filename)
1151 shutil.copy(new_full_path,new_filename)
1152 else:
1152 else:
1153 raise ValueError,'unrecognized mode for install:',`mode`
1153 raise ValueError,'unrecognized mode for install:',`mode`
1154
1154
1155 # Fix line-endings to those native to each platform in the config
1155 # Fix line-endings to those native to each platform in the config
1156 # directory.
1156 # directory.
1157 try:
1157 try:
1158 os.chdir(ipythondir)
1158 os.chdir(ipythondir)
1159 except:
1159 except:
1160 print """
1160 print """
1161 Problem: changing to directory %s failed.
1161 Problem: changing to directory %s failed.
1162 Details:
1162 Details:
1163 %s
1163 %s
1164
1164
1165 Some configuration files may have incorrect line endings. This should not
1165 Some configuration files may have incorrect line endings. This should not
1166 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1166 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1167 wait()
1167 wait()
1168 else:
1168 else:
1169 for fname in glb('ipythonrc*'):
1169 for fname in glb('ipythonrc*'):
1170 try:
1170 try:
1171 native_line_ends(fname,backup=0)
1171 native_line_ends(fname,backup=0)
1172 except IOError:
1172 except IOError:
1173 pass
1173 pass
1174
1174
1175 if mode == 'install':
1175 if mode == 'install':
1176 print """
1176 print """
1177 Successful installation!
1177 Successful installation!
1178
1178
1179 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1179 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1180 IPython manual (there are both HTML and PDF versions supplied with the
1180 IPython manual (there are both HTML and PDF versions supplied with the
1181 distribution) to make sure that your system environment is properly configured
1181 distribution) to make sure that your system environment is properly configured
1182 to take advantage of IPython's features.
1182 to take advantage of IPython's features.
1183
1183
1184 Important note: the configuration system has changed! The old system is
1184 Important note: the configuration system has changed! The old system is
1185 still in place, but its setting may be partly overridden by the settings in
1185 still in place, but its setting may be partly overridden by the settings in
1186 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1186 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1187 if some of the new settings bother you.
1187 if some of the new settings bother you.
1188
1188
1189 """
1189 """
1190 else:
1190 else:
1191 print """
1191 print """
1192 Successful upgrade!
1192 Successful upgrade!
1193
1193
1194 All files in your directory:
1194 All files in your directory:
1195 %(ipythondir)s
1195 %(ipythondir)s
1196 which would have been overwritten by the upgrade were backed up with a .old
1196 which would have been overwritten by the upgrade were backed up with a .old
1197 extension. If you had made particular customizations in those files you may
1197 extension. If you had made particular customizations in those files you may
1198 want to merge them back into the new files.""" % locals()
1198 want to merge them back into the new files.""" % locals()
1199 wait()
1199 wait()
1200 os.chdir(cwd)
1200 os.chdir(cwd)
1201 # end user_setup()
1201 # end user_setup()
1202
1202
1203 def atexit_operations(self):
1203 def atexit_operations(self):
1204 """This will be executed at the time of exit.
1204 """This will be executed at the time of exit.
1205
1205
1206 Saving of persistent data should be performed here. """
1206 Saving of persistent data should be performed here. """
1207
1207
1208 #print '*** IPython exit cleanup ***' # dbg
1208 #print '*** IPython exit cleanup ***' # dbg
1209 # input history
1209 # input history
1210 self.savehist()
1210 self.savehist()
1211
1211
1212 # Cleanup all tempfiles left around
1212 # Cleanup all tempfiles left around
1213 for tfile in self.tempfiles:
1213 for tfile in self.tempfiles:
1214 try:
1214 try:
1215 os.unlink(tfile)
1215 os.unlink(tfile)
1216 except OSError:
1216 except OSError:
1217 pass
1217 pass
1218
1218
1219 # save the "persistent data" catch-all dictionary
1219 # save the "persistent data" catch-all dictionary
1220 self.hooks.shutdown_hook()
1220 self.hooks.shutdown_hook()
1221
1221
1222 def savehist(self):
1222 def savehist(self):
1223 """Save input history to a file (via readline library)."""
1223 """Save input history to a file (via readline library)."""
1224 try:
1224 try:
1225 self.readline.write_history_file(self.histfile)
1225 self.readline.write_history_file(self.histfile)
1226 except:
1226 except:
1227 print 'Unable to save IPython command history to file: ' + \
1227 print 'Unable to save IPython command history to file: ' + \
1228 `self.histfile`
1228 `self.histfile`
1229
1229
1230 def history_saving_wrapper(self, func):
1230 def history_saving_wrapper(self, func):
1231 """ Wrap func for readline history saving
1231 """ Wrap func for readline history saving
1232
1232
1233 Convert func into callable that saves & restores
1233 Convert func into callable that saves & restores
1234 history around the call """
1234 history around the call """
1235
1235
1236 if not self.has_readline:
1236 if not self.has_readline:
1237 return func
1237 return func
1238
1238
1239 def wrapper():
1239 def wrapper():
1240 self.savehist()
1240 self.savehist()
1241 try:
1241 try:
1242 func()
1242 func()
1243 finally:
1243 finally:
1244 readline.read_history_file(self.histfile)
1244 readline.read_history_file(self.histfile)
1245 return wrapper
1245 return wrapper
1246
1246
1247
1247
1248 def pre_readline(self):
1248 def pre_readline(self):
1249 """readline hook to be used at the start of each line.
1249 """readline hook to be used at the start of each line.
1250
1250
1251 Currently it handles auto-indent only."""
1251 Currently it handles auto-indent only."""
1252
1252
1253 #debugx('self.indent_current_nsp','pre_readline:')
1253 #debugx('self.indent_current_nsp','pre_readline:')
1254 self.readline.insert_text(self.indent_current_str())
1254 self.readline.insert_text(self.indent_current_str())
1255
1255
1256 def init_readline(self):
1256 def init_readline(self):
1257 """Command history completion/saving/reloading."""
1257 """Command history completion/saving/reloading."""
1258
1258
1259 import IPython.rlineimpl as readline
1259 import IPython.rlineimpl as readline
1260 if not readline.have_readline:
1260 if not readline.have_readline:
1261 self.has_readline = 0
1261 self.has_readline = 0
1262 self.readline = None
1262 self.readline = None
1263 # no point in bugging windows users with this every time:
1263 # no point in bugging windows users with this every time:
1264 warn('Readline services not available on this platform.')
1264 warn('Readline services not available on this platform.')
1265 else:
1265 else:
1266 sys.modules['readline'] = readline
1266 sys.modules['readline'] = readline
1267 import atexit
1267 import atexit
1268 from IPython.completer import IPCompleter
1268 from IPython.completer import IPCompleter
1269 self.Completer = IPCompleter(self,
1269 self.Completer = IPCompleter(self,
1270 self.user_ns,
1270 self.user_ns,
1271 self.user_global_ns,
1271 self.user_global_ns,
1272 self.rc.readline_omit__names,
1272 self.rc.readline_omit__names,
1273 self.alias_table)
1273 self.alias_table)
1274 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1274 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1275 self.strdispatchers['complete_command'] = sdisp
1275 self.strdispatchers['complete_command'] = sdisp
1276 self.Completer.custom_completers = sdisp
1276 self.Completer.custom_completers = sdisp
1277 # Platform-specific configuration
1277 # Platform-specific configuration
1278 if os.name == 'nt':
1278 if os.name == 'nt':
1279 self.readline_startup_hook = readline.set_pre_input_hook
1279 self.readline_startup_hook = readline.set_pre_input_hook
1280 else:
1280 else:
1281 self.readline_startup_hook = readline.set_startup_hook
1281 self.readline_startup_hook = readline.set_startup_hook
1282
1282
1283 # Load user's initrc file (readline config)
1283 # Load user's initrc file (readline config)
1284 inputrc_name = os.environ.get('INPUTRC')
1284 inputrc_name = os.environ.get('INPUTRC')
1285 if inputrc_name is None:
1285 if inputrc_name is None:
1286 home_dir = get_home_dir()
1286 home_dir = get_home_dir()
1287 if home_dir is not None:
1287 if home_dir is not None:
1288 inputrc_name = os.path.join(home_dir,'.inputrc')
1288 inputrc_name = os.path.join(home_dir,'.inputrc')
1289 if os.path.isfile(inputrc_name):
1289 if os.path.isfile(inputrc_name):
1290 try:
1290 try:
1291 readline.read_init_file(inputrc_name)
1291 readline.read_init_file(inputrc_name)
1292 except:
1292 except:
1293 warn('Problems reading readline initialization file <%s>'
1293 warn('Problems reading readline initialization file <%s>'
1294 % inputrc_name)
1294 % inputrc_name)
1295
1295
1296 self.has_readline = 1
1296 self.has_readline = 1
1297 self.readline = readline
1297 self.readline = readline
1298 # save this in sys so embedded copies can restore it properly
1298 # save this in sys so embedded copies can restore it properly
1299 sys.ipcompleter = self.Completer.complete
1299 sys.ipcompleter = self.Completer.complete
1300 readline.set_completer(self.Completer.complete)
1300 readline.set_completer(self.Completer.complete)
1301
1301
1302 # Configure readline according to user's prefs
1302 # Configure readline according to user's prefs
1303 for rlcommand in self.rc.readline_parse_and_bind:
1303 for rlcommand in self.rc.readline_parse_and_bind:
1304 readline.parse_and_bind(rlcommand)
1304 readline.parse_and_bind(rlcommand)
1305
1305
1306 # remove some chars from the delimiters list
1306 # remove some chars from the delimiters list
1307 delims = readline.get_completer_delims()
1307 delims = readline.get_completer_delims()
1308 delims = delims.translate(string._idmap,
1308 delims = delims.translate(string._idmap,
1309 self.rc.readline_remove_delims)
1309 self.rc.readline_remove_delims)
1310 readline.set_completer_delims(delims)
1310 readline.set_completer_delims(delims)
1311 # otherwise we end up with a monster history after a while:
1311 # otherwise we end up with a monster history after a while:
1312 readline.set_history_length(1000)
1312 readline.set_history_length(1000)
1313 try:
1313 try:
1314 #print '*** Reading readline history' # dbg
1314 #print '*** Reading readline history' # dbg
1315 readline.read_history_file(self.histfile)
1315 readline.read_history_file(self.histfile)
1316 except IOError:
1316 except IOError:
1317 pass # It doesn't exist yet.
1317 pass # It doesn't exist yet.
1318
1318
1319 atexit.register(self.atexit_operations)
1319 atexit.register(self.atexit_operations)
1320 del atexit
1320 del atexit
1321
1321
1322 # Configure auto-indent for all platforms
1322 # Configure auto-indent for all platforms
1323 self.set_autoindent(self.rc.autoindent)
1323 self.set_autoindent(self.rc.autoindent)
1324
1324
1325 def ask_yes_no(self,prompt,default=True):
1325 def ask_yes_no(self,prompt,default=True):
1326 if self.rc.quiet:
1326 if self.rc.quiet:
1327 return True
1327 return True
1328 return ask_yes_no(prompt,default)
1328 return ask_yes_no(prompt,default)
1329
1329
1330 def _should_recompile(self,e):
1330 def _should_recompile(self,e):
1331 """Utility routine for edit_syntax_error"""
1331 """Utility routine for edit_syntax_error"""
1332
1332
1333 if e.filename in ('<ipython console>','<input>','<string>',
1333 if e.filename in ('<ipython console>','<input>','<string>',
1334 '<console>','<BackgroundJob compilation>',
1334 '<console>','<BackgroundJob compilation>',
1335 None):
1335 None):
1336
1336
1337 return False
1337 return False
1338 try:
1338 try:
1339 if (self.rc.autoedit_syntax and
1339 if (self.rc.autoedit_syntax and
1340 not self.ask_yes_no('Return to editor to correct syntax error? '
1340 not self.ask_yes_no('Return to editor to correct syntax error? '
1341 '[Y/n] ','y')):
1341 '[Y/n] ','y')):
1342 return False
1342 return False
1343 except EOFError:
1343 except EOFError:
1344 return False
1344 return False
1345
1345
1346 def int0(x):
1346 def int0(x):
1347 try:
1347 try:
1348 return int(x)
1348 return int(x)
1349 except TypeError:
1349 except TypeError:
1350 return 0
1350 return 0
1351 # always pass integer line and offset values to editor hook
1351 # always pass integer line and offset values to editor hook
1352 self.hooks.fix_error_editor(e.filename,
1352 self.hooks.fix_error_editor(e.filename,
1353 int0(e.lineno),int0(e.offset),e.msg)
1353 int0(e.lineno),int0(e.offset),e.msg)
1354 return True
1354 return True
1355
1355
1356 def edit_syntax_error(self):
1356 def edit_syntax_error(self):
1357 """The bottom half of the syntax error handler called in the main loop.
1357 """The bottom half of the syntax error handler called in the main loop.
1358
1358
1359 Loop until syntax error is fixed or user cancels.
1359 Loop until syntax error is fixed or user cancels.
1360 """
1360 """
1361
1361
1362 while self.SyntaxTB.last_syntax_error:
1362 while self.SyntaxTB.last_syntax_error:
1363 # copy and clear last_syntax_error
1363 # copy and clear last_syntax_error
1364 err = self.SyntaxTB.clear_err_state()
1364 err = self.SyntaxTB.clear_err_state()
1365 if not self._should_recompile(err):
1365 if not self._should_recompile(err):
1366 return
1366 return
1367 try:
1367 try:
1368 # may set last_syntax_error again if a SyntaxError is raised
1368 # may set last_syntax_error again if a SyntaxError is raised
1369 self.safe_execfile(err.filename,self.user_ns)
1369 self.safe_execfile(err.filename,self.user_ns)
1370 except:
1370 except:
1371 self.showtraceback()
1371 self.showtraceback()
1372 else:
1372 else:
1373 try:
1373 try:
1374 f = file(err.filename)
1374 f = file(err.filename)
1375 try:
1375 try:
1376 sys.displayhook(f.read())
1376 sys.displayhook(f.read())
1377 finally:
1377 finally:
1378 f.close()
1378 f.close()
1379 except:
1379 except:
1380 self.showtraceback()
1380 self.showtraceback()
1381
1381
1382 def showsyntaxerror(self, filename=None):
1382 def showsyntaxerror(self, filename=None):
1383 """Display the syntax error that just occurred.
1383 """Display the syntax error that just occurred.
1384
1384
1385 This doesn't display a stack trace because there isn't one.
1385 This doesn't display a stack trace because there isn't one.
1386
1386
1387 If a filename is given, it is stuffed in the exception instead
1387 If a filename is given, it is stuffed in the exception instead
1388 of what was there before (because Python's parser always uses
1388 of what was there before (because Python's parser always uses
1389 "<string>" when reading from a string).
1389 "<string>" when reading from a string).
1390 """
1390 """
1391 etype, value, last_traceback = sys.exc_info()
1391 etype, value, last_traceback = sys.exc_info()
1392
1392
1393 # See note about these variables in showtraceback() below
1393 # See note about these variables in showtraceback() below
1394 sys.last_type = etype
1394 sys.last_type = etype
1395 sys.last_value = value
1395 sys.last_value = value
1396 sys.last_traceback = last_traceback
1396 sys.last_traceback = last_traceback
1397
1397
1398 if filename and etype is SyntaxError:
1398 if filename and etype is SyntaxError:
1399 # Work hard to stuff the correct filename in the exception
1399 # Work hard to stuff the correct filename in the exception
1400 try:
1400 try:
1401 msg, (dummy_filename, lineno, offset, line) = value
1401 msg, (dummy_filename, lineno, offset, line) = value
1402 except:
1402 except:
1403 # Not the format we expect; leave it alone
1403 # Not the format we expect; leave it alone
1404 pass
1404 pass
1405 else:
1405 else:
1406 # Stuff in the right filename
1406 # Stuff in the right filename
1407 try:
1407 try:
1408 # Assume SyntaxError is a class exception
1408 # Assume SyntaxError is a class exception
1409 value = SyntaxError(msg, (filename, lineno, offset, line))
1409 value = SyntaxError(msg, (filename, lineno, offset, line))
1410 except:
1410 except:
1411 # If that failed, assume SyntaxError is a string
1411 # If that failed, assume SyntaxError is a string
1412 value = msg, (filename, lineno, offset, line)
1412 value = msg, (filename, lineno, offset, line)
1413 self.SyntaxTB(etype,value,[])
1413 self.SyntaxTB(etype,value,[])
1414
1414
1415 def debugger(self,force=False):
1415 def debugger(self,force=False):
1416 """Call the pydb/pdb debugger.
1416 """Call the pydb/pdb debugger.
1417
1417
1418 Keywords:
1418 Keywords:
1419
1419
1420 - force(False): by default, this routine checks the instance call_pdb
1420 - force(False): by default, this routine checks the instance call_pdb
1421 flag and does not actually invoke the debugger if the flag is false.
1421 flag and does not actually invoke the debugger if the flag is false.
1422 The 'force' option forces the debugger to activate even if the flag
1422 The 'force' option forces the debugger to activate even if the flag
1423 is false.
1423 is false.
1424 """
1424 """
1425
1425
1426 if not (force or self.call_pdb):
1426 if not (force or self.call_pdb):
1427 return
1427 return
1428
1428
1429 if not hasattr(sys,'last_traceback'):
1430 error('No traceback has been produced, nothing to debug.')
1431 return
1432
1429 have_pydb = False
1433 have_pydb = False
1430 # use pydb if available
1434 # use pydb if available
1431 try:
1435 try:
1432 from pydb import pm
1436 from pydb import pm
1433 have_pydb = True
1437 have_pydb = True
1434 except ImportError:
1438 except ImportError:
1435 pass
1439 pass
1436 if not have_pydb:
1440 if not have_pydb:
1437 # fallback to our internal debugger
1441 # fallback to our internal debugger
1438 pm = lambda : self.InteractiveTB.debugger(force=True)
1442 pm = lambda : self.InteractiveTB.debugger(force=True)
1439 self.history_saving_wrapper(pm)()
1443 self.history_saving_wrapper(pm)()
1440
1444
1441 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1445 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1442 """Display the exception that just occurred.
1446 """Display the exception that just occurred.
1443
1447
1444 If nothing is known about the exception, this is the method which
1448 If nothing is known about the exception, this is the method which
1445 should be used throughout the code for presenting user tracebacks,
1449 should be used throughout the code for presenting user tracebacks,
1446 rather than directly invoking the InteractiveTB object.
1450 rather than directly invoking the InteractiveTB object.
1447
1451
1448 A specific showsyntaxerror() also exists, but this method can take
1452 A specific showsyntaxerror() also exists, but this method can take
1449 care of calling it if needed, so unless you are explicitly catching a
1453 care of calling it if needed, so unless you are explicitly catching a
1450 SyntaxError exception, don't try to analyze the stack manually and
1454 SyntaxError exception, don't try to analyze the stack manually and
1451 simply call this method."""
1455 simply call this method."""
1452
1456
1453 # Though this won't be called by syntax errors in the input line,
1457 # Though this won't be called by syntax errors in the input line,
1454 # there may be SyntaxError cases whith imported code.
1458 # there may be SyntaxError cases whith imported code.
1455 if exc_tuple is None:
1459 if exc_tuple is None:
1456 etype, value, tb = sys.exc_info()
1460 etype, value, tb = sys.exc_info()
1457 else:
1461 else:
1458 etype, value, tb = exc_tuple
1462 etype, value, tb = exc_tuple
1459 if etype is SyntaxError:
1463 if etype is SyntaxError:
1460 self.showsyntaxerror(filename)
1464 self.showsyntaxerror(filename)
1461 else:
1465 else:
1462 # WARNING: these variables are somewhat deprecated and not
1466 # WARNING: these variables are somewhat deprecated and not
1463 # necessarily safe to use in a threaded environment, but tools
1467 # necessarily safe to use in a threaded environment, but tools
1464 # like pdb depend on their existence, so let's set them. If we
1468 # like pdb depend on their existence, so let's set them. If we
1465 # find problems in the field, we'll need to revisit their use.
1469 # find problems in the field, we'll need to revisit their use.
1466 sys.last_type = etype
1470 sys.last_type = etype
1467 sys.last_value = value
1471 sys.last_value = value
1468 sys.last_traceback = tb
1472 sys.last_traceback = tb
1469
1473
1470 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1474 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1471 if self.InteractiveTB.call_pdb and self.has_readline:
1475 if self.InteractiveTB.call_pdb and self.has_readline:
1472 # pdb mucks up readline, fix it back
1476 # pdb mucks up readline, fix it back
1473 self.readline.set_completer(self.Completer.complete)
1477 self.readline.set_completer(self.Completer.complete)
1474
1478
1475 def mainloop(self,banner=None):
1479 def mainloop(self,banner=None):
1476 """Creates the local namespace and starts the mainloop.
1480 """Creates the local namespace and starts the mainloop.
1477
1481
1478 If an optional banner argument is given, it will override the
1482 If an optional banner argument is given, it will override the
1479 internally created default banner."""
1483 internally created default banner."""
1480
1484
1481 if self.rc.c: # Emulate Python's -c option
1485 if self.rc.c: # Emulate Python's -c option
1482 self.exec_init_cmd()
1486 self.exec_init_cmd()
1483 if banner is None:
1487 if banner is None:
1484 if not self.rc.banner:
1488 if not self.rc.banner:
1485 banner = ''
1489 banner = ''
1486 # banner is string? Use it directly!
1490 # banner is string? Use it directly!
1487 elif isinstance(self.rc.banner,basestring):
1491 elif isinstance(self.rc.banner,basestring):
1488 banner = self.rc.banner
1492 banner = self.rc.banner
1489 else:
1493 else:
1490 banner = self.BANNER+self.banner2
1494 banner = self.BANNER+self.banner2
1491
1495
1492 self.interact(banner)
1496 self.interact(banner)
1493
1497
1494 def exec_init_cmd(self):
1498 def exec_init_cmd(self):
1495 """Execute a command given at the command line.
1499 """Execute a command given at the command line.
1496
1500
1497 This emulates Python's -c option."""
1501 This emulates Python's -c option."""
1498
1502
1499 #sys.argv = ['-c']
1503 #sys.argv = ['-c']
1500 self.push(self.rc.c)
1504 self.push(self.rc.c)
1501
1505
1502 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1506 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1503 """Embeds IPython into a running python program.
1507 """Embeds IPython into a running python program.
1504
1508
1505 Input:
1509 Input:
1506
1510
1507 - header: An optional header message can be specified.
1511 - header: An optional header message can be specified.
1508
1512
1509 - local_ns, global_ns: working namespaces. If given as None, the
1513 - local_ns, global_ns: working namespaces. If given as None, the
1510 IPython-initialized one is updated with __main__.__dict__, so that
1514 IPython-initialized one is updated with __main__.__dict__, so that
1511 program variables become visible but user-specific configuration
1515 program variables become visible but user-specific configuration
1512 remains possible.
1516 remains possible.
1513
1517
1514 - stack_depth: specifies how many levels in the stack to go to
1518 - stack_depth: specifies how many levels in the stack to go to
1515 looking for namespaces (when local_ns and global_ns are None). This
1519 looking for namespaces (when local_ns and global_ns are None). This
1516 allows an intermediate caller to make sure that this function gets
1520 allows an intermediate caller to make sure that this function gets
1517 the namespace from the intended level in the stack. By default (0)
1521 the namespace from the intended level in the stack. By default (0)
1518 it will get its locals and globals from the immediate caller.
1522 it will get its locals and globals from the immediate caller.
1519
1523
1520 Warning: it's possible to use this in a program which is being run by
1524 Warning: it's possible to use this in a program which is being run by
1521 IPython itself (via %run), but some funny things will happen (a few
1525 IPython itself (via %run), but some funny things will happen (a few
1522 globals get overwritten). In the future this will be cleaned up, as
1526 globals get overwritten). In the future this will be cleaned up, as
1523 there is no fundamental reason why it can't work perfectly."""
1527 there is no fundamental reason why it can't work perfectly."""
1524
1528
1525 # Get locals and globals from caller
1529 # Get locals and globals from caller
1526 if local_ns is None or global_ns is None:
1530 if local_ns is None or global_ns is None:
1527 call_frame = sys._getframe(stack_depth).f_back
1531 call_frame = sys._getframe(stack_depth).f_back
1528
1532
1529 if local_ns is None:
1533 if local_ns is None:
1530 local_ns = call_frame.f_locals
1534 local_ns = call_frame.f_locals
1531 if global_ns is None:
1535 if global_ns is None:
1532 global_ns = call_frame.f_globals
1536 global_ns = call_frame.f_globals
1533
1537
1534 # Update namespaces and fire up interpreter
1538 # Update namespaces and fire up interpreter
1535
1539
1536 # The global one is easy, we can just throw it in
1540 # The global one is easy, we can just throw it in
1537 self.user_global_ns = global_ns
1541 self.user_global_ns = global_ns
1538
1542
1539 # but the user/local one is tricky: ipython needs it to store internal
1543 # but the user/local one is tricky: ipython needs it to store internal
1540 # data, but we also need the locals. We'll copy locals in the user
1544 # data, but we also need the locals. We'll copy locals in the user
1541 # one, but will track what got copied so we can delete them at exit.
1545 # one, but will track what got copied so we can delete them at exit.
1542 # This is so that a later embedded call doesn't see locals from a
1546 # This is so that a later embedded call doesn't see locals from a
1543 # previous call (which most likely existed in a separate scope).
1547 # previous call (which most likely existed in a separate scope).
1544 local_varnames = local_ns.keys()
1548 local_varnames = local_ns.keys()
1545 self.user_ns.update(local_ns)
1549 self.user_ns.update(local_ns)
1546
1550
1547 # Patch for global embedding to make sure that things don't overwrite
1551 # Patch for global embedding to make sure that things don't overwrite
1548 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1552 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1549 # FIXME. Test this a bit more carefully (the if.. is new)
1553 # FIXME. Test this a bit more carefully (the if.. is new)
1550 if local_ns is None and global_ns is None:
1554 if local_ns is None and global_ns is None:
1551 self.user_global_ns.update(__main__.__dict__)
1555 self.user_global_ns.update(__main__.__dict__)
1552
1556
1553 # make sure the tab-completer has the correct frame information, so it
1557 # make sure the tab-completer has the correct frame information, so it
1554 # actually completes using the frame's locals/globals
1558 # actually completes using the frame's locals/globals
1555 self.set_completer_frame()
1559 self.set_completer_frame()
1556
1560
1557 # before activating the interactive mode, we need to make sure that
1561 # before activating the interactive mode, we need to make sure that
1558 # all names in the builtin namespace needed by ipython point to
1562 # all names in the builtin namespace needed by ipython point to
1559 # ourselves, and not to other instances.
1563 # ourselves, and not to other instances.
1560 self.add_builtins()
1564 self.add_builtins()
1561
1565
1562 self.interact(header)
1566 self.interact(header)
1563
1567
1564 # now, purge out the user namespace from anything we might have added
1568 # now, purge out the user namespace from anything we might have added
1565 # from the caller's local namespace
1569 # from the caller's local namespace
1566 delvar = self.user_ns.pop
1570 delvar = self.user_ns.pop
1567 for var in local_varnames:
1571 for var in local_varnames:
1568 delvar(var,None)
1572 delvar(var,None)
1569 # and clean builtins we may have overridden
1573 # and clean builtins we may have overridden
1570 self.clean_builtins()
1574 self.clean_builtins()
1571
1575
1572 def interact(self, banner=None):
1576 def interact(self, banner=None):
1573 """Closely emulate the interactive Python console.
1577 """Closely emulate the interactive Python console.
1574
1578
1575 The optional banner argument specify the banner to print
1579 The optional banner argument specify the banner to print
1576 before the first interaction; by default it prints a banner
1580 before the first interaction; by default it prints a banner
1577 similar to the one printed by the real Python interpreter,
1581 similar to the one printed by the real Python interpreter,
1578 followed by the current class name in parentheses (so as not
1582 followed by the current class name in parentheses (so as not
1579 to confuse this with the real interpreter -- since it's so
1583 to confuse this with the real interpreter -- since it's so
1580 close!).
1584 close!).
1581
1585
1582 """
1586 """
1583
1587
1584 if self.exit_now:
1588 if self.exit_now:
1585 # batch run -> do not interact
1589 # batch run -> do not interact
1586 return
1590 return
1587 cprt = 'Type "copyright", "credits" or "license" for more information.'
1591 cprt = 'Type "copyright", "credits" or "license" for more information.'
1588 if banner is None:
1592 if banner is None:
1589 self.write("Python %s on %s\n%s\n(%s)\n" %
1593 self.write("Python %s on %s\n%s\n(%s)\n" %
1590 (sys.version, sys.platform, cprt,
1594 (sys.version, sys.platform, cprt,
1591 self.__class__.__name__))
1595 self.__class__.__name__))
1592 else:
1596 else:
1593 self.write(banner)
1597 self.write(banner)
1594
1598
1595 more = 0
1599 more = 0
1596
1600
1597 # Mark activity in the builtins
1601 # Mark activity in the builtins
1598 __builtin__.__dict__['__IPYTHON__active'] += 1
1602 __builtin__.__dict__['__IPYTHON__active'] += 1
1599
1603
1600 # exit_now is set by a call to %Exit or %Quit
1604 # exit_now is set by a call to %Exit or %Quit
1601 while not self.exit_now:
1605 while not self.exit_now:
1602 if more:
1606 if more:
1603 prompt = self.hooks.generate_prompt(True)
1607 prompt = self.hooks.generate_prompt(True)
1604 if self.autoindent:
1608 if self.autoindent:
1605 self.readline_startup_hook(self.pre_readline)
1609 self.readline_startup_hook(self.pre_readline)
1606 else:
1610 else:
1607 prompt = self.hooks.generate_prompt(False)
1611 prompt = self.hooks.generate_prompt(False)
1608 try:
1612 try:
1609 line = self.raw_input(prompt,more)
1613 line = self.raw_input(prompt,more)
1610 if self.exit_now:
1614 if self.exit_now:
1611 # quick exit on sys.std[in|out] close
1615 # quick exit on sys.std[in|out] close
1612 break
1616 break
1613 if self.autoindent:
1617 if self.autoindent:
1614 self.readline_startup_hook(None)
1618 self.readline_startup_hook(None)
1615 except KeyboardInterrupt:
1619 except KeyboardInterrupt:
1616 self.write('\nKeyboardInterrupt\n')
1620 self.write('\nKeyboardInterrupt\n')
1617 self.resetbuffer()
1621 self.resetbuffer()
1618 # keep cache in sync with the prompt counter:
1622 # keep cache in sync with the prompt counter:
1619 self.outputcache.prompt_count -= 1
1623 self.outputcache.prompt_count -= 1
1620
1624
1621 if self.autoindent:
1625 if self.autoindent:
1622 self.indent_current_nsp = 0
1626 self.indent_current_nsp = 0
1623 more = 0
1627 more = 0
1624 except EOFError:
1628 except EOFError:
1625 if self.autoindent:
1629 if self.autoindent:
1626 self.readline_startup_hook(None)
1630 self.readline_startup_hook(None)
1627 self.write('\n')
1631 self.write('\n')
1628 self.exit()
1632 self.exit()
1629 except bdb.BdbQuit:
1633 except bdb.BdbQuit:
1630 warn('The Python debugger has exited with a BdbQuit exception.\n'
1634 warn('The Python debugger has exited with a BdbQuit exception.\n'
1631 'Because of how pdb handles the stack, it is impossible\n'
1635 'Because of how pdb handles the stack, it is impossible\n'
1632 'for IPython to properly format this particular exception.\n'
1636 'for IPython to properly format this particular exception.\n'
1633 'IPython will resume normal operation.')
1637 'IPython will resume normal operation.')
1634 except:
1638 except:
1635 # exceptions here are VERY RARE, but they can be triggered
1639 # exceptions here are VERY RARE, but they can be triggered
1636 # asynchronously by signal handlers, for example.
1640 # asynchronously by signal handlers, for example.
1637 self.showtraceback()
1641 self.showtraceback()
1638 else:
1642 else:
1639 more = self.push(line)
1643 more = self.push(line)
1640 if (self.SyntaxTB.last_syntax_error and
1644 if (self.SyntaxTB.last_syntax_error and
1641 self.rc.autoedit_syntax):
1645 self.rc.autoedit_syntax):
1642 self.edit_syntax_error()
1646 self.edit_syntax_error()
1643
1647
1644 # We are off again...
1648 # We are off again...
1645 __builtin__.__dict__['__IPYTHON__active'] -= 1
1649 __builtin__.__dict__['__IPYTHON__active'] -= 1
1646
1650
1647 def excepthook(self, etype, value, tb):
1651 def excepthook(self, etype, value, tb):
1648 """One more defense for GUI apps that call sys.excepthook.
1652 """One more defense for GUI apps that call sys.excepthook.
1649
1653
1650 GUI frameworks like wxPython trap exceptions and call
1654 GUI frameworks like wxPython trap exceptions and call
1651 sys.excepthook themselves. I guess this is a feature that
1655 sys.excepthook themselves. I guess this is a feature that
1652 enables them to keep running after exceptions that would
1656 enables them to keep running after exceptions that would
1653 otherwise kill their mainloop. This is a bother for IPython
1657 otherwise kill their mainloop. This is a bother for IPython
1654 which excepts to catch all of the program exceptions with a try:
1658 which excepts to catch all of the program exceptions with a try:
1655 except: statement.
1659 except: statement.
1656
1660
1657 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1661 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1658 any app directly invokes sys.excepthook, it will look to the user like
1662 any app directly invokes sys.excepthook, it will look to the user like
1659 IPython crashed. In order to work around this, we can disable the
1663 IPython crashed. In order to work around this, we can disable the
1660 CrashHandler and replace it with this excepthook instead, which prints a
1664 CrashHandler and replace it with this excepthook instead, which prints a
1661 regular traceback using our InteractiveTB. In this fashion, apps which
1665 regular traceback using our InteractiveTB. In this fashion, apps which
1662 call sys.excepthook will generate a regular-looking exception from
1666 call sys.excepthook will generate a regular-looking exception from
1663 IPython, and the CrashHandler will only be triggered by real IPython
1667 IPython, and the CrashHandler will only be triggered by real IPython
1664 crashes.
1668 crashes.
1665
1669
1666 This hook should be used sparingly, only in places which are not likely
1670 This hook should be used sparingly, only in places which are not likely
1667 to be true IPython errors.
1671 to be true IPython errors.
1668 """
1672 """
1669 self.showtraceback((etype,value,tb),tb_offset=0)
1673 self.showtraceback((etype,value,tb),tb_offset=0)
1670
1674
1671 def expand_aliases(self,fn,rest):
1675 def expand_aliases(self,fn,rest):
1672 """ Expand multiple levels of aliases:
1676 """ Expand multiple levels of aliases:
1673
1677
1674 if:
1678 if:
1675
1679
1676 alias foo bar /tmp
1680 alias foo bar /tmp
1677 alias baz foo
1681 alias baz foo
1678
1682
1679 then:
1683 then:
1680
1684
1681 baz huhhahhei -> bar /tmp huhhahhei
1685 baz huhhahhei -> bar /tmp huhhahhei
1682
1686
1683 """
1687 """
1684 line = fn + " " + rest
1688 line = fn + " " + rest
1685
1689
1686 done = Set()
1690 done = Set()
1687 while 1:
1691 while 1:
1688 pre,fn,rest = self.split_user_input(line)
1692 pre,fn,rest = self.split_user_input(line)
1689 if fn in self.alias_table:
1693 if fn in self.alias_table:
1690 if fn in done:
1694 if fn in done:
1691 warn("Cyclic alias definition, repeated '%s'" % fn)
1695 warn("Cyclic alias definition, repeated '%s'" % fn)
1692 return ""
1696 return ""
1693 done.add(fn)
1697 done.add(fn)
1694
1698
1695 l2 = self.transform_alias(fn,rest)
1699 l2 = self.transform_alias(fn,rest)
1696 # dir -> dir
1700 # dir -> dir
1697 # print "alias",line, "->",l2 #dbg
1701 # print "alias",line, "->",l2 #dbg
1698 if l2 == line:
1702 if l2 == line:
1699 break
1703 break
1700 # ls -> ls -F should not recurse forever
1704 # ls -> ls -F should not recurse forever
1701 if l2.split(None,1)[0] == line.split(None,1)[0]:
1705 if l2.split(None,1)[0] == line.split(None,1)[0]:
1702 line = l2
1706 line = l2
1703 break
1707 break
1704
1708
1705 line=l2
1709 line=l2
1706
1710
1707
1711
1708 # print "al expand to",line #dbg
1712 # print "al expand to",line #dbg
1709 else:
1713 else:
1710 break
1714 break
1711
1715
1712 return line
1716 return line
1713
1717
1714 def transform_alias(self, alias,rest=''):
1718 def transform_alias(self, alias,rest=''):
1715 """ Transform alias to system command string.
1719 """ Transform alias to system command string.
1716 """
1720 """
1717 nargs,cmd = self.alias_table[alias]
1721 nargs,cmd = self.alias_table[alias]
1718 if ' ' in cmd and os.path.isfile(cmd):
1722 if ' ' in cmd and os.path.isfile(cmd):
1719 cmd = '"%s"' % cmd
1723 cmd = '"%s"' % cmd
1720
1724
1721 # Expand the %l special to be the user's input line
1725 # Expand the %l special to be the user's input line
1722 if cmd.find('%l') >= 0:
1726 if cmd.find('%l') >= 0:
1723 cmd = cmd.replace('%l',rest)
1727 cmd = cmd.replace('%l',rest)
1724 rest = ''
1728 rest = ''
1725 if nargs==0:
1729 if nargs==0:
1726 # Simple, argument-less aliases
1730 # Simple, argument-less aliases
1727 cmd = '%s %s' % (cmd,rest)
1731 cmd = '%s %s' % (cmd,rest)
1728 else:
1732 else:
1729 # Handle aliases with positional arguments
1733 # Handle aliases with positional arguments
1730 args = rest.split(None,nargs)
1734 args = rest.split(None,nargs)
1731 if len(args)< nargs:
1735 if len(args)< nargs:
1732 error('Alias <%s> requires %s arguments, %s given.' %
1736 error('Alias <%s> requires %s arguments, %s given.' %
1733 (alias,nargs,len(args)))
1737 (alias,nargs,len(args)))
1734 return None
1738 return None
1735 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1739 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1736 # Now call the macro, evaluating in the user's namespace
1740 # Now call the macro, evaluating in the user's namespace
1737 #print 'new command: <%r>' % cmd # dbg
1741 #print 'new command: <%r>' % cmd # dbg
1738 return cmd
1742 return cmd
1739
1743
1740 def call_alias(self,alias,rest=''):
1744 def call_alias(self,alias,rest=''):
1741 """Call an alias given its name and the rest of the line.
1745 """Call an alias given its name and the rest of the line.
1742
1746
1743 This is only used to provide backwards compatibility for users of
1747 This is only used to provide backwards compatibility for users of
1744 ipalias(), use of which is not recommended for anymore."""
1748 ipalias(), use of which is not recommended for anymore."""
1745
1749
1746 # Now call the macro, evaluating in the user's namespace
1750 # Now call the macro, evaluating in the user's namespace
1747 cmd = self.transform_alias(alias, rest)
1751 cmd = self.transform_alias(alias, rest)
1748 try:
1752 try:
1749 self.system(cmd)
1753 self.system(cmd)
1750 except:
1754 except:
1751 self.showtraceback()
1755 self.showtraceback()
1752
1756
1753 def indent_current_str(self):
1757 def indent_current_str(self):
1754 """return the current level of indentation as a string"""
1758 """return the current level of indentation as a string"""
1755 return self.indent_current_nsp * ' '
1759 return self.indent_current_nsp * ' '
1756
1760
1757 def autoindent_update(self,line):
1761 def autoindent_update(self,line):
1758 """Keep track of the indent level."""
1762 """Keep track of the indent level."""
1759
1763
1760 #debugx('line')
1764 #debugx('line')
1761 #debugx('self.indent_current_nsp')
1765 #debugx('self.indent_current_nsp')
1762 if self.autoindent:
1766 if self.autoindent:
1763 if line:
1767 if line:
1764 inisp = num_ini_spaces(line)
1768 inisp = num_ini_spaces(line)
1765 if inisp < self.indent_current_nsp:
1769 if inisp < self.indent_current_nsp:
1766 self.indent_current_nsp = inisp
1770 self.indent_current_nsp = inisp
1767
1771
1768 if line[-1] == ':':
1772 if line[-1] == ':':
1769 self.indent_current_nsp += 4
1773 self.indent_current_nsp += 4
1770 elif dedent_re.match(line):
1774 elif dedent_re.match(line):
1771 self.indent_current_nsp -= 4
1775 self.indent_current_nsp -= 4
1772 else:
1776 else:
1773 self.indent_current_nsp = 0
1777 self.indent_current_nsp = 0
1774
1778
1775 def runlines(self,lines):
1779 def runlines(self,lines):
1776 """Run a string of one or more lines of source.
1780 """Run a string of one or more lines of source.
1777
1781
1778 This method is capable of running a string containing multiple source
1782 This method is capable of running a string containing multiple source
1779 lines, as if they had been entered at the IPython prompt. Since it
1783 lines, as if they had been entered at the IPython prompt. Since it
1780 exposes IPython's processing machinery, the given strings can contain
1784 exposes IPython's processing machinery, the given strings can contain
1781 magic calls (%magic), special shell access (!cmd), etc."""
1785 magic calls (%magic), special shell access (!cmd), etc."""
1782
1786
1783 # We must start with a clean buffer, in case this is run from an
1787 # We must start with a clean buffer, in case this is run from an
1784 # interactive IPython session (via a magic, for example).
1788 # interactive IPython session (via a magic, for example).
1785 self.resetbuffer()
1789 self.resetbuffer()
1786 lines = lines.split('\n')
1790 lines = lines.split('\n')
1787 more = 0
1791 more = 0
1788 for line in lines:
1792 for line in lines:
1789 # skip blank lines so we don't mess up the prompt counter, but do
1793 # skip blank lines so we don't mess up the prompt counter, but do
1790 # NOT skip even a blank line if we are in a code block (more is
1794 # NOT skip even a blank line if we are in a code block (more is
1791 # true)
1795 # true)
1792 if line or more:
1796 if line or more:
1793 more = self.push(self.prefilter(line,more))
1797 more = self.push(self.prefilter(line,more))
1794 # IPython's runsource returns None if there was an error
1798 # IPython's runsource returns None if there was an error
1795 # compiling the code. This allows us to stop processing right
1799 # compiling the code. This allows us to stop processing right
1796 # away, so the user gets the error message at the right place.
1800 # away, so the user gets the error message at the right place.
1797 if more is None:
1801 if more is None:
1798 break
1802 break
1799 # final newline in case the input didn't have it, so that the code
1803 # final newline in case the input didn't have it, so that the code
1800 # actually does get executed
1804 # actually does get executed
1801 if more:
1805 if more:
1802 self.push('\n')
1806 self.push('\n')
1803
1807
1804 def runsource(self, source, filename='<input>', symbol='single'):
1808 def runsource(self, source, filename='<input>', symbol='single'):
1805 """Compile and run some source in the interpreter.
1809 """Compile and run some source in the interpreter.
1806
1810
1807 Arguments are as for compile_command().
1811 Arguments are as for compile_command().
1808
1812
1809 One several things can happen:
1813 One several things can happen:
1810
1814
1811 1) The input is incorrect; compile_command() raised an
1815 1) The input is incorrect; compile_command() raised an
1812 exception (SyntaxError or OverflowError). A syntax traceback
1816 exception (SyntaxError or OverflowError). A syntax traceback
1813 will be printed by calling the showsyntaxerror() method.
1817 will be printed by calling the showsyntaxerror() method.
1814
1818
1815 2) The input is incomplete, and more input is required;
1819 2) The input is incomplete, and more input is required;
1816 compile_command() returned None. Nothing happens.
1820 compile_command() returned None. Nothing happens.
1817
1821
1818 3) The input is complete; compile_command() returned a code
1822 3) The input is complete; compile_command() returned a code
1819 object. The code is executed by calling self.runcode() (which
1823 object. The code is executed by calling self.runcode() (which
1820 also handles run-time exceptions, except for SystemExit).
1824 also handles run-time exceptions, except for SystemExit).
1821
1825
1822 The return value is:
1826 The return value is:
1823
1827
1824 - True in case 2
1828 - True in case 2
1825
1829
1826 - False in the other cases, unless an exception is raised, where
1830 - False in the other cases, unless an exception is raised, where
1827 None is returned instead. This can be used by external callers to
1831 None is returned instead. This can be used by external callers to
1828 know whether to continue feeding input or not.
1832 know whether to continue feeding input or not.
1829
1833
1830 The return value can be used to decide whether to use sys.ps1 or
1834 The return value can be used to decide whether to use sys.ps1 or
1831 sys.ps2 to prompt the next line."""
1835 sys.ps2 to prompt the next line."""
1832
1836
1833 # if the source code has leading blanks, add 'if 1:\n' to it
1837 # if the source code has leading blanks, add 'if 1:\n' to it
1834 # this allows execution of indented pasted code. It is tempting
1838 # this allows execution of indented pasted code. It is tempting
1835 # to add '\n' at the end of source to run commands like ' a=1'
1839 # to add '\n' at the end of source to run commands like ' a=1'
1836 # directly, but this fails for more complicated scenarios
1840 # directly, but this fails for more complicated scenarios
1837 if source[:1] in [' ', '\t']:
1841 if source[:1] in [' ', '\t']:
1838 source = 'if 1:\n%s' % source
1842 source = 'if 1:\n%s' % source
1839
1843
1840 try:
1844 try:
1841 code = self.compile(source,filename,symbol)
1845 code = self.compile(source,filename,symbol)
1842 except (OverflowError, SyntaxError, ValueError):
1846 except (OverflowError, SyntaxError, ValueError):
1843 # Case 1
1847 # Case 1
1844 self.showsyntaxerror(filename)
1848 self.showsyntaxerror(filename)
1845 return None
1849 return None
1846
1850
1847 if code is None:
1851 if code is None:
1848 # Case 2
1852 # Case 2
1849 return True
1853 return True
1850
1854
1851 # Case 3
1855 # Case 3
1852 # We store the code object so that threaded shells and
1856 # We store the code object so that threaded shells and
1853 # custom exception handlers can access all this info if needed.
1857 # custom exception handlers can access all this info if needed.
1854 # The source corresponding to this can be obtained from the
1858 # The source corresponding to this can be obtained from the
1855 # buffer attribute as '\n'.join(self.buffer).
1859 # buffer attribute as '\n'.join(self.buffer).
1856 self.code_to_run = code
1860 self.code_to_run = code
1857 # now actually execute the code object
1861 # now actually execute the code object
1858 if self.runcode(code) == 0:
1862 if self.runcode(code) == 0:
1859 return False
1863 return False
1860 else:
1864 else:
1861 return None
1865 return None
1862
1866
1863 def runcode(self,code_obj):
1867 def runcode(self,code_obj):
1864 """Execute a code object.
1868 """Execute a code object.
1865
1869
1866 When an exception occurs, self.showtraceback() is called to display a
1870 When an exception occurs, self.showtraceback() is called to display a
1867 traceback.
1871 traceback.
1868
1872
1869 Return value: a flag indicating whether the code to be run completed
1873 Return value: a flag indicating whether the code to be run completed
1870 successfully:
1874 successfully:
1871
1875
1872 - 0: successful execution.
1876 - 0: successful execution.
1873 - 1: an error occurred.
1877 - 1: an error occurred.
1874 """
1878 """
1875
1879
1876 # Set our own excepthook in case the user code tries to call it
1880 # Set our own excepthook in case the user code tries to call it
1877 # directly, so that the IPython crash handler doesn't get triggered
1881 # directly, so that the IPython crash handler doesn't get triggered
1878 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1882 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1879
1883
1880 # we save the original sys.excepthook in the instance, in case config
1884 # we save the original sys.excepthook in the instance, in case config
1881 # code (such as magics) needs access to it.
1885 # code (such as magics) needs access to it.
1882 self.sys_excepthook = old_excepthook
1886 self.sys_excepthook = old_excepthook
1883 outflag = 1 # happens in more places, so it's easier as default
1887 outflag = 1 # happens in more places, so it's easier as default
1884 try:
1888 try:
1885 try:
1889 try:
1886 # Embedded instances require separate global/local namespaces
1890 # Embedded instances require separate global/local namespaces
1887 # so they can see both the surrounding (local) namespace and
1891 # so they can see both the surrounding (local) namespace and
1888 # the module-level globals when called inside another function.
1892 # the module-level globals when called inside another function.
1889 if self.embedded:
1893 if self.embedded:
1890 exec code_obj in self.user_global_ns, self.user_ns
1894 exec code_obj in self.user_global_ns, self.user_ns
1891 # Normal (non-embedded) instances should only have a single
1895 # Normal (non-embedded) instances should only have a single
1892 # namespace for user code execution, otherwise functions won't
1896 # namespace for user code execution, otherwise functions won't
1893 # see interactive top-level globals.
1897 # see interactive top-level globals.
1894 else:
1898 else:
1895 exec code_obj in self.user_ns
1899 exec code_obj in self.user_ns
1896 finally:
1900 finally:
1897 # Reset our crash handler in place
1901 # Reset our crash handler in place
1898 sys.excepthook = old_excepthook
1902 sys.excepthook = old_excepthook
1899 except SystemExit:
1903 except SystemExit:
1900 self.resetbuffer()
1904 self.resetbuffer()
1901 self.showtraceback()
1905 self.showtraceback()
1902 warn("Type %exit or %quit to exit IPython "
1906 warn("Type %exit or %quit to exit IPython "
1903 "(%Exit or %Quit do so unconditionally).",level=1)
1907 "(%Exit or %Quit do so unconditionally).",level=1)
1904 except self.custom_exceptions:
1908 except self.custom_exceptions:
1905 etype,value,tb = sys.exc_info()
1909 etype,value,tb = sys.exc_info()
1906 self.CustomTB(etype,value,tb)
1910 self.CustomTB(etype,value,tb)
1907 except:
1911 except:
1908 self.showtraceback()
1912 self.showtraceback()
1909 else:
1913 else:
1910 outflag = 0
1914 outflag = 0
1911 if softspace(sys.stdout, 0):
1915 if softspace(sys.stdout, 0):
1912 print
1916 print
1913 # Flush out code object which has been run (and source)
1917 # Flush out code object which has been run (and source)
1914 self.code_to_run = None
1918 self.code_to_run = None
1915 return outflag
1919 return outflag
1916
1920
1917 def push(self, line):
1921 def push(self, line):
1918 """Push a line to the interpreter.
1922 """Push a line to the interpreter.
1919
1923
1920 The line should not have a trailing newline; it may have
1924 The line should not have a trailing newline; it may have
1921 internal newlines. The line is appended to a buffer and the
1925 internal newlines. The line is appended to a buffer and the
1922 interpreter's runsource() method is called with the
1926 interpreter's runsource() method is called with the
1923 concatenated contents of the buffer as source. If this
1927 concatenated contents of the buffer as source. If this
1924 indicates that the command was executed or invalid, the buffer
1928 indicates that the command was executed or invalid, the buffer
1925 is reset; otherwise, the command is incomplete, and the buffer
1929 is reset; otherwise, the command is incomplete, and the buffer
1926 is left as it was after the line was appended. The return
1930 is left as it was after the line was appended. The return
1927 value is 1 if more input is required, 0 if the line was dealt
1931 value is 1 if more input is required, 0 if the line was dealt
1928 with in some way (this is the same as runsource()).
1932 with in some way (this is the same as runsource()).
1929 """
1933 """
1930
1934
1931 # autoindent management should be done here, and not in the
1935 # autoindent management should be done here, and not in the
1932 # interactive loop, since that one is only seen by keyboard input. We
1936 # interactive loop, since that one is only seen by keyboard input. We
1933 # need this done correctly even for code run via runlines (which uses
1937 # need this done correctly even for code run via runlines (which uses
1934 # push).
1938 # push).
1935
1939
1936 #print 'push line: <%s>' % line # dbg
1940 #print 'push line: <%s>' % line # dbg
1937 for subline in line.splitlines():
1941 for subline in line.splitlines():
1938 self.autoindent_update(subline)
1942 self.autoindent_update(subline)
1939 self.buffer.append(line)
1943 self.buffer.append(line)
1940 more = self.runsource('\n'.join(self.buffer), self.filename)
1944 more = self.runsource('\n'.join(self.buffer), self.filename)
1941 if not more:
1945 if not more:
1942 self.resetbuffer()
1946 self.resetbuffer()
1943 return more
1947 return more
1944
1948
1945 def resetbuffer(self):
1949 def resetbuffer(self):
1946 """Reset the input buffer."""
1950 """Reset the input buffer."""
1947 self.buffer[:] = []
1951 self.buffer[:] = []
1948
1952
1949 def raw_input(self,prompt='',continue_prompt=False):
1953 def raw_input(self,prompt='',continue_prompt=False):
1950 """Write a prompt and read a line.
1954 """Write a prompt and read a line.
1951
1955
1952 The returned line does not include the trailing newline.
1956 The returned line does not include the trailing newline.
1953 When the user enters the EOF key sequence, EOFError is raised.
1957 When the user enters the EOF key sequence, EOFError is raised.
1954
1958
1955 Optional inputs:
1959 Optional inputs:
1956
1960
1957 - prompt(''): a string to be printed to prompt the user.
1961 - prompt(''): a string to be printed to prompt the user.
1958
1962
1959 - continue_prompt(False): whether this line is the first one or a
1963 - continue_prompt(False): whether this line is the first one or a
1960 continuation in a sequence of inputs.
1964 continuation in a sequence of inputs.
1961 """
1965 """
1962
1966
1963 try:
1967 try:
1964 line = raw_input_original(prompt)
1968 line = raw_input_original(prompt)
1965 except ValueError:
1969 except ValueError:
1966 warn("\n********\nYou or a %run:ed script called sys.stdin.close() or sys.stdout.close()!\nExiting IPython!")
1970 warn("\n********\nYou or a %run:ed script called sys.stdin.close() or sys.stdout.close()!\nExiting IPython!")
1967 self.exit_now = True
1971 self.exit_now = True
1968 return ""
1972 return ""
1969
1973
1970
1974
1971 # Try to be reasonably smart about not re-indenting pasted input more
1975 # Try to be reasonably smart about not re-indenting pasted input more
1972 # than necessary. We do this by trimming out the auto-indent initial
1976 # than necessary. We do this by trimming out the auto-indent initial
1973 # spaces, if the user's actual input started itself with whitespace.
1977 # spaces, if the user's actual input started itself with whitespace.
1974 #debugx('self.buffer[-1]')
1978 #debugx('self.buffer[-1]')
1975
1979
1976 if self.autoindent:
1980 if self.autoindent:
1977 if num_ini_spaces(line) > self.indent_current_nsp:
1981 if num_ini_spaces(line) > self.indent_current_nsp:
1978 line = line[self.indent_current_nsp:]
1982 line = line[self.indent_current_nsp:]
1979 self.indent_current_nsp = 0
1983 self.indent_current_nsp = 0
1980
1984
1981 # store the unfiltered input before the user has any chance to modify
1985 # store the unfiltered input before the user has any chance to modify
1982 # it.
1986 # it.
1983 if line.strip():
1987 if line.strip():
1984 if continue_prompt:
1988 if continue_prompt:
1985 self.input_hist_raw[-1] += '%s\n' % line
1989 self.input_hist_raw[-1] += '%s\n' % line
1986 if self.has_readline: # and some config option is set?
1990 if self.has_readline: # and some config option is set?
1987 try:
1991 try:
1988 histlen = self.readline.get_current_history_length()
1992 histlen = self.readline.get_current_history_length()
1989 newhist = self.input_hist_raw[-1].rstrip()
1993 newhist = self.input_hist_raw[-1].rstrip()
1990 self.readline.remove_history_item(histlen-1)
1994 self.readline.remove_history_item(histlen-1)
1991 self.readline.replace_history_item(histlen-2,newhist)
1995 self.readline.replace_history_item(histlen-2,newhist)
1992 except AttributeError:
1996 except AttributeError:
1993 pass # re{move,place}_history_item are new in 2.4.
1997 pass # re{move,place}_history_item are new in 2.4.
1994 else:
1998 else:
1995 self.input_hist_raw.append('%s\n' % line)
1999 self.input_hist_raw.append('%s\n' % line)
1996
2000
1997 try:
2001 try:
1998 lineout = self.prefilter(line,continue_prompt)
2002 lineout = self.prefilter(line,continue_prompt)
1999 except:
2003 except:
2000 # blanket except, in case a user-defined prefilter crashes, so it
2004 # blanket except, in case a user-defined prefilter crashes, so it
2001 # can't take all of ipython with it.
2005 # can't take all of ipython with it.
2002 self.showtraceback()
2006 self.showtraceback()
2003 return ''
2007 return ''
2004 else:
2008 else:
2005 return lineout
2009 return lineout
2006
2010
2007 def split_user_input(self,line):
2011 def split_user_input(self,line):
2008 """Split user input into pre-char, function part and rest."""
2012 """Split user input into pre-char, function part and rest."""
2009
2013
2010 lsplit = self.line_split.match(line)
2014 lsplit = self.line_split.match(line)
2011 if lsplit is None: # no regexp match returns None
2015 if lsplit is None: # no regexp match returns None
2012 try:
2016 try:
2013 iFun,theRest = line.split(None,1)
2017 iFun,theRest = line.split(None,1)
2014 except ValueError:
2018 except ValueError:
2015 iFun,theRest = line,''
2019 iFun,theRest = line,''
2016 pre = re.match('^(\s*)(.*)',line).groups()[0]
2020 pre = re.match('^(\s*)(.*)',line).groups()[0]
2017 else:
2021 else:
2018 pre,iFun,theRest = lsplit.groups()
2022 pre,iFun,theRest = lsplit.groups()
2019
2023
2020 #print 'line:<%s>' % line # dbg
2024 #print 'line:<%s>' % line # dbg
2021 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2025 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2022 return pre,iFun.strip(),theRest
2026 return pre,iFun.strip(),theRest
2023
2027
2024 def _prefilter(self, line, continue_prompt):
2028 def _prefilter(self, line, continue_prompt):
2025 """Calls different preprocessors, depending on the form of line."""
2029 """Calls different preprocessors, depending on the form of line."""
2026
2030
2027 # All handlers *must* return a value, even if it's blank ('').
2031 # All handlers *must* return a value, even if it's blank ('').
2028
2032
2029 # Lines are NOT logged here. Handlers should process the line as
2033 # Lines are NOT logged here. Handlers should process the line as
2030 # needed, update the cache AND log it (so that the input cache array
2034 # needed, update the cache AND log it (so that the input cache array
2031 # stays synced).
2035 # stays synced).
2032
2036
2033 # This function is _very_ delicate, and since it's also the one which
2037 # This function is _very_ delicate, and since it's also the one which
2034 # determines IPython's response to user input, it must be as efficient
2038 # determines IPython's response to user input, it must be as efficient
2035 # as possible. For this reason it has _many_ returns in it, trying
2039 # as possible. For this reason it has _many_ returns in it, trying
2036 # always to exit as quickly as it can figure out what it needs to do.
2040 # always to exit as quickly as it can figure out what it needs to do.
2037
2041
2038 # This function is the main responsible for maintaining IPython's
2042 # This function is the main responsible for maintaining IPython's
2039 # behavior respectful of Python's semantics. So be _very_ careful if
2043 # behavior respectful of Python's semantics. So be _very_ careful if
2040 # making changes to anything here.
2044 # making changes to anything here.
2041
2045
2042 #.....................................................................
2046 #.....................................................................
2043 # Code begins
2047 # Code begins
2044
2048
2045 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2049 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2046
2050
2047 # save the line away in case we crash, so the post-mortem handler can
2051 # save the line away in case we crash, so the post-mortem handler can
2048 # record it
2052 # record it
2049 self._last_input_line = line
2053 self._last_input_line = line
2050
2054
2051 #print '***line: <%s>' % line # dbg
2055 #print '***line: <%s>' % line # dbg
2052
2056
2053 # the input history needs to track even empty lines
2057 # the input history needs to track even empty lines
2054 stripped = line.strip()
2058 stripped = line.strip()
2055
2059
2056 if not stripped:
2060 if not stripped:
2057 if not continue_prompt:
2061 if not continue_prompt:
2058 self.outputcache.prompt_count -= 1
2062 self.outputcache.prompt_count -= 1
2059 return self.handle_normal(line,continue_prompt)
2063 return self.handle_normal(line,continue_prompt)
2060 #return self.handle_normal('',continue_prompt)
2064 #return self.handle_normal('',continue_prompt)
2061
2065
2062 # print '***cont',continue_prompt # dbg
2066 # print '***cont',continue_prompt # dbg
2063 # special handlers are only allowed for single line statements
2067 # special handlers are only allowed for single line statements
2064 if continue_prompt and not self.rc.multi_line_specials:
2068 if continue_prompt and not self.rc.multi_line_specials:
2065 return self.handle_normal(line,continue_prompt)
2069 return self.handle_normal(line,continue_prompt)
2066
2070
2067
2071
2068 # For the rest, we need the structure of the input
2072 # For the rest, we need the structure of the input
2069 pre,iFun,theRest = self.split_user_input(line)
2073 pre,iFun,theRest = self.split_user_input(line)
2070
2074
2071 # See whether any pre-existing handler can take care of it
2075 # See whether any pre-existing handler can take care of it
2072
2076
2073 rewritten = self.hooks.input_prefilter(stripped)
2077 rewritten = self.hooks.input_prefilter(stripped)
2074 if rewritten != stripped: # ok, some prefilter did something
2078 if rewritten != stripped: # ok, some prefilter did something
2075 rewritten = pre + rewritten # add indentation
2079 rewritten = pre + rewritten # add indentation
2076 return self.handle_normal(rewritten)
2080 return self.handle_normal(rewritten)
2077
2081
2078 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2082 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2079
2083
2080 # First check for explicit escapes in the last/first character
2084 # First check for explicit escapes in the last/first character
2081 handler = None
2085 handler = None
2082 if line[-1] == self.ESC_HELP:
2086 if line[-1] == self.ESC_HELP:
2083 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2087 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2084 if handler is None:
2088 if handler is None:
2085 # look at the first character of iFun, NOT of line, so we skip
2089 # look at the first character of iFun, NOT of line, so we skip
2086 # leading whitespace in multiline input
2090 # leading whitespace in multiline input
2087 handler = self.esc_handlers.get(iFun[0:1])
2091 handler = self.esc_handlers.get(iFun[0:1])
2088 if handler is not None:
2092 if handler is not None:
2089 return handler(line,continue_prompt,pre,iFun,theRest)
2093 return handler(line,continue_prompt,pre,iFun,theRest)
2090 # Emacs ipython-mode tags certain input lines
2094 # Emacs ipython-mode tags certain input lines
2091 if line.endswith('# PYTHON-MODE'):
2095 if line.endswith('# PYTHON-MODE'):
2092 return self.handle_emacs(line,continue_prompt)
2096 return self.handle_emacs(line,continue_prompt)
2093
2097
2094 # Next, check if we can automatically execute this thing
2098 # Next, check if we can automatically execute this thing
2095
2099
2096 # Allow ! in multi-line statements if multi_line_specials is on:
2100 # Allow ! in multi-line statements if multi_line_specials is on:
2097 if continue_prompt and self.rc.multi_line_specials and \
2101 if continue_prompt and self.rc.multi_line_specials and \
2098 iFun.startswith(self.ESC_SHELL):
2102 iFun.startswith(self.ESC_SHELL):
2099 return self.handle_shell_escape(line,continue_prompt,
2103 return self.handle_shell_escape(line,continue_prompt,
2100 pre=pre,iFun=iFun,
2104 pre=pre,iFun=iFun,
2101 theRest=theRest)
2105 theRest=theRest)
2102
2106
2103 # Let's try to find if the input line is a magic fn
2107 # Let's try to find if the input line is a magic fn
2104 oinfo = None
2108 oinfo = None
2105 if hasattr(self,'magic_'+iFun):
2109 if hasattr(self,'magic_'+iFun):
2106 # WARNING: _ofind uses getattr(), so it can consume generators and
2110 # WARNING: _ofind uses getattr(), so it can consume generators and
2107 # cause other side effects.
2111 # cause other side effects.
2108 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2112 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2109 if oinfo['ismagic']:
2113 if oinfo['ismagic']:
2110 # Be careful not to call magics when a variable assignment is
2114 # Be careful not to call magics when a variable assignment is
2111 # being made (ls='hi', for example)
2115 # being made (ls='hi', for example)
2112 if self.rc.automagic and \
2116 if self.rc.automagic and \
2113 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2117 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2114 (self.rc.multi_line_specials or not continue_prompt):
2118 (self.rc.multi_line_specials or not continue_prompt):
2115 return self.handle_magic(line,continue_prompt,
2119 return self.handle_magic(line,continue_prompt,
2116 pre,iFun,theRest)
2120 pre,iFun,theRest)
2117 else:
2121 else:
2118 return self.handle_normal(line,continue_prompt)
2122 return self.handle_normal(line,continue_prompt)
2119
2123
2120 # If the rest of the line begins with an (in)equality, assginment or
2124 # If the rest of the line begins with an (in)equality, assginment or
2121 # function call, we should not call _ofind but simply execute it.
2125 # function call, we should not call _ofind but simply execute it.
2122 # This avoids spurious geattr() accesses on objects upon assignment.
2126 # This avoids spurious geattr() accesses on objects upon assignment.
2123 #
2127 #
2124 # It also allows users to assign to either alias or magic names true
2128 # It also allows users to assign to either alias or magic names true
2125 # python variables (the magic/alias systems always take second seat to
2129 # python variables (the magic/alias systems always take second seat to
2126 # true python code).
2130 # true python code).
2127 if theRest and theRest[0] in '!=()':
2131 if theRest and theRest[0] in '!=()':
2128 return self.handle_normal(line,continue_prompt)
2132 return self.handle_normal(line,continue_prompt)
2129
2133
2130 if oinfo is None:
2134 if oinfo is None:
2131 # let's try to ensure that _oinfo is ONLY called when autocall is
2135 # let's try to ensure that _oinfo is ONLY called when autocall is
2132 # on. Since it has inevitable potential side effects, at least
2136 # on. Since it has inevitable potential side effects, at least
2133 # having autocall off should be a guarantee to the user that no
2137 # having autocall off should be a guarantee to the user that no
2134 # weird things will happen.
2138 # weird things will happen.
2135
2139
2136 if self.rc.autocall:
2140 if self.rc.autocall:
2137 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2141 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2138 else:
2142 else:
2139 # in this case, all that's left is either an alias or
2143 # in this case, all that's left is either an alias or
2140 # processing the line normally.
2144 # processing the line normally.
2141 if iFun in self.alias_table:
2145 if iFun in self.alias_table:
2142 # if autocall is off, by not running _ofind we won't know
2146 # if autocall is off, by not running _ofind we won't know
2143 # whether the given name may also exist in one of the
2147 # whether the given name may also exist in one of the
2144 # user's namespace. At this point, it's best to do a
2148 # user's namespace. At this point, it's best to do a
2145 # quick check just to be sure that we don't let aliases
2149 # quick check just to be sure that we don't let aliases
2146 # shadow variables.
2150 # shadow variables.
2147 head = iFun.split('.',1)[0]
2151 head = iFun.split('.',1)[0]
2148 if head in self.user_ns or head in self.internal_ns \
2152 if head in self.user_ns or head in self.internal_ns \
2149 or head in __builtin__.__dict__:
2153 or head in __builtin__.__dict__:
2150 return self.handle_normal(line,continue_prompt)
2154 return self.handle_normal(line,continue_prompt)
2151 else:
2155 else:
2152 return self.handle_alias(line,continue_prompt,
2156 return self.handle_alias(line,continue_prompt,
2153 pre,iFun,theRest)
2157 pre,iFun,theRest)
2154
2158
2155 else:
2159 else:
2156 return self.handle_normal(line,continue_prompt)
2160 return self.handle_normal(line,continue_prompt)
2157
2161
2158 if not oinfo['found']:
2162 if not oinfo['found']:
2159 return self.handle_normal(line,continue_prompt)
2163 return self.handle_normal(line,continue_prompt)
2160 else:
2164 else:
2161 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2165 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2162 if oinfo['isalias']:
2166 if oinfo['isalias']:
2163 return self.handle_alias(line,continue_prompt,
2167 return self.handle_alias(line,continue_prompt,
2164 pre,iFun,theRest)
2168 pre,iFun,theRest)
2165
2169
2166 if (self.rc.autocall
2170 if (self.rc.autocall
2167 and
2171 and
2168 (
2172 (
2169 #only consider exclusion re if not "," or ";" autoquoting
2173 #only consider exclusion re if not "," or ";" autoquoting
2170 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2174 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2171 or pre == self.ESC_PAREN) or
2175 or pre == self.ESC_PAREN) or
2172 (not self.re_exclude_auto.match(theRest)))
2176 (not self.re_exclude_auto.match(theRest)))
2173 and
2177 and
2174 self.re_fun_name.match(iFun) and
2178 self.re_fun_name.match(iFun) and
2175 callable(oinfo['obj'])) :
2179 callable(oinfo['obj'])) :
2176 #print 'going auto' # dbg
2180 #print 'going auto' # dbg
2177 return self.handle_auto(line,continue_prompt,
2181 return self.handle_auto(line,continue_prompt,
2178 pre,iFun,theRest,oinfo['obj'])
2182 pre,iFun,theRest,oinfo['obj'])
2179 else:
2183 else:
2180 #print 'was callable?', callable(oinfo['obj']) # dbg
2184 #print 'was callable?', callable(oinfo['obj']) # dbg
2181 return self.handle_normal(line,continue_prompt)
2185 return self.handle_normal(line,continue_prompt)
2182
2186
2183 # If we get here, we have a normal Python line. Log and return.
2187 # If we get here, we have a normal Python line. Log and return.
2184 return self.handle_normal(line,continue_prompt)
2188 return self.handle_normal(line,continue_prompt)
2185
2189
2186 def _prefilter_dumb(self, line, continue_prompt):
2190 def _prefilter_dumb(self, line, continue_prompt):
2187 """simple prefilter function, for debugging"""
2191 """simple prefilter function, for debugging"""
2188 return self.handle_normal(line,continue_prompt)
2192 return self.handle_normal(line,continue_prompt)
2189
2193
2190
2194
2191 def multiline_prefilter(self, line, continue_prompt):
2195 def multiline_prefilter(self, line, continue_prompt):
2192 """ Run _prefilter for each line of input
2196 """ Run _prefilter for each line of input
2193
2197
2194 Covers cases where there are multiple lines in the user entry,
2198 Covers cases where there are multiple lines in the user entry,
2195 which is the case when the user goes back to a multiline history
2199 which is the case when the user goes back to a multiline history
2196 entry and presses enter.
2200 entry and presses enter.
2197
2201
2198 """
2202 """
2199 out = []
2203 out = []
2200 for l in line.rstrip('\n').split('\n'):
2204 for l in line.rstrip('\n').split('\n'):
2201 out.append(self._prefilter(l, continue_prompt))
2205 out.append(self._prefilter(l, continue_prompt))
2202 return '\n'.join(out)
2206 return '\n'.join(out)
2203
2207
2204 # Set the default prefilter() function (this can be user-overridden)
2208 # Set the default prefilter() function (this can be user-overridden)
2205 prefilter = multiline_prefilter
2209 prefilter = multiline_prefilter
2206
2210
2207 def handle_normal(self,line,continue_prompt=None,
2211 def handle_normal(self,line,continue_prompt=None,
2208 pre=None,iFun=None,theRest=None):
2212 pre=None,iFun=None,theRest=None):
2209 """Handle normal input lines. Use as a template for handlers."""
2213 """Handle normal input lines. Use as a template for handlers."""
2210
2214
2211 # With autoindent on, we need some way to exit the input loop, and I
2215 # With autoindent on, we need some way to exit the input loop, and I
2212 # don't want to force the user to have to backspace all the way to
2216 # don't want to force the user to have to backspace all the way to
2213 # clear the line. The rule will be in this case, that either two
2217 # clear the line. The rule will be in this case, that either two
2214 # lines of pure whitespace in a row, or a line of pure whitespace but
2218 # lines of pure whitespace in a row, or a line of pure whitespace but
2215 # of a size different to the indent level, will exit the input loop.
2219 # of a size different to the indent level, will exit the input loop.
2216
2220
2217 if (continue_prompt and self.autoindent and line.isspace() and
2221 if (continue_prompt and self.autoindent and line.isspace() and
2218 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2222 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2219 (self.buffer[-1]).isspace() )):
2223 (self.buffer[-1]).isspace() )):
2220 line = ''
2224 line = ''
2221
2225
2222 self.log(line,line,continue_prompt)
2226 self.log(line,line,continue_prompt)
2223 return line
2227 return line
2224
2228
2225 def handle_alias(self,line,continue_prompt=None,
2229 def handle_alias(self,line,continue_prompt=None,
2226 pre=None,iFun=None,theRest=None):
2230 pre=None,iFun=None,theRest=None):
2227 """Handle alias input lines. """
2231 """Handle alias input lines. """
2228
2232
2229 # pre is needed, because it carries the leading whitespace. Otherwise
2233 # pre is needed, because it carries the leading whitespace. Otherwise
2230 # aliases won't work in indented sections.
2234 # aliases won't work in indented sections.
2231 transformed = self.expand_aliases(iFun, theRest)
2235 transformed = self.expand_aliases(iFun, theRest)
2232 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2236 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2233 self.log(line,line_out,continue_prompt)
2237 self.log(line,line_out,continue_prompt)
2234 #print 'line out:',line_out # dbg
2238 #print 'line out:',line_out # dbg
2235 return line_out
2239 return line_out
2236
2240
2237 def handle_shell_escape(self, line, continue_prompt=None,
2241 def handle_shell_escape(self, line, continue_prompt=None,
2238 pre=None,iFun=None,theRest=None):
2242 pre=None,iFun=None,theRest=None):
2239 """Execute the line in a shell, empty return value"""
2243 """Execute the line in a shell, empty return value"""
2240
2244
2241 #print 'line in :', `line` # dbg
2245 #print 'line in :', `line` # dbg
2242 # Example of a special handler. Others follow a similar pattern.
2246 # Example of a special handler. Others follow a similar pattern.
2243 if line.lstrip().startswith('!!'):
2247 if line.lstrip().startswith('!!'):
2244 # rewrite iFun/theRest to properly hold the call to %sx and
2248 # rewrite iFun/theRest to properly hold the call to %sx and
2245 # the actual command to be executed, so handle_magic can work
2249 # the actual command to be executed, so handle_magic can work
2246 # correctly
2250 # correctly
2247 theRest = '%s %s' % (iFun[2:],theRest)
2251 theRest = '%s %s' % (iFun[2:],theRest)
2248 iFun = 'sx'
2252 iFun = 'sx'
2249 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2253 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2250 line.lstrip()[2:]),
2254 line.lstrip()[2:]),
2251 continue_prompt,pre,iFun,theRest)
2255 continue_prompt,pre,iFun,theRest)
2252 else:
2256 else:
2253 cmd=line.lstrip().lstrip('!')
2257 cmd=line.lstrip().lstrip('!')
2254 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2258 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2255 # update cache/log and return
2259 # update cache/log and return
2256 self.log(line,line_out,continue_prompt)
2260 self.log(line,line_out,continue_prompt)
2257 return line_out
2261 return line_out
2258
2262
2259 def handle_magic(self, line, continue_prompt=None,
2263 def handle_magic(self, line, continue_prompt=None,
2260 pre=None,iFun=None,theRest=None):
2264 pre=None,iFun=None,theRest=None):
2261 """Execute magic functions."""
2265 """Execute magic functions."""
2262
2266
2263
2267
2264 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2268 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2265 self.log(line,cmd,continue_prompt)
2269 self.log(line,cmd,continue_prompt)
2266 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2270 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2267 return cmd
2271 return cmd
2268
2272
2269 def handle_auto(self, line, continue_prompt=None,
2273 def handle_auto(self, line, continue_prompt=None,
2270 pre=None,iFun=None,theRest=None,obj=None):
2274 pre=None,iFun=None,theRest=None,obj=None):
2271 """Hande lines which can be auto-executed, quoting if requested."""
2275 """Hande lines which can be auto-executed, quoting if requested."""
2272
2276
2273 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2277 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2274
2278
2275 # This should only be active for single-line input!
2279 # This should only be active for single-line input!
2276 if continue_prompt:
2280 if continue_prompt:
2277 self.log(line,line,continue_prompt)
2281 self.log(line,line,continue_prompt)
2278 return line
2282 return line
2279
2283
2280 auto_rewrite = True
2284 auto_rewrite = True
2281
2285
2282 if pre == self.ESC_QUOTE:
2286 if pre == self.ESC_QUOTE:
2283 # Auto-quote splitting on whitespace
2287 # Auto-quote splitting on whitespace
2284 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2288 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2285 elif pre == self.ESC_QUOTE2:
2289 elif pre == self.ESC_QUOTE2:
2286 # Auto-quote whole string
2290 # Auto-quote whole string
2287 newcmd = '%s("%s")' % (iFun,theRest)
2291 newcmd = '%s("%s")' % (iFun,theRest)
2288 elif pre == self.ESC_PAREN:
2292 elif pre == self.ESC_PAREN:
2289 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2293 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2290 else:
2294 else:
2291 # Auto-paren.
2295 # Auto-paren.
2292 # We only apply it to argument-less calls if the autocall
2296 # We only apply it to argument-less calls if the autocall
2293 # parameter is set to 2. We only need to check that autocall is <
2297 # parameter is set to 2. We only need to check that autocall is <
2294 # 2, since this function isn't called unless it's at least 1.
2298 # 2, since this function isn't called unless it's at least 1.
2295 if not theRest and (self.rc.autocall < 2):
2299 if not theRest and (self.rc.autocall < 2):
2296 newcmd = '%s %s' % (iFun,theRest)
2300 newcmd = '%s %s' % (iFun,theRest)
2297 auto_rewrite = False
2301 auto_rewrite = False
2298 else:
2302 else:
2299 if theRest.startswith('['):
2303 if theRest.startswith('['):
2300 if hasattr(obj,'__getitem__'):
2304 if hasattr(obj,'__getitem__'):
2301 # Don't autocall in this case: item access for an object
2305 # Don't autocall in this case: item access for an object
2302 # which is BOTH callable and implements __getitem__.
2306 # which is BOTH callable and implements __getitem__.
2303 newcmd = '%s %s' % (iFun,theRest)
2307 newcmd = '%s %s' % (iFun,theRest)
2304 auto_rewrite = False
2308 auto_rewrite = False
2305 else:
2309 else:
2306 # if the object doesn't support [] access, go ahead and
2310 # if the object doesn't support [] access, go ahead and
2307 # autocall
2311 # autocall
2308 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2312 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2309 elif theRest.endswith(';'):
2313 elif theRest.endswith(';'):
2310 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2314 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2311 else:
2315 else:
2312 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2316 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2313
2317
2314 if auto_rewrite:
2318 if auto_rewrite:
2315 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2319 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2316 # log what is now valid Python, not the actual user input (without the
2320 # log what is now valid Python, not the actual user input (without the
2317 # final newline)
2321 # final newline)
2318 self.log(line,newcmd,continue_prompt)
2322 self.log(line,newcmd,continue_prompt)
2319 return newcmd
2323 return newcmd
2320
2324
2321 def handle_help(self, line, continue_prompt=None,
2325 def handle_help(self, line, continue_prompt=None,
2322 pre=None,iFun=None,theRest=None):
2326 pre=None,iFun=None,theRest=None):
2323 """Try to get some help for the object.
2327 """Try to get some help for the object.
2324
2328
2325 obj? or ?obj -> basic information.
2329 obj? or ?obj -> basic information.
2326 obj?? or ??obj -> more details.
2330 obj?? or ??obj -> more details.
2327 """
2331 """
2328
2332
2329 # We need to make sure that we don't process lines which would be
2333 # We need to make sure that we don't process lines which would be
2330 # otherwise valid python, such as "x=1 # what?"
2334 # otherwise valid python, such as "x=1 # what?"
2331 try:
2335 try:
2332 codeop.compile_command(line)
2336 codeop.compile_command(line)
2333 except SyntaxError:
2337 except SyntaxError:
2334 # We should only handle as help stuff which is NOT valid syntax
2338 # We should only handle as help stuff which is NOT valid syntax
2335 if line[0]==self.ESC_HELP:
2339 if line[0]==self.ESC_HELP:
2336 line = line[1:]
2340 line = line[1:]
2337 elif line[-1]==self.ESC_HELP:
2341 elif line[-1]==self.ESC_HELP:
2338 line = line[:-1]
2342 line = line[:-1]
2339 self.log(line,'#?'+line,continue_prompt)
2343 self.log(line,'#?'+line,continue_prompt)
2340 if line:
2344 if line:
2341 self.magic_pinfo(line)
2345 self.magic_pinfo(line)
2342 else:
2346 else:
2343 page(self.usage,screen_lines=self.rc.screen_length)
2347 page(self.usage,screen_lines=self.rc.screen_length)
2344 return '' # Empty string is needed here!
2348 return '' # Empty string is needed here!
2345 except:
2349 except:
2346 # Pass any other exceptions through to the normal handler
2350 # Pass any other exceptions through to the normal handler
2347 return self.handle_normal(line,continue_prompt)
2351 return self.handle_normal(line,continue_prompt)
2348 else:
2352 else:
2349 # If the code compiles ok, we should handle it normally
2353 # If the code compiles ok, we should handle it normally
2350 return self.handle_normal(line,continue_prompt)
2354 return self.handle_normal(line,continue_prompt)
2351
2355
2352 def getapi(self):
2356 def getapi(self):
2353 """ Get an IPApi object for this shell instance
2357 """ Get an IPApi object for this shell instance
2354
2358
2355 Getting an IPApi object is always preferable to accessing the shell
2359 Getting an IPApi object is always preferable to accessing the shell
2356 directly, but this holds true especially for extensions.
2360 directly, but this holds true especially for extensions.
2357
2361
2358 It should always be possible to implement an extension with IPApi
2362 It should always be possible to implement an extension with IPApi
2359 alone. If not, contact maintainer to request an addition.
2363 alone. If not, contact maintainer to request an addition.
2360
2364
2361 """
2365 """
2362 return self.api
2366 return self.api
2363
2367
2364 def handle_emacs(self,line,continue_prompt=None,
2368 def handle_emacs(self,line,continue_prompt=None,
2365 pre=None,iFun=None,theRest=None):
2369 pre=None,iFun=None,theRest=None):
2366 """Handle input lines marked by python-mode."""
2370 """Handle input lines marked by python-mode."""
2367
2371
2368 # Currently, nothing is done. Later more functionality can be added
2372 # Currently, nothing is done. Later more functionality can be added
2369 # here if needed.
2373 # here if needed.
2370
2374
2371 # The input cache shouldn't be updated
2375 # The input cache shouldn't be updated
2372
2376
2373 return line
2377 return line
2374
2378
2375 def mktempfile(self,data=None):
2379 def mktempfile(self,data=None):
2376 """Make a new tempfile and return its filename.
2380 """Make a new tempfile and return its filename.
2377
2381
2378 This makes a call to tempfile.mktemp, but it registers the created
2382 This makes a call to tempfile.mktemp, but it registers the created
2379 filename internally so ipython cleans it up at exit time.
2383 filename internally so ipython cleans it up at exit time.
2380
2384
2381 Optional inputs:
2385 Optional inputs:
2382
2386
2383 - data(None): if data is given, it gets written out to the temp file
2387 - data(None): if data is given, it gets written out to the temp file
2384 immediately, and the file is closed again."""
2388 immediately, and the file is closed again."""
2385
2389
2386 filename = tempfile.mktemp('.py','ipython_edit_')
2390 filename = tempfile.mktemp('.py','ipython_edit_')
2387 self.tempfiles.append(filename)
2391 self.tempfiles.append(filename)
2388
2392
2389 if data:
2393 if data:
2390 tmp_file = open(filename,'w')
2394 tmp_file = open(filename,'w')
2391 tmp_file.write(data)
2395 tmp_file.write(data)
2392 tmp_file.close()
2396 tmp_file.close()
2393 return filename
2397 return filename
2394
2398
2395 def write(self,data):
2399 def write(self,data):
2396 """Write a string to the default output"""
2400 """Write a string to the default output"""
2397 Term.cout.write(data)
2401 Term.cout.write(data)
2398
2402
2399 def write_err(self,data):
2403 def write_err(self,data):
2400 """Write a string to the default error output"""
2404 """Write a string to the default error output"""
2401 Term.cerr.write(data)
2405 Term.cerr.write(data)
2402
2406
2403 def exit(self):
2407 def exit(self):
2404 """Handle interactive exit.
2408 """Handle interactive exit.
2405
2409
2406 This method sets the exit_now attribute."""
2410 This method sets the exit_now attribute."""
2407
2411
2408 if self.rc.confirm_exit:
2412 if self.rc.confirm_exit:
2409 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2413 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2410 self.exit_now = True
2414 self.exit_now = True
2411 else:
2415 else:
2412 self.exit_now = True
2416 self.exit_now = True
2413
2417
2414 def safe_execfile(self,fname,*where,**kw):
2418 def safe_execfile(self,fname,*where,**kw):
2415 """A safe version of the builtin execfile().
2419 """A safe version of the builtin execfile().
2416
2420
2417 This version will never throw an exception, and knows how to handle
2421 This version will never throw an exception, and knows how to handle
2418 ipython logs as well."""
2422 ipython logs as well."""
2419
2423
2420 def syspath_cleanup():
2424 def syspath_cleanup():
2421 """Internal cleanup routine for sys.path."""
2425 """Internal cleanup routine for sys.path."""
2422 if add_dname:
2426 if add_dname:
2423 try:
2427 try:
2424 sys.path.remove(dname)
2428 sys.path.remove(dname)
2425 except ValueError:
2429 except ValueError:
2426 # For some reason the user has already removed it, ignore.
2430 # For some reason the user has already removed it, ignore.
2427 pass
2431 pass
2428
2432
2429 fname = os.path.expanduser(fname)
2433 fname = os.path.expanduser(fname)
2430
2434
2431 # Find things also in current directory. This is needed to mimic the
2435 # Find things also in current directory. This is needed to mimic the
2432 # behavior of running a script from the system command line, where
2436 # behavior of running a script from the system command line, where
2433 # Python inserts the script's directory into sys.path
2437 # Python inserts the script's directory into sys.path
2434 dname = os.path.dirname(os.path.abspath(fname))
2438 dname = os.path.dirname(os.path.abspath(fname))
2435 add_dname = False
2439 add_dname = False
2436 if dname not in sys.path:
2440 if dname not in sys.path:
2437 sys.path.insert(0,dname)
2441 sys.path.insert(0,dname)
2438 add_dname = True
2442 add_dname = True
2439
2443
2440 try:
2444 try:
2441 xfile = open(fname)
2445 xfile = open(fname)
2442 except:
2446 except:
2443 print >> Term.cerr, \
2447 print >> Term.cerr, \
2444 'Could not open file <%s> for safe execution.' % fname
2448 'Could not open file <%s> for safe execution.' % fname
2445 syspath_cleanup()
2449 syspath_cleanup()
2446 return None
2450 return None
2447
2451
2448 kw.setdefault('islog',0)
2452 kw.setdefault('islog',0)
2449 kw.setdefault('quiet',1)
2453 kw.setdefault('quiet',1)
2450 kw.setdefault('exit_ignore',0)
2454 kw.setdefault('exit_ignore',0)
2451 first = xfile.readline()
2455 first = xfile.readline()
2452 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2456 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2453 xfile.close()
2457 xfile.close()
2454 # line by line execution
2458 # line by line execution
2455 if first.startswith(loghead) or kw['islog']:
2459 if first.startswith(loghead) or kw['islog']:
2456 print 'Loading log file <%s> one line at a time...' % fname
2460 print 'Loading log file <%s> one line at a time...' % fname
2457 if kw['quiet']:
2461 if kw['quiet']:
2458 stdout_save = sys.stdout
2462 stdout_save = sys.stdout
2459 sys.stdout = StringIO.StringIO()
2463 sys.stdout = StringIO.StringIO()
2460 try:
2464 try:
2461 globs,locs = where[0:2]
2465 globs,locs = where[0:2]
2462 except:
2466 except:
2463 try:
2467 try:
2464 globs = locs = where[0]
2468 globs = locs = where[0]
2465 except:
2469 except:
2466 globs = locs = globals()
2470 globs = locs = globals()
2467 badblocks = []
2471 badblocks = []
2468
2472
2469 # we also need to identify indented blocks of code when replaying
2473 # we also need to identify indented blocks of code when replaying
2470 # logs and put them together before passing them to an exec
2474 # logs and put them together before passing them to an exec
2471 # statement. This takes a bit of regexp and look-ahead work in the
2475 # statement. This takes a bit of regexp and look-ahead work in the
2472 # file. It's easiest if we swallow the whole thing in memory
2476 # file. It's easiest if we swallow the whole thing in memory
2473 # first, and manually walk through the lines list moving the
2477 # first, and manually walk through the lines list moving the
2474 # counter ourselves.
2478 # counter ourselves.
2475 indent_re = re.compile('\s+\S')
2479 indent_re = re.compile('\s+\S')
2476 xfile = open(fname)
2480 xfile = open(fname)
2477 filelines = xfile.readlines()
2481 filelines = xfile.readlines()
2478 xfile.close()
2482 xfile.close()
2479 nlines = len(filelines)
2483 nlines = len(filelines)
2480 lnum = 0
2484 lnum = 0
2481 while lnum < nlines:
2485 while lnum < nlines:
2482 line = filelines[lnum]
2486 line = filelines[lnum]
2483 lnum += 1
2487 lnum += 1
2484 # don't re-insert logger status info into cache
2488 # don't re-insert logger status info into cache
2485 if line.startswith('#log#'):
2489 if line.startswith('#log#'):
2486 continue
2490 continue
2487 else:
2491 else:
2488 # build a block of code (maybe a single line) for execution
2492 # build a block of code (maybe a single line) for execution
2489 block = line
2493 block = line
2490 try:
2494 try:
2491 next = filelines[lnum] # lnum has already incremented
2495 next = filelines[lnum] # lnum has already incremented
2492 except:
2496 except:
2493 next = None
2497 next = None
2494 while next and indent_re.match(next):
2498 while next and indent_re.match(next):
2495 block += next
2499 block += next
2496 lnum += 1
2500 lnum += 1
2497 try:
2501 try:
2498 next = filelines[lnum]
2502 next = filelines[lnum]
2499 except:
2503 except:
2500 next = None
2504 next = None
2501 # now execute the block of one or more lines
2505 # now execute the block of one or more lines
2502 try:
2506 try:
2503 exec block in globs,locs
2507 exec block in globs,locs
2504 except SystemExit:
2508 except SystemExit:
2505 pass
2509 pass
2506 except:
2510 except:
2507 badblocks.append(block.rstrip())
2511 badblocks.append(block.rstrip())
2508 if kw['quiet']: # restore stdout
2512 if kw['quiet']: # restore stdout
2509 sys.stdout.close()
2513 sys.stdout.close()
2510 sys.stdout = stdout_save
2514 sys.stdout = stdout_save
2511 print 'Finished replaying log file <%s>' % fname
2515 print 'Finished replaying log file <%s>' % fname
2512 if badblocks:
2516 if badblocks:
2513 print >> sys.stderr, ('\nThe following lines/blocks in file '
2517 print >> sys.stderr, ('\nThe following lines/blocks in file '
2514 '<%s> reported errors:' % fname)
2518 '<%s> reported errors:' % fname)
2515
2519
2516 for badline in badblocks:
2520 for badline in badblocks:
2517 print >> sys.stderr, badline
2521 print >> sys.stderr, badline
2518 else: # regular file execution
2522 else: # regular file execution
2519 try:
2523 try:
2520 execfile(fname,*where)
2524 execfile(fname,*where)
2521 except SyntaxError:
2525 except SyntaxError:
2522 self.showsyntaxerror()
2526 self.showsyntaxerror()
2523 warn('Failure executing file: <%s>' % fname)
2527 warn('Failure executing file: <%s>' % fname)
2524 except SystemExit,status:
2528 except SystemExit,status:
2525 if not kw['exit_ignore']:
2529 if not kw['exit_ignore']:
2526 self.showtraceback()
2530 self.showtraceback()
2527 warn('Failure executing file: <%s>' % fname)
2531 warn('Failure executing file: <%s>' % fname)
2528 except:
2532 except:
2529 self.showtraceback()
2533 self.showtraceback()
2530 warn('Failure executing file: <%s>' % fname)
2534 warn('Failure executing file: <%s>' % fname)
2531
2535
2532 syspath_cleanup()
2536 syspath_cleanup()
2533
2537
2534 #************************* end of file <iplib.py> *****************************
2538 #************************* end of file <iplib.py> *****************************
General Comments 0
You need to be logged in to leave comments. Login now