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