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