##// END OF EJS Templates
split_user_input users different pattern for splitting in alias expansion
vivainio -
Show More

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

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