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