##// END OF EJS Templates
Fix regexp that inadvertedly broke magics with explicit % prefix.
fperez -
Show More

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

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