##// END OF EJS Templates
Hooks now implement "Chain of Command" design pattern,...
vivainio -
Show More

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

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