##// END OF EJS Templates
use history_saving_wrapper to store/restore readline history
vivainio -
Show More

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

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