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