##// END OF EJS Templates
split_user_input users different pattern for splitting in alias expansion
vivainio -
Show More

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

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