##// END OF EJS Templates
croak cleanly on non-ascii home dir names
vivainio -
Show More

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

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