##// END OF EJS Templates
Changed startup message, and be a bit more conservative with the settings
vivainio -
Show More

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

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