##// END OF EJS Templates
- Fix autoindent which I had broken......
fperez -
Show More

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

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