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