##// END OF EJS Templates
Fix unicode handling, patch by Stefan. Closes #129
fperez -
Show More

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

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