##// END OF EJS Templates
define ESC_FOO consts only in inputsplitter...
MinRK -
Show More
@@ -1,933 +1,933 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 Original rlcompleter documentation:
9 Original rlcompleter documentation:
10
10
11 This requires the latest extension to the readline module (the
11 This requires the latest extension to the readline module (the
12 completes keywords, built-ins and globals in __main__; when completing
12 completes keywords, built-ins and globals in __main__; when completing
13 NAME.NAME..., it evaluates (!) the expression up to the last dot and
13 NAME.NAME..., it evaluates (!) the expression up to the last dot and
14 completes its attributes.
14 completes its attributes.
15
15
16 It's very cool to do "import string" type "string.", hit the
16 It's very cool to do "import string" type "string.", hit the
17 completion key (twice), and see the list of names defined by the
17 completion key (twice), and see the list of names defined by the
18 string module!
18 string module!
19
19
20 Tip: to use the tab key as the completion key, call
20 Tip: to use the tab key as the completion key, call
21
21
22 readline.parse_and_bind("tab: complete")
22 readline.parse_and_bind("tab: complete")
23
23
24 Notes:
24 Notes:
25
25
26 - Exceptions raised by the completer function are *ignored* (and
26 - Exceptions raised by the completer function are *ignored* (and
27 generally cause the completion to fail). This is a feature -- since
27 generally cause the completion to fail). This is a feature -- since
28 readline sets the tty device in raw (or cbreak) mode, printing a
28 readline sets the tty device in raw (or cbreak) mode, printing a
29 traceback wouldn't work well without some complicated hoopla to save,
29 traceback wouldn't work well without some complicated hoopla to save,
30 reset and restore the tty state.
30 reset and restore the tty state.
31
31
32 - The evaluation of the NAME.NAME... form may cause arbitrary
32 - The evaluation of the NAME.NAME... form may cause arbitrary
33 application defined code to be executed if an object with a
33 application defined code to be executed if an object with a
34 __getattr__ hook is found. Since it is the responsibility of the
34 __getattr__ hook is found. Since it is the responsibility of the
35 application (or the user) to enable this feature, I consider this an
35 application (or the user) to enable this feature, I consider this an
36 acceptable risk. More complicated expressions (e.g. function calls or
36 acceptable risk. More complicated expressions (e.g. function calls or
37 indexing operations) are *not* evaluated.
37 indexing operations) are *not* evaluated.
38
38
39 - GNU readline is also used by the built-in functions input() and
39 - GNU readline is also used by the built-in functions input() and
40 raw_input(), and thus these also benefit/suffer from the completer
40 raw_input(), and thus these also benefit/suffer from the completer
41 features. Clearly an interactive application can benefit by
41 features. Clearly an interactive application can benefit by
42 specifying its own completer function and using raw_input() for all
42 specifying its own completer function and using raw_input() for all
43 its input.
43 its input.
44
44
45 - When the original stdin is not a tty device, GNU readline is never
45 - When the original stdin is not a tty device, GNU readline is never
46 used, and this module (and the readline module) are silently inactive.
46 used, and this module (and the readline module) are silently inactive.
47 """
47 """
48
48
49 #*****************************************************************************
49 #*****************************************************************************
50 #
50 #
51 # Since this file is essentially a minimally modified copy of the rlcompleter
51 # Since this file is essentially a minimally modified copy of the rlcompleter
52 # module which is part of the standard Python distribution, I assume that the
52 # module which is part of the standard Python distribution, I assume that the
53 # proper procedure is to maintain its copyright as belonging to the Python
53 # proper procedure is to maintain its copyright as belonging to the Python
54 # Software Foundation (in addition to my own, for all new code).
54 # Software Foundation (in addition to my own, for all new code).
55 #
55 #
56 # Copyright (C) 2008 IPython Development Team
56 # Copyright (C) 2008 IPython Development Team
57 # Copyright (C) 2001 Fernando Perez. <fperez@colorado.edu>
57 # Copyright (C) 2001 Fernando Perez. <fperez@colorado.edu>
58 # Copyright (C) 2001 Python Software Foundation, www.python.org
58 # Copyright (C) 2001 Python Software Foundation, www.python.org
59 #
59 #
60 # Distributed under the terms of the BSD License. The full license is in
60 # Distributed under the terms of the BSD License. The full license is in
61 # the file COPYING, distributed as part of this software.
61 # the file COPYING, distributed as part of this software.
62 #
62 #
63 #*****************************************************************************
63 #*****************************************************************************
64
64
65 #-----------------------------------------------------------------------------
65 #-----------------------------------------------------------------------------
66 # Imports
66 # Imports
67 #-----------------------------------------------------------------------------
67 #-----------------------------------------------------------------------------
68
68
69 import __builtin__
69 import __builtin__
70 import __main__
70 import __main__
71 import glob
71 import glob
72 import inspect
72 import inspect
73 import itertools
73 import itertools
74 import keyword
74 import keyword
75 import os
75 import os
76 import re
76 import re
77 import shlex
77 import shlex
78 import sys
78 import sys
79
79
80 from IPython.config.configurable import Configurable
80 from IPython.config.configurable import Configurable
81 from IPython.core.error import TryNext
81 from IPython.core.error import TryNext
82 from IPython.core.prefilter import ESC_MAGIC
82 from IPython.core.inputsplitter import ESC_MAGIC
83 from IPython.utils import generics
83 from IPython.utils import generics
84 from IPython.utils import io
84 from IPython.utils import io
85 from IPython.utils.dir2 import dir2
85 from IPython.utils.dir2 import dir2
86 from IPython.utils.process import arg_split
86 from IPython.utils.process import arg_split
87 from IPython.utils.traitlets import CBool, Enum
87 from IPython.utils.traitlets import CBool, Enum
88
88
89 #-----------------------------------------------------------------------------
89 #-----------------------------------------------------------------------------
90 # Globals
90 # Globals
91 #-----------------------------------------------------------------------------
91 #-----------------------------------------------------------------------------
92
92
93 # Public API
93 # Public API
94 __all__ = ['Completer','IPCompleter']
94 __all__ = ['Completer','IPCompleter']
95
95
96 if sys.platform == 'win32':
96 if sys.platform == 'win32':
97 PROTECTABLES = ' '
97 PROTECTABLES = ' '
98 else:
98 else:
99 PROTECTABLES = ' ()[]{}?=\\|;:\'#*"^&'
99 PROTECTABLES = ' ()[]{}?=\\|;:\'#*"^&'
100
100
101 #-----------------------------------------------------------------------------
101 #-----------------------------------------------------------------------------
102 # Main functions and classes
102 # Main functions and classes
103 #-----------------------------------------------------------------------------
103 #-----------------------------------------------------------------------------
104
104
105 def has_open_quotes(s):
105 def has_open_quotes(s):
106 """Return whether a string has open quotes.
106 """Return whether a string has open quotes.
107
107
108 This simply counts whether the number of quote characters of either type in
108 This simply counts whether the number of quote characters of either type in
109 the string is odd.
109 the string is odd.
110
110
111 Returns
111 Returns
112 -------
112 -------
113 If there is an open quote, the quote character is returned. Else, return
113 If there is an open quote, the quote character is returned. Else, return
114 False.
114 False.
115 """
115 """
116 # We check " first, then ', so complex cases with nested quotes will get
116 # We check " first, then ', so complex cases with nested quotes will get
117 # the " to take precedence.
117 # the " to take precedence.
118 if s.count('"') % 2:
118 if s.count('"') % 2:
119 return '"'
119 return '"'
120 elif s.count("'") % 2:
120 elif s.count("'") % 2:
121 return "'"
121 return "'"
122 else:
122 else:
123 return False
123 return False
124
124
125
125
126 def protect_filename(s):
126 def protect_filename(s):
127 """Escape a string to protect certain characters."""
127 """Escape a string to protect certain characters."""
128
128
129 return "".join([(ch in PROTECTABLES and '\\' + ch or ch)
129 return "".join([(ch in PROTECTABLES and '\\' + ch or ch)
130 for ch in s])
130 for ch in s])
131
131
132 def expand_user(path):
132 def expand_user(path):
133 """Expand '~'-style usernames in strings.
133 """Expand '~'-style usernames in strings.
134
134
135 This is similar to :func:`os.path.expanduser`, but it computes and returns
135 This is similar to :func:`os.path.expanduser`, but it computes and returns
136 extra information that will be useful if the input was being used in
136 extra information that will be useful if the input was being used in
137 computing completions, and you wish to return the completions with the
137 computing completions, and you wish to return the completions with the
138 original '~' instead of its expanded value.
138 original '~' instead of its expanded value.
139
139
140 Parameters
140 Parameters
141 ----------
141 ----------
142 path : str
142 path : str
143 String to be expanded. If no ~ is present, the output is the same as the
143 String to be expanded. If no ~ is present, the output is the same as the
144 input.
144 input.
145
145
146 Returns
146 Returns
147 -------
147 -------
148 newpath : str
148 newpath : str
149 Result of ~ expansion in the input path.
149 Result of ~ expansion in the input path.
150 tilde_expand : bool
150 tilde_expand : bool
151 Whether any expansion was performed or not.
151 Whether any expansion was performed or not.
152 tilde_val : str
152 tilde_val : str
153 The value that ~ was replaced with.
153 The value that ~ was replaced with.
154 """
154 """
155 # Default values
155 # Default values
156 tilde_expand = False
156 tilde_expand = False
157 tilde_val = ''
157 tilde_val = ''
158 newpath = path
158 newpath = path
159
159
160 if path.startswith('~'):
160 if path.startswith('~'):
161 tilde_expand = True
161 tilde_expand = True
162 rest = len(path)-1
162 rest = len(path)-1
163 newpath = os.path.expanduser(path)
163 newpath = os.path.expanduser(path)
164 if rest:
164 if rest:
165 tilde_val = newpath[:-rest]
165 tilde_val = newpath[:-rest]
166 else:
166 else:
167 tilde_val = newpath
167 tilde_val = newpath
168
168
169 return newpath, tilde_expand, tilde_val
169 return newpath, tilde_expand, tilde_val
170
170
171
171
172 def compress_user(path, tilde_expand, tilde_val):
172 def compress_user(path, tilde_expand, tilde_val):
173 """Does the opposite of expand_user, with its outputs.
173 """Does the opposite of expand_user, with its outputs.
174 """
174 """
175 if tilde_expand:
175 if tilde_expand:
176 return path.replace(tilde_val, '~')
176 return path.replace(tilde_val, '~')
177 else:
177 else:
178 return path
178 return path
179
179
180
180
181 class Bunch(object): pass
181 class Bunch(object): pass
182
182
183
183
184 DELIMS = ' \t\n`!@#$^&*()=+[{]}\\|;:\'",<>?'
184 DELIMS = ' \t\n`!@#$^&*()=+[{]}\\|;:\'",<>?'
185 GREEDY_DELIMS = ' \r\n'
185 GREEDY_DELIMS = ' \r\n'
186
186
187
187
188 class CompletionSplitter(object):
188 class CompletionSplitter(object):
189 """An object to split an input line in a manner similar to readline.
189 """An object to split an input line in a manner similar to readline.
190
190
191 By having our own implementation, we can expose readline-like completion in
191 By having our own implementation, we can expose readline-like completion in
192 a uniform manner to all frontends. This object only needs to be given the
192 a uniform manner to all frontends. This object only needs to be given the
193 line of text to be split and the cursor position on said line, and it
193 line of text to be split and the cursor position on said line, and it
194 returns the 'word' to be completed on at the cursor after splitting the
194 returns the 'word' to be completed on at the cursor after splitting the
195 entire line.
195 entire line.
196
196
197 What characters are used as splitting delimiters can be controlled by
197 What characters are used as splitting delimiters can be controlled by
198 setting the `delims` attribute (this is a property that internally
198 setting the `delims` attribute (this is a property that internally
199 automatically builds the necessary regular expression)"""
199 automatically builds the necessary regular expression)"""
200
200
201 # Private interface
201 # Private interface
202
202
203 # A string of delimiter characters. The default value makes sense for
203 # A string of delimiter characters. The default value makes sense for
204 # IPython's most typical usage patterns.
204 # IPython's most typical usage patterns.
205 _delims = DELIMS
205 _delims = DELIMS
206
206
207 # The expression (a normal string) to be compiled into a regular expression
207 # The expression (a normal string) to be compiled into a regular expression
208 # for actual splitting. We store it as an attribute mostly for ease of
208 # for actual splitting. We store it as an attribute mostly for ease of
209 # debugging, since this type of code can be so tricky to debug.
209 # debugging, since this type of code can be so tricky to debug.
210 _delim_expr = None
210 _delim_expr = None
211
211
212 # The regular expression that does the actual splitting
212 # The regular expression that does the actual splitting
213 _delim_re = None
213 _delim_re = None
214
214
215 def __init__(self, delims=None):
215 def __init__(self, delims=None):
216 delims = CompletionSplitter._delims if delims is None else delims
216 delims = CompletionSplitter._delims if delims is None else delims
217 self.delims = delims
217 self.delims = delims
218
218
219 @property
219 @property
220 def delims(self):
220 def delims(self):
221 """Return the string of delimiter characters."""
221 """Return the string of delimiter characters."""
222 return self._delims
222 return self._delims
223
223
224 @delims.setter
224 @delims.setter
225 def delims(self, delims):
225 def delims(self, delims):
226 """Set the delimiters for line splitting."""
226 """Set the delimiters for line splitting."""
227 expr = '[' + ''.join('\\'+ c for c in delims) + ']'
227 expr = '[' + ''.join('\\'+ c for c in delims) + ']'
228 self._delim_re = re.compile(expr)
228 self._delim_re = re.compile(expr)
229 self._delims = delims
229 self._delims = delims
230 self._delim_expr = expr
230 self._delim_expr = expr
231
231
232 def split_line(self, line, cursor_pos=None):
232 def split_line(self, line, cursor_pos=None):
233 """Split a line of text with a cursor at the given position.
233 """Split a line of text with a cursor at the given position.
234 """
234 """
235 l = line if cursor_pos is None else line[:cursor_pos]
235 l = line if cursor_pos is None else line[:cursor_pos]
236 return self._delim_re.split(l)[-1]
236 return self._delim_re.split(l)[-1]
237
237
238
238
239 class Completer(Configurable):
239 class Completer(Configurable):
240
240
241 greedy = CBool(False, config=True,
241 greedy = CBool(False, config=True,
242 help="""Activate greedy completion
242 help="""Activate greedy completion
243
243
244 This will enable completion on elements of lists, results of function calls, etc.,
244 This will enable completion on elements of lists, results of function calls, etc.,
245 but can be unsafe because the code is actually evaluated on TAB.
245 but can be unsafe because the code is actually evaluated on TAB.
246 """
246 """
247 )
247 )
248
248
249
249
250 def __init__(self, namespace=None, global_namespace=None, config=None, **kwargs):
250 def __init__(self, namespace=None, global_namespace=None, config=None, **kwargs):
251 """Create a new completer for the command line.
251 """Create a new completer for the command line.
252
252
253 Completer(namespace=ns,global_namespace=ns2) -> completer instance.
253 Completer(namespace=ns,global_namespace=ns2) -> completer instance.
254
254
255 If unspecified, the default namespace where completions are performed
255 If unspecified, the default namespace where completions are performed
256 is __main__ (technically, __main__.__dict__). Namespaces should be
256 is __main__ (technically, __main__.__dict__). Namespaces should be
257 given as dictionaries.
257 given as dictionaries.
258
258
259 An optional second namespace can be given. This allows the completer
259 An optional second namespace can be given. This allows the completer
260 to handle cases where both the local and global scopes need to be
260 to handle cases where both the local and global scopes need to be
261 distinguished.
261 distinguished.
262
262
263 Completer instances should be used as the completion mechanism of
263 Completer instances should be used as the completion mechanism of
264 readline via the set_completer() call:
264 readline via the set_completer() call:
265
265
266 readline.set_completer(Completer(my_namespace).complete)
266 readline.set_completer(Completer(my_namespace).complete)
267 """
267 """
268
268
269 # Don't bind to namespace quite yet, but flag whether the user wants a
269 # Don't bind to namespace quite yet, but flag whether the user wants a
270 # specific namespace or to use __main__.__dict__. This will allow us
270 # specific namespace or to use __main__.__dict__. This will allow us
271 # to bind to __main__.__dict__ at completion time, not now.
271 # to bind to __main__.__dict__ at completion time, not now.
272 if namespace is None:
272 if namespace is None:
273 self.use_main_ns = 1
273 self.use_main_ns = 1
274 else:
274 else:
275 self.use_main_ns = 0
275 self.use_main_ns = 0
276 self.namespace = namespace
276 self.namespace = namespace
277
277
278 # The global namespace, if given, can be bound directly
278 # The global namespace, if given, can be bound directly
279 if global_namespace is None:
279 if global_namespace is None:
280 self.global_namespace = {}
280 self.global_namespace = {}
281 else:
281 else:
282 self.global_namespace = global_namespace
282 self.global_namespace = global_namespace
283
283
284 super(Completer, self).__init__(config=config, **kwargs)
284 super(Completer, self).__init__(config=config, **kwargs)
285
285
286 def complete(self, text, state):
286 def complete(self, text, state):
287 """Return the next possible completion for 'text'.
287 """Return the next possible completion for 'text'.
288
288
289 This is called successively with state == 0, 1, 2, ... until it
289 This is called successively with state == 0, 1, 2, ... until it
290 returns None. The completion should begin with 'text'.
290 returns None. The completion should begin with 'text'.
291
291
292 """
292 """
293 if self.use_main_ns:
293 if self.use_main_ns:
294 self.namespace = __main__.__dict__
294 self.namespace = __main__.__dict__
295
295
296 if state == 0:
296 if state == 0:
297 if "." in text:
297 if "." in text:
298 self.matches = self.attr_matches(text)
298 self.matches = self.attr_matches(text)
299 else:
299 else:
300 self.matches = self.global_matches(text)
300 self.matches = self.global_matches(text)
301 try:
301 try:
302 return self.matches[state]
302 return self.matches[state]
303 except IndexError:
303 except IndexError:
304 return None
304 return None
305
305
306 def global_matches(self, text):
306 def global_matches(self, text):
307 """Compute matches when text is a simple name.
307 """Compute matches when text is a simple name.
308
308
309 Return a list of all keywords, built-in functions and names currently
309 Return a list of all keywords, built-in functions and names currently
310 defined in self.namespace or self.global_namespace that match.
310 defined in self.namespace or self.global_namespace that match.
311
311
312 """
312 """
313 #print 'Completer->global_matches, txt=%r' % text # dbg
313 #print 'Completer->global_matches, txt=%r' % text # dbg
314 matches = []
314 matches = []
315 match_append = matches.append
315 match_append = matches.append
316 n = len(text)
316 n = len(text)
317 for lst in [keyword.kwlist,
317 for lst in [keyword.kwlist,
318 __builtin__.__dict__.keys(),
318 __builtin__.__dict__.keys(),
319 self.namespace.keys(),
319 self.namespace.keys(),
320 self.global_namespace.keys()]:
320 self.global_namespace.keys()]:
321 for word in lst:
321 for word in lst:
322 if word[:n] == text and word != "__builtins__":
322 if word[:n] == text and word != "__builtins__":
323 match_append(word)
323 match_append(word)
324 return matches
324 return matches
325
325
326 def attr_matches(self, text):
326 def attr_matches(self, text):
327 """Compute matches when text contains a dot.
327 """Compute matches when text contains a dot.
328
328
329 Assuming the text is of the form NAME.NAME....[NAME], and is
329 Assuming the text is of the form NAME.NAME....[NAME], and is
330 evaluatable in self.namespace or self.global_namespace, it will be
330 evaluatable in self.namespace or self.global_namespace, it will be
331 evaluated and its attributes (as revealed by dir()) are used as
331 evaluated and its attributes (as revealed by dir()) are used as
332 possible completions. (For class instances, class members are are
332 possible completions. (For class instances, class members are are
333 also considered.)
333 also considered.)
334
334
335 WARNING: this can still invoke arbitrary C code, if an object
335 WARNING: this can still invoke arbitrary C code, if an object
336 with a __getattr__ hook is evaluated.
336 with a __getattr__ hook is evaluated.
337
337
338 """
338 """
339
339
340 #io.rprint('Completer->attr_matches, txt=%r' % text) # dbg
340 #io.rprint('Completer->attr_matches, txt=%r' % text) # dbg
341 # Another option, seems to work great. Catches things like ''.<tab>
341 # Another option, seems to work great. Catches things like ''.<tab>
342 m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text)
342 m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text)
343
343
344 if m:
344 if m:
345 expr, attr = m.group(1, 3)
345 expr, attr = m.group(1, 3)
346 elif self.greedy:
346 elif self.greedy:
347 m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer)
347 m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer)
348 if not m2:
348 if not m2:
349 return []
349 return []
350 expr, attr = m2.group(1,2)
350 expr, attr = m2.group(1,2)
351 else:
351 else:
352 return []
352 return []
353
353
354 try:
354 try:
355 obj = eval(expr, self.namespace)
355 obj = eval(expr, self.namespace)
356 except:
356 except:
357 try:
357 try:
358 obj = eval(expr, self.global_namespace)
358 obj = eval(expr, self.global_namespace)
359 except:
359 except:
360 return []
360 return []
361
361
362 if self.limit_to__all__ and hasattr(obj, '__all__'):
362 if self.limit_to__all__ and hasattr(obj, '__all__'):
363 words = get__all__entries(obj)
363 words = get__all__entries(obj)
364 else:
364 else:
365 words = dir2(obj)
365 words = dir2(obj)
366
366
367 try:
367 try:
368 words = generics.complete_object(obj, words)
368 words = generics.complete_object(obj, words)
369 except TryNext:
369 except TryNext:
370 pass
370 pass
371 except Exception:
371 except Exception:
372 # Silence errors from completion function
372 # Silence errors from completion function
373 #raise # dbg
373 #raise # dbg
374 pass
374 pass
375 # Build match list to return
375 # Build match list to return
376 n = len(attr)
376 n = len(attr)
377 res = ["%s.%s" % (expr, w) for w in words if w[:n] == attr ]
377 res = ["%s.%s" % (expr, w) for w in words if w[:n] == attr ]
378 return res
378 return res
379
379
380
380
381 def get__all__entries(obj):
381 def get__all__entries(obj):
382 """returns the strings in the __all__ attribute"""
382 """returns the strings in the __all__ attribute"""
383 try:
383 try:
384 words = getattr(obj, '__all__')
384 words = getattr(obj, '__all__')
385 except:
385 except:
386 return []
386 return []
387
387
388 return [w for w in words if isinstance(w, basestring)]
388 return [w for w in words if isinstance(w, basestring)]
389
389
390
390
391 class IPCompleter(Completer):
391 class IPCompleter(Completer):
392 """Extension of the completer class with IPython-specific features"""
392 """Extension of the completer class with IPython-specific features"""
393
393
394 def _greedy_changed(self, name, old, new):
394 def _greedy_changed(self, name, old, new):
395 """update the splitter and readline delims when greedy is changed"""
395 """update the splitter and readline delims when greedy is changed"""
396 if new:
396 if new:
397 self.splitter.delims = GREEDY_DELIMS
397 self.splitter.delims = GREEDY_DELIMS
398 else:
398 else:
399 self.splitter.delims = DELIMS
399 self.splitter.delims = DELIMS
400
400
401 if self.readline:
401 if self.readline:
402 self.readline.set_completer_delims(self.splitter.delims)
402 self.readline.set_completer_delims(self.splitter.delims)
403
403
404 merge_completions = CBool(True, config=True,
404 merge_completions = CBool(True, config=True,
405 help="""Whether to merge completion results into a single list
405 help="""Whether to merge completion results into a single list
406
406
407 If False, only the completion results from the first non-empty
407 If False, only the completion results from the first non-empty
408 completer will be returned.
408 completer will be returned.
409 """
409 """
410 )
410 )
411 omit__names = Enum((0,1,2), default_value=2, config=True,
411 omit__names = Enum((0,1,2), default_value=2, config=True,
412 help="""Instruct the completer to omit private method names
412 help="""Instruct the completer to omit private method names
413
413
414 Specifically, when completing on ``object.<tab>``.
414 Specifically, when completing on ``object.<tab>``.
415
415
416 When 2 [default]: all names that start with '_' will be excluded.
416 When 2 [default]: all names that start with '_' will be excluded.
417
417
418 When 1: all 'magic' names (``__foo__``) will be excluded.
418 When 1: all 'magic' names (``__foo__``) will be excluded.
419
419
420 When 0: nothing will be excluded.
420 When 0: nothing will be excluded.
421 """
421 """
422 )
422 )
423 limit_to__all__ = CBool(default_value=False, config=True,
423 limit_to__all__ = CBool(default_value=False, config=True,
424 help="""Instruct the completer to use __all__ for the completion
424 help="""Instruct the completer to use __all__ for the completion
425
425
426 Specifically, when completing on ``object.<tab>``.
426 Specifically, when completing on ``object.<tab>``.
427
427
428 When True: only those names in obj.__all__ will be included.
428 When True: only those names in obj.__all__ will be included.
429
429
430 When False [default]: the __all__ attribute is ignored
430 When False [default]: the __all__ attribute is ignored
431 """
431 """
432 )
432 )
433
433
434 def __init__(self, shell=None, namespace=None, global_namespace=None,
434 def __init__(self, shell=None, namespace=None, global_namespace=None,
435 alias_table=None, use_readline=True,
435 alias_table=None, use_readline=True,
436 config=None, **kwargs):
436 config=None, **kwargs):
437 """IPCompleter() -> completer
437 """IPCompleter() -> completer
438
438
439 Return a completer object suitable for use by the readline library
439 Return a completer object suitable for use by the readline library
440 via readline.set_completer().
440 via readline.set_completer().
441
441
442 Inputs:
442 Inputs:
443
443
444 - shell: a pointer to the ipython shell itself. This is needed
444 - shell: a pointer to the ipython shell itself. This is needed
445 because this completer knows about magic functions, and those can
445 because this completer knows about magic functions, and those can
446 only be accessed via the ipython instance.
446 only be accessed via the ipython instance.
447
447
448 - namespace: an optional dict where completions are performed.
448 - namespace: an optional dict where completions are performed.
449
449
450 - global_namespace: secondary optional dict for completions, to
450 - global_namespace: secondary optional dict for completions, to
451 handle cases (such as IPython embedded inside functions) where
451 handle cases (such as IPython embedded inside functions) where
452 both Python scopes are visible.
452 both Python scopes are visible.
453
453
454 - If alias_table is supplied, it should be a dictionary of aliases
454 - If alias_table is supplied, it should be a dictionary of aliases
455 to complete.
455 to complete.
456
456
457 use_readline : bool, optional
457 use_readline : bool, optional
458 If true, use the readline library. This completer can still function
458 If true, use the readline library. This completer can still function
459 without readline, though in that case callers must provide some extra
459 without readline, though in that case callers must provide some extra
460 information on each call about the current line."""
460 information on each call about the current line."""
461
461
462 self.magic_escape = ESC_MAGIC
462 self.magic_escape = ESC_MAGIC
463 self.splitter = CompletionSplitter()
463 self.splitter = CompletionSplitter()
464
464
465 # Readline configuration, only used by the rlcompleter method.
465 # Readline configuration, only used by the rlcompleter method.
466 if use_readline:
466 if use_readline:
467 # We store the right version of readline so that later code
467 # We store the right version of readline so that later code
468 import IPython.utils.rlineimpl as readline
468 import IPython.utils.rlineimpl as readline
469 self.readline = readline
469 self.readline = readline
470 else:
470 else:
471 self.readline = None
471 self.readline = None
472
472
473 # _greedy_changed() depends on splitter and readline being defined:
473 # _greedy_changed() depends on splitter and readline being defined:
474 Completer.__init__(self, namespace=namespace, global_namespace=global_namespace,
474 Completer.__init__(self, namespace=namespace, global_namespace=global_namespace,
475 config=config, **kwargs)
475 config=config, **kwargs)
476
476
477 # List where completion matches will be stored
477 # List where completion matches will be stored
478 self.matches = []
478 self.matches = []
479 self.shell = shell
479 self.shell = shell
480 if alias_table is None:
480 if alias_table is None:
481 alias_table = {}
481 alias_table = {}
482 self.alias_table = alias_table
482 self.alias_table = alias_table
483 # Regexp to split filenames with spaces in them
483 # Regexp to split filenames with spaces in them
484 self.space_name_re = re.compile(r'([^\\] )')
484 self.space_name_re = re.compile(r'([^\\] )')
485 # Hold a local ref. to glob.glob for speed
485 # Hold a local ref. to glob.glob for speed
486 self.glob = glob.glob
486 self.glob = glob.glob
487
487
488 # Determine if we are running on 'dumb' terminals, like (X)Emacs
488 # Determine if we are running on 'dumb' terminals, like (X)Emacs
489 # buffers, to avoid completion problems.
489 # buffers, to avoid completion problems.
490 term = os.environ.get('TERM','xterm')
490 term = os.environ.get('TERM','xterm')
491 self.dumb_terminal = term in ['dumb','emacs']
491 self.dumb_terminal = term in ['dumb','emacs']
492
492
493 # Special handling of backslashes needed in win32 platforms
493 # Special handling of backslashes needed in win32 platforms
494 if sys.platform == "win32":
494 if sys.platform == "win32":
495 self.clean_glob = self._clean_glob_win32
495 self.clean_glob = self._clean_glob_win32
496 else:
496 else:
497 self.clean_glob = self._clean_glob
497 self.clean_glob = self._clean_glob
498
498
499 # All active matcher routines for completion
499 # All active matcher routines for completion
500 self.matchers = [self.python_matches,
500 self.matchers = [self.python_matches,
501 self.file_matches,
501 self.file_matches,
502 self.magic_matches,
502 self.magic_matches,
503 self.alias_matches,
503 self.alias_matches,
504 self.python_func_kw_matches,
504 self.python_func_kw_matches,
505 ]
505 ]
506
506
507 def all_completions(self, text):
507 def all_completions(self, text):
508 """
508 """
509 Wrapper around the complete method for the benefit of emacs
509 Wrapper around the complete method for the benefit of emacs
510 and pydb.
510 and pydb.
511 """
511 """
512 return self.complete(text)[1]
512 return self.complete(text)[1]
513
513
514 def _clean_glob(self,text):
514 def _clean_glob(self,text):
515 return self.glob("%s*" % text)
515 return self.glob("%s*" % text)
516
516
517 def _clean_glob_win32(self,text):
517 def _clean_glob_win32(self,text):
518 return [f.replace("\\","/")
518 return [f.replace("\\","/")
519 for f in self.glob("%s*" % text)]
519 for f in self.glob("%s*" % text)]
520
520
521 def file_matches(self, text):
521 def file_matches(self, text):
522 """Match filenames, expanding ~USER type strings.
522 """Match filenames, expanding ~USER type strings.
523
523
524 Most of the seemingly convoluted logic in this completer is an
524 Most of the seemingly convoluted logic in this completer is an
525 attempt to handle filenames with spaces in them. And yet it's not
525 attempt to handle filenames with spaces in them. And yet it's not
526 quite perfect, because Python's readline doesn't expose all of the
526 quite perfect, because Python's readline doesn't expose all of the
527 GNU readline details needed for this to be done correctly.
527 GNU readline details needed for this to be done correctly.
528
528
529 For a filename with a space in it, the printed completions will be
529 For a filename with a space in it, the printed completions will be
530 only the parts after what's already been typed (instead of the
530 only the parts after what's already been typed (instead of the
531 full completions, as is normally done). I don't think with the
531 full completions, as is normally done). I don't think with the
532 current (as of Python 2.3) Python readline it's possible to do
532 current (as of Python 2.3) Python readline it's possible to do
533 better."""
533 better."""
534
534
535 #io.rprint('Completer->file_matches: <%r>' % text) # dbg
535 #io.rprint('Completer->file_matches: <%r>' % text) # dbg
536
536
537 # chars that require escaping with backslash - i.e. chars
537 # chars that require escaping with backslash - i.e. chars
538 # that readline treats incorrectly as delimiters, but we
538 # that readline treats incorrectly as delimiters, but we
539 # don't want to treat as delimiters in filename matching
539 # don't want to treat as delimiters in filename matching
540 # when escaped with backslash
540 # when escaped with backslash
541 if text.startswith('!'):
541 if text.startswith('!'):
542 text = text[1:]
542 text = text[1:]
543 text_prefix = '!'
543 text_prefix = '!'
544 else:
544 else:
545 text_prefix = ''
545 text_prefix = ''
546
546
547 text_until_cursor = self.text_until_cursor
547 text_until_cursor = self.text_until_cursor
548 # track strings with open quotes
548 # track strings with open quotes
549 open_quotes = has_open_quotes(text_until_cursor)
549 open_quotes = has_open_quotes(text_until_cursor)
550
550
551 if '(' in text_until_cursor or '[' in text_until_cursor:
551 if '(' in text_until_cursor or '[' in text_until_cursor:
552 lsplit = text
552 lsplit = text
553 else:
553 else:
554 try:
554 try:
555 # arg_split ~ shlex.split, but with unicode bugs fixed by us
555 # arg_split ~ shlex.split, but with unicode bugs fixed by us
556 lsplit = arg_split(text_until_cursor)[-1]
556 lsplit = arg_split(text_until_cursor)[-1]
557 except ValueError:
557 except ValueError:
558 # typically an unmatched ", or backslash without escaped char.
558 # typically an unmatched ", or backslash without escaped char.
559 if open_quotes:
559 if open_quotes:
560 lsplit = text_until_cursor.split(open_quotes)[-1]
560 lsplit = text_until_cursor.split(open_quotes)[-1]
561 else:
561 else:
562 return []
562 return []
563 except IndexError:
563 except IndexError:
564 # tab pressed on empty line
564 # tab pressed on empty line
565 lsplit = ""
565 lsplit = ""
566
566
567 if not open_quotes and lsplit != protect_filename(lsplit):
567 if not open_quotes and lsplit != protect_filename(lsplit):
568 # if protectables are found, do matching on the whole escaped name
568 # if protectables are found, do matching on the whole escaped name
569 has_protectables = True
569 has_protectables = True
570 text0,text = text,lsplit
570 text0,text = text,lsplit
571 else:
571 else:
572 has_protectables = False
572 has_protectables = False
573 text = os.path.expanduser(text)
573 text = os.path.expanduser(text)
574
574
575 if text == "":
575 if text == "":
576 return [text_prefix + protect_filename(f) for f in self.glob("*")]
576 return [text_prefix + protect_filename(f) for f in self.glob("*")]
577
577
578 # Compute the matches from the filesystem
578 # Compute the matches from the filesystem
579 m0 = self.clean_glob(text.replace('\\',''))
579 m0 = self.clean_glob(text.replace('\\',''))
580
580
581 if has_protectables:
581 if has_protectables:
582 # If we had protectables, we need to revert our changes to the
582 # If we had protectables, we need to revert our changes to the
583 # beginning of filename so that we don't double-write the part
583 # beginning of filename so that we don't double-write the part
584 # of the filename we have so far
584 # of the filename we have so far
585 len_lsplit = len(lsplit)
585 len_lsplit = len(lsplit)
586 matches = [text_prefix + text0 +
586 matches = [text_prefix + text0 +
587 protect_filename(f[len_lsplit:]) for f in m0]
587 protect_filename(f[len_lsplit:]) for f in m0]
588 else:
588 else:
589 if open_quotes:
589 if open_quotes:
590 # if we have a string with an open quote, we don't need to
590 # if we have a string with an open quote, we don't need to
591 # protect the names at all (and we _shouldn't_, as it
591 # protect the names at all (and we _shouldn't_, as it
592 # would cause bugs when the filesystem call is made).
592 # would cause bugs when the filesystem call is made).
593 matches = m0
593 matches = m0
594 else:
594 else:
595 matches = [text_prefix +
595 matches = [text_prefix +
596 protect_filename(f) for f in m0]
596 protect_filename(f) for f in m0]
597
597
598 #io.rprint('mm', matches) # dbg
598 #io.rprint('mm', matches) # dbg
599
599
600 # Mark directories in input list by appending '/' to their names.
600 # Mark directories in input list by appending '/' to their names.
601 matches = [x+'/' if os.path.isdir(x) else x for x in matches]
601 matches = [x+'/' if os.path.isdir(x) else x for x in matches]
602 return matches
602 return matches
603
603
604 def magic_matches(self, text):
604 def magic_matches(self, text):
605 """Match magics"""
605 """Match magics"""
606 #print 'Completer->magic_matches:',text,'lb',self.text_until_cursor # dbg
606 #print 'Completer->magic_matches:',text,'lb',self.text_until_cursor # dbg
607 # Get all shell magics now rather than statically, so magics loaded at
607 # Get all shell magics now rather than statically, so magics loaded at
608 # runtime show up too.
608 # runtime show up too.
609 lsm = self.shell.magics_manager.lsmagic()
609 lsm = self.shell.magics_manager.lsmagic()
610 line_magics = lsm['line']
610 line_magics = lsm['line']
611 cell_magics = lsm['cell']
611 cell_magics = lsm['cell']
612 pre = self.magic_escape
612 pre = self.magic_escape
613 pre2 = pre+pre
613 pre2 = pre+pre
614
614
615 # Completion logic:
615 # Completion logic:
616 # - user gives %%: only do cell magics
616 # - user gives %%: only do cell magics
617 # - user gives %: do both line and cell magics
617 # - user gives %: do both line and cell magics
618 # - no prefix: do both
618 # - no prefix: do both
619 # In other words, line magics are skipped if the user gives %% explicitly
619 # In other words, line magics are skipped if the user gives %% explicitly
620 bare_text = text.lstrip(pre)
620 bare_text = text.lstrip(pre)
621 comp = [ pre2+m for m in cell_magics if m.startswith(bare_text)]
621 comp = [ pre2+m for m in cell_magics if m.startswith(bare_text)]
622 if not text.startswith(pre2):
622 if not text.startswith(pre2):
623 comp += [ pre+m for m in line_magics if m.startswith(bare_text)]
623 comp += [ pre+m for m in line_magics if m.startswith(bare_text)]
624 return comp
624 return comp
625
625
626 def alias_matches(self, text):
626 def alias_matches(self, text):
627 """Match internal system aliases"""
627 """Match internal system aliases"""
628 #print 'Completer->alias_matches:',text,'lb',self.text_until_cursor # dbg
628 #print 'Completer->alias_matches:',text,'lb',self.text_until_cursor # dbg
629
629
630 # if we are not in the first 'item', alias matching
630 # if we are not in the first 'item', alias matching
631 # doesn't make sense - unless we are starting with 'sudo' command.
631 # doesn't make sense - unless we are starting with 'sudo' command.
632 main_text = self.text_until_cursor.lstrip()
632 main_text = self.text_until_cursor.lstrip()
633 if ' ' in main_text and not main_text.startswith('sudo'):
633 if ' ' in main_text and not main_text.startswith('sudo'):
634 return []
634 return []
635 text = os.path.expanduser(text)
635 text = os.path.expanduser(text)
636 aliases = self.alias_table.keys()
636 aliases = self.alias_table.keys()
637 if text == '':
637 if text == '':
638 return aliases
638 return aliases
639 else:
639 else:
640 return [a for a in aliases if a.startswith(text)]
640 return [a for a in aliases if a.startswith(text)]
641
641
642 def python_matches(self,text):
642 def python_matches(self,text):
643 """Match attributes or global python names"""
643 """Match attributes or global python names"""
644
644
645 #io.rprint('Completer->python_matches, txt=%r' % text) # dbg
645 #io.rprint('Completer->python_matches, txt=%r' % text) # dbg
646 if "." in text:
646 if "." in text:
647 try:
647 try:
648 matches = self.attr_matches(text)
648 matches = self.attr_matches(text)
649 if text.endswith('.') and self.omit__names:
649 if text.endswith('.') and self.omit__names:
650 if self.omit__names == 1:
650 if self.omit__names == 1:
651 # true if txt is _not_ a __ name, false otherwise:
651 # true if txt is _not_ a __ name, false otherwise:
652 no__name = (lambda txt:
652 no__name = (lambda txt:
653 re.match(r'.*\.__.*?__',txt) is None)
653 re.match(r'.*\.__.*?__',txt) is None)
654 else:
654 else:
655 # true if txt is _not_ a _ name, false otherwise:
655 # true if txt is _not_ a _ name, false otherwise:
656 no__name = (lambda txt:
656 no__name = (lambda txt:
657 re.match(r'.*\._.*?',txt) is None)
657 re.match(r'.*\._.*?',txt) is None)
658 matches = filter(no__name, matches)
658 matches = filter(no__name, matches)
659 except NameError:
659 except NameError:
660 # catches <undefined attributes>.<tab>
660 # catches <undefined attributes>.<tab>
661 matches = []
661 matches = []
662 else:
662 else:
663 matches = self.global_matches(text)
663 matches = self.global_matches(text)
664
664
665 return matches
665 return matches
666
666
667 def _default_arguments(self, obj):
667 def _default_arguments(self, obj):
668 """Return the list of default arguments of obj if it is callable,
668 """Return the list of default arguments of obj if it is callable,
669 or empty list otherwise."""
669 or empty list otherwise."""
670
670
671 if not (inspect.isfunction(obj) or inspect.ismethod(obj)):
671 if not (inspect.isfunction(obj) or inspect.ismethod(obj)):
672 # for classes, check for __init__,__new__
672 # for classes, check for __init__,__new__
673 if inspect.isclass(obj):
673 if inspect.isclass(obj):
674 obj = (getattr(obj,'__init__',None) or
674 obj = (getattr(obj,'__init__',None) or
675 getattr(obj,'__new__',None))
675 getattr(obj,'__new__',None))
676 # for all others, check if they are __call__able
676 # for all others, check if they are __call__able
677 elif hasattr(obj, '__call__'):
677 elif hasattr(obj, '__call__'):
678 obj = obj.__call__
678 obj = obj.__call__
679 # XXX: is there a way to handle the builtins ?
679 # XXX: is there a way to handle the builtins ?
680 try:
680 try:
681 args,_,_1,defaults = inspect.getargspec(obj)
681 args,_,_1,defaults = inspect.getargspec(obj)
682 if defaults:
682 if defaults:
683 return args[-len(defaults):]
683 return args[-len(defaults):]
684 except TypeError: pass
684 except TypeError: pass
685 return []
685 return []
686
686
687 def python_func_kw_matches(self,text):
687 def python_func_kw_matches(self,text):
688 """Match named parameters (kwargs) of the last open function"""
688 """Match named parameters (kwargs) of the last open function"""
689
689
690 if "." in text: # a parameter cannot be dotted
690 if "." in text: # a parameter cannot be dotted
691 return []
691 return []
692 try: regexp = self.__funcParamsRegex
692 try: regexp = self.__funcParamsRegex
693 except AttributeError:
693 except AttributeError:
694 regexp = self.__funcParamsRegex = re.compile(r'''
694 regexp = self.__funcParamsRegex = re.compile(r'''
695 '.*?' | # single quoted strings or
695 '.*?' | # single quoted strings or
696 ".*?" | # double quoted strings or
696 ".*?" | # double quoted strings or
697 \w+ | # identifier
697 \w+ | # identifier
698 \S # other characters
698 \S # other characters
699 ''', re.VERBOSE | re.DOTALL)
699 ''', re.VERBOSE | re.DOTALL)
700 # 1. find the nearest identifier that comes before an unclosed
700 # 1. find the nearest identifier that comes before an unclosed
701 # parenthesis before the cursor
701 # parenthesis before the cursor
702 # e.g. for "foo (1+bar(x), pa<cursor>,a=1)", the candidate is "foo"
702 # e.g. for "foo (1+bar(x), pa<cursor>,a=1)", the candidate is "foo"
703 tokens = regexp.findall(self.text_until_cursor)
703 tokens = regexp.findall(self.text_until_cursor)
704 tokens.reverse()
704 tokens.reverse()
705 iterTokens = iter(tokens); openPar = 0
705 iterTokens = iter(tokens); openPar = 0
706 for token in iterTokens:
706 for token in iterTokens:
707 if token == ')':
707 if token == ')':
708 openPar -= 1
708 openPar -= 1
709 elif token == '(':
709 elif token == '(':
710 openPar += 1
710 openPar += 1
711 if openPar > 0:
711 if openPar > 0:
712 # found the last unclosed parenthesis
712 # found the last unclosed parenthesis
713 break
713 break
714 else:
714 else:
715 return []
715 return []
716 # 2. Concatenate dotted names ("foo.bar" for "foo.bar(x, pa" )
716 # 2. Concatenate dotted names ("foo.bar" for "foo.bar(x, pa" )
717 ids = []
717 ids = []
718 isId = re.compile(r'\w+$').match
718 isId = re.compile(r'\w+$').match
719 while True:
719 while True:
720 try:
720 try:
721 ids.append(iterTokens.next())
721 ids.append(iterTokens.next())
722 if not isId(ids[-1]):
722 if not isId(ids[-1]):
723 ids.pop(); break
723 ids.pop(); break
724 if not iterTokens.next() == '.':
724 if not iterTokens.next() == '.':
725 break
725 break
726 except StopIteration:
726 except StopIteration:
727 break
727 break
728 # lookup the candidate callable matches either using global_matches
728 # lookup the candidate callable matches either using global_matches
729 # or attr_matches for dotted names
729 # or attr_matches for dotted names
730 if len(ids) == 1:
730 if len(ids) == 1:
731 callableMatches = self.global_matches(ids[0])
731 callableMatches = self.global_matches(ids[0])
732 else:
732 else:
733 callableMatches = self.attr_matches('.'.join(ids[::-1]))
733 callableMatches = self.attr_matches('.'.join(ids[::-1]))
734 argMatches = []
734 argMatches = []
735 for callableMatch in callableMatches:
735 for callableMatch in callableMatches:
736 try:
736 try:
737 namedArgs = self._default_arguments(eval(callableMatch,
737 namedArgs = self._default_arguments(eval(callableMatch,
738 self.namespace))
738 self.namespace))
739 except:
739 except:
740 continue
740 continue
741 for namedArg in namedArgs:
741 for namedArg in namedArgs:
742 if namedArg.startswith(text):
742 if namedArg.startswith(text):
743 argMatches.append("%s=" %namedArg)
743 argMatches.append("%s=" %namedArg)
744 return argMatches
744 return argMatches
745
745
746 def dispatch_custom_completer(self, text):
746 def dispatch_custom_completer(self, text):
747 #io.rprint("Custom! '%s' %s" % (text, self.custom_completers)) # dbg
747 #io.rprint("Custom! '%s' %s" % (text, self.custom_completers)) # dbg
748 line = self.line_buffer
748 line = self.line_buffer
749 if not line.strip():
749 if not line.strip():
750 return None
750 return None
751
751
752 # Create a little structure to pass all the relevant information about
752 # Create a little structure to pass all the relevant information about
753 # the current completion to any custom completer.
753 # the current completion to any custom completer.
754 event = Bunch()
754 event = Bunch()
755 event.line = line
755 event.line = line
756 event.symbol = text
756 event.symbol = text
757 cmd = line.split(None,1)[0]
757 cmd = line.split(None,1)[0]
758 event.command = cmd
758 event.command = cmd
759 event.text_until_cursor = self.text_until_cursor
759 event.text_until_cursor = self.text_until_cursor
760
760
761 #print "\ncustom:{%s]\n" % event # dbg
761 #print "\ncustom:{%s]\n" % event # dbg
762
762
763 # for foo etc, try also to find completer for %foo
763 # for foo etc, try also to find completer for %foo
764 if not cmd.startswith(self.magic_escape):
764 if not cmd.startswith(self.magic_escape):
765 try_magic = self.custom_completers.s_matches(
765 try_magic = self.custom_completers.s_matches(
766 self.magic_escape + cmd)
766 self.magic_escape + cmd)
767 else:
767 else:
768 try_magic = []
768 try_magic = []
769
769
770 for c in itertools.chain(self.custom_completers.s_matches(cmd),
770 for c in itertools.chain(self.custom_completers.s_matches(cmd),
771 try_magic,
771 try_magic,
772 self.custom_completers.flat_matches(self.text_until_cursor)):
772 self.custom_completers.flat_matches(self.text_until_cursor)):
773 #print "try",c # dbg
773 #print "try",c # dbg
774 try:
774 try:
775 res = c(event)
775 res = c(event)
776 if res:
776 if res:
777 # first, try case sensitive match
777 # first, try case sensitive match
778 withcase = [r for r in res if r.startswith(text)]
778 withcase = [r for r in res if r.startswith(text)]
779 if withcase:
779 if withcase:
780 return withcase
780 return withcase
781 # if none, then case insensitive ones are ok too
781 # if none, then case insensitive ones are ok too
782 text_low = text.lower()
782 text_low = text.lower()
783 return [r for r in res if r.lower().startswith(text_low)]
783 return [r for r in res if r.lower().startswith(text_low)]
784 except TryNext:
784 except TryNext:
785 pass
785 pass
786
786
787 return None
787 return None
788
788
789 def complete(self, text=None, line_buffer=None, cursor_pos=None):
789 def complete(self, text=None, line_buffer=None, cursor_pos=None):
790 """Find completions for the given text and line context.
790 """Find completions for the given text and line context.
791
791
792 This is called successively with state == 0, 1, 2, ... until it
792 This is called successively with state == 0, 1, 2, ... until it
793 returns None. The completion should begin with 'text'.
793 returns None. The completion should begin with 'text'.
794
794
795 Note that both the text and the line_buffer are optional, but at least
795 Note that both the text and the line_buffer are optional, but at least
796 one of them must be given.
796 one of them must be given.
797
797
798 Parameters
798 Parameters
799 ----------
799 ----------
800 text : string, optional
800 text : string, optional
801 Text to perform the completion on. If not given, the line buffer
801 Text to perform the completion on. If not given, the line buffer
802 is split using the instance's CompletionSplitter object.
802 is split using the instance's CompletionSplitter object.
803
803
804 line_buffer : string, optional
804 line_buffer : string, optional
805 If not given, the completer attempts to obtain the current line
805 If not given, the completer attempts to obtain the current line
806 buffer via readline. This keyword allows clients which are
806 buffer via readline. This keyword allows clients which are
807 requesting for text completions in non-readline contexts to inform
807 requesting for text completions in non-readline contexts to inform
808 the completer of the entire text.
808 the completer of the entire text.
809
809
810 cursor_pos : int, optional
810 cursor_pos : int, optional
811 Index of the cursor in the full line buffer. Should be provided by
811 Index of the cursor in the full line buffer. Should be provided by
812 remote frontends where kernel has no access to frontend state.
812 remote frontends where kernel has no access to frontend state.
813
813
814 Returns
814 Returns
815 -------
815 -------
816 text : str
816 text : str
817 Text that was actually used in the completion.
817 Text that was actually used in the completion.
818
818
819 matches : list
819 matches : list
820 A list of completion matches.
820 A list of completion matches.
821 """
821 """
822 #io.rprint('\nCOMP1 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
822 #io.rprint('\nCOMP1 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
823
823
824 # if the cursor position isn't given, the only sane assumption we can
824 # if the cursor position isn't given, the only sane assumption we can
825 # make is that it's at the end of the line (the common case)
825 # make is that it's at the end of the line (the common case)
826 if cursor_pos is None:
826 if cursor_pos is None:
827 cursor_pos = len(line_buffer) if text is None else len(text)
827 cursor_pos = len(line_buffer) if text is None else len(text)
828
828
829 # if text is either None or an empty string, rely on the line buffer
829 # if text is either None or an empty string, rely on the line buffer
830 if not text:
830 if not text:
831 text = self.splitter.split_line(line_buffer, cursor_pos)
831 text = self.splitter.split_line(line_buffer, cursor_pos)
832
832
833 # If no line buffer is given, assume the input text is all there was
833 # If no line buffer is given, assume the input text is all there was
834 if line_buffer is None:
834 if line_buffer is None:
835 line_buffer = text
835 line_buffer = text
836
836
837 self.line_buffer = line_buffer
837 self.line_buffer = line_buffer
838 self.text_until_cursor = self.line_buffer[:cursor_pos]
838 self.text_until_cursor = self.line_buffer[:cursor_pos]
839 #io.rprint('COMP2 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
839 #io.rprint('COMP2 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
840
840
841 # Start with a clean slate of completions
841 # Start with a clean slate of completions
842 self.matches[:] = []
842 self.matches[:] = []
843 custom_res = self.dispatch_custom_completer(text)
843 custom_res = self.dispatch_custom_completer(text)
844 if custom_res is not None:
844 if custom_res is not None:
845 # did custom completers produce something?
845 # did custom completers produce something?
846 self.matches = custom_res
846 self.matches = custom_res
847 else:
847 else:
848 # Extend the list of completions with the results of each
848 # Extend the list of completions with the results of each
849 # matcher, so we return results to the user from all
849 # matcher, so we return results to the user from all
850 # namespaces.
850 # namespaces.
851 if self.merge_completions:
851 if self.merge_completions:
852 self.matches = []
852 self.matches = []
853 for matcher in self.matchers:
853 for matcher in self.matchers:
854 try:
854 try:
855 self.matches.extend(matcher(text))
855 self.matches.extend(matcher(text))
856 except:
856 except:
857 # Show the ugly traceback if the matcher causes an
857 # Show the ugly traceback if the matcher causes an
858 # exception, but do NOT crash the kernel!
858 # exception, but do NOT crash the kernel!
859 sys.excepthook(*sys.exc_info())
859 sys.excepthook(*sys.exc_info())
860 else:
860 else:
861 for matcher in self.matchers:
861 for matcher in self.matchers:
862 self.matches = matcher(text)
862 self.matches = matcher(text)
863 if self.matches:
863 if self.matches:
864 break
864 break
865 # FIXME: we should extend our api to return a dict with completions for
865 # FIXME: we should extend our api to return a dict with completions for
866 # different types of objects. The rlcomplete() method could then
866 # different types of objects. The rlcomplete() method could then
867 # simply collapse the dict into a list for readline, but we'd have
867 # simply collapse the dict into a list for readline, but we'd have
868 # richer completion semantics in other evironments.
868 # richer completion semantics in other evironments.
869 self.matches = sorted(set(self.matches))
869 self.matches = sorted(set(self.matches))
870 #io.rprint('COMP TEXT, MATCHES: %r, %r' % (text, self.matches)) # dbg
870 #io.rprint('COMP TEXT, MATCHES: %r, %r' % (text, self.matches)) # dbg
871 return text, self.matches
871 return text, self.matches
872
872
873 def rlcomplete(self, text, state):
873 def rlcomplete(self, text, state):
874 """Return the state-th possible completion for 'text'.
874 """Return the state-th possible completion for 'text'.
875
875
876 This is called successively with state == 0, 1, 2, ... until it
876 This is called successively with state == 0, 1, 2, ... until it
877 returns None. The completion should begin with 'text'.
877 returns None. The completion should begin with 'text'.
878
878
879 Parameters
879 Parameters
880 ----------
880 ----------
881 text : string
881 text : string
882 Text to perform the completion on.
882 Text to perform the completion on.
883
883
884 state : int
884 state : int
885 Counter used by readline.
885 Counter used by readline.
886 """
886 """
887 if state==0:
887 if state==0:
888
888
889 self.line_buffer = line_buffer = self.readline.get_line_buffer()
889 self.line_buffer = line_buffer = self.readline.get_line_buffer()
890 cursor_pos = self.readline.get_endidx()
890 cursor_pos = self.readline.get_endidx()
891
891
892 #io.rprint("\nRLCOMPLETE: %r %r %r" %
892 #io.rprint("\nRLCOMPLETE: %r %r %r" %
893 # (text, line_buffer, cursor_pos) ) # dbg
893 # (text, line_buffer, cursor_pos) ) # dbg
894
894
895 # if there is only a tab on a line with only whitespace, instead of
895 # if there is only a tab on a line with only whitespace, instead of
896 # the mostly useless 'do you want to see all million completions'
896 # the mostly useless 'do you want to see all million completions'
897 # message, just do the right thing and give the user his tab!
897 # message, just do the right thing and give the user his tab!
898 # Incidentally, this enables pasting of tabbed text from an editor
898 # Incidentally, this enables pasting of tabbed text from an editor
899 # (as long as autoindent is off).
899 # (as long as autoindent is off).
900
900
901 # It should be noted that at least pyreadline still shows file
901 # It should be noted that at least pyreadline still shows file
902 # completions - is there a way around it?
902 # completions - is there a way around it?
903
903
904 # don't apply this on 'dumb' terminals, such as emacs buffers, so
904 # don't apply this on 'dumb' terminals, such as emacs buffers, so
905 # we don't interfere with their own tab-completion mechanism.
905 # we don't interfere with their own tab-completion mechanism.
906 if not (self.dumb_terminal or line_buffer.strip()):
906 if not (self.dumb_terminal or line_buffer.strip()):
907 self.readline.insert_text('\t')
907 self.readline.insert_text('\t')
908 sys.stdout.flush()
908 sys.stdout.flush()
909 return None
909 return None
910
910
911 # Note: debugging exceptions that may occur in completion is very
911 # Note: debugging exceptions that may occur in completion is very
912 # tricky, because readline unconditionally silences them. So if
912 # tricky, because readline unconditionally silences them. So if
913 # during development you suspect a bug in the completion code, turn
913 # during development you suspect a bug in the completion code, turn
914 # this flag on temporarily by uncommenting the second form (don't
914 # this flag on temporarily by uncommenting the second form (don't
915 # flip the value in the first line, as the '# dbg' marker can be
915 # flip the value in the first line, as the '# dbg' marker can be
916 # automatically detected and is used elsewhere).
916 # automatically detected and is used elsewhere).
917 DEBUG = False
917 DEBUG = False
918 #DEBUG = True # dbg
918 #DEBUG = True # dbg
919 if DEBUG:
919 if DEBUG:
920 try:
920 try:
921 self.complete(text, line_buffer, cursor_pos)
921 self.complete(text, line_buffer, cursor_pos)
922 except:
922 except:
923 import traceback; traceback.print_exc()
923 import traceback; traceback.print_exc()
924 else:
924 else:
925 # The normal production version is here
925 # The normal production version is here
926
926
927 # This method computes the self.matches array
927 # This method computes the self.matches array
928 self.complete(text, line_buffer, cursor_pos)
928 self.complete(text, line_buffer, cursor_pos)
929
929
930 try:
930 try:
931 return self.matches[state]
931 return self.matches[state]
932 except IndexError:
932 except IndexError:
933 return None
933 return None
@@ -1,902 +1,903 b''
1 """Analysis of text input into executable blocks.
1 """Analysis of text input into executable blocks.
2
2
3 The main class in this module, :class:`InputSplitter`, is designed to break
3 The main class in this module, :class:`InputSplitter`, is designed to break
4 input from either interactive, line-by-line environments or block-based ones,
4 input from either interactive, line-by-line environments or block-based ones,
5 into standalone blocks that can be executed by Python as 'single' statements
5 into standalone blocks that can be executed by Python as 'single' statements
6 (thus triggering sys.displayhook).
6 (thus triggering sys.displayhook).
7
7
8 A companion, :class:`IPythonInputSplitter`, provides the same functionality but
8 A companion, :class:`IPythonInputSplitter`, provides the same functionality but
9 with full support for the extended IPython syntax (magics, system calls, etc).
9 with full support for the extended IPython syntax (magics, system calls, etc).
10
10
11 For more details, see the class docstring below.
11 For more details, see the class docstring below.
12
12
13 Syntax Transformations
13 Syntax Transformations
14 ----------------------
14 ----------------------
15
15
16 One of the main jobs of the code in this file is to apply all syntax
16 One of the main jobs of the code in this file is to apply all syntax
17 transformations that make up 'the IPython language', i.e. magics, shell
17 transformations that make up 'the IPython language', i.e. magics, shell
18 escapes, etc. All transformations should be implemented as *fully stateless*
18 escapes, etc. All transformations should be implemented as *fully stateless*
19 entities, that simply take one line as their input and return a line.
19 entities, that simply take one line as their input and return a line.
20 Internally for implementation purposes they may be a normal function or a
20 Internally for implementation purposes they may be a normal function or a
21 callable object, but the only input they receive will be a single line and they
21 callable object, but the only input they receive will be a single line and they
22 should only return a line, without holding any data-dependent state between
22 should only return a line, without holding any data-dependent state between
23 calls.
23 calls.
24
24
25 As an example, the EscapedTransformer is a class so we can more clearly group
25 As an example, the EscapedTransformer is a class so we can more clearly group
26 together the functionality of dispatching to individual functions based on the
26 together the functionality of dispatching to individual functions based on the
27 starting escape character, but the only method for public use is its call
27 starting escape character, but the only method for public use is its call
28 method.
28 method.
29
29
30
30
31 ToDo
31 ToDo
32 ----
32 ----
33
33
34 - Should we make push() actually raise an exception once push_accepts_more()
34 - Should we make push() actually raise an exception once push_accepts_more()
35 returns False?
35 returns False?
36
36
37 - Naming cleanups. The tr_* names aren't the most elegant, though now they are
37 - Naming cleanups. The tr_* names aren't the most elegant, though now they are
38 at least just attributes of a class so not really very exposed.
38 at least just attributes of a class so not really very exposed.
39
39
40 - Think about the best way to support dynamic things: automagic, autocall,
40 - Think about the best way to support dynamic things: automagic, autocall,
41 macros, etc.
41 macros, etc.
42
42
43 - Think of a better heuristic for the application of the transforms in
43 - Think of a better heuristic for the application of the transforms in
44 IPythonInputSplitter.push() than looking at the buffer ending in ':'. Idea:
44 IPythonInputSplitter.push() than looking at the buffer ending in ':'. Idea:
45 track indentation change events (indent, dedent, nothing) and apply them only
45 track indentation change events (indent, dedent, nothing) and apply them only
46 if the indentation went up, but not otherwise.
46 if the indentation went up, but not otherwise.
47
47
48 - Think of the cleanest way for supporting user-specified transformations (the
48 - Think of the cleanest way for supporting user-specified transformations (the
49 user prefilters we had before).
49 user prefilters we had before).
50
50
51 Authors
51 Authors
52 -------
52 -------
53
53
54 * Fernando Perez
54 * Fernando Perez
55 * Brian Granger
55 * Brian Granger
56 """
56 """
57 #-----------------------------------------------------------------------------
57 #-----------------------------------------------------------------------------
58 # Copyright (C) 2010 The IPython Development Team
58 # Copyright (C) 2010 The IPython Development Team
59 #
59 #
60 # Distributed under the terms of the BSD License. The full license is in
60 # Distributed under the terms of the BSD License. The full license is in
61 # the file COPYING, distributed as part of this software.
61 # the file COPYING, distributed as part of this software.
62 #-----------------------------------------------------------------------------
62 #-----------------------------------------------------------------------------
63
63
64 #-----------------------------------------------------------------------------
64 #-----------------------------------------------------------------------------
65 # Imports
65 # Imports
66 #-----------------------------------------------------------------------------
66 #-----------------------------------------------------------------------------
67 # stdlib
67 # stdlib
68 import ast
68 import ast
69 import codeop
69 import codeop
70 import re
70 import re
71 import sys
71 import sys
72 import tokenize
72 import tokenize
73 from StringIO import StringIO
73 from StringIO import StringIO
74
74
75 # IPython modules
75 # IPython modules
76 from IPython.core.splitinput import split_user_input, LineInfo
76 from IPython.core.splitinput import split_user_input, LineInfo
77 from IPython.utils.py3compat import cast_unicode
77 from IPython.utils.py3compat import cast_unicode
78
78
79 #-----------------------------------------------------------------------------
79 #-----------------------------------------------------------------------------
80 # Globals
80 # Globals
81 #-----------------------------------------------------------------------------
81 #-----------------------------------------------------------------------------
82
82
83 # The escape sequences that define the syntax transformations IPython will
83 # The escape sequences that define the syntax transformations IPython will
84 # apply to user input. These can NOT be just changed here: many regular
84 # apply to user input. These can NOT be just changed here: many regular
85 # expressions and other parts of the code may use their hardcoded values, and
85 # expressions and other parts of the code may use their hardcoded values, and
86 # for all intents and purposes they constitute the 'IPython syntax', so they
86 # for all intents and purposes they constitute the 'IPython syntax', so they
87 # should be considered fixed.
87 # should be considered fixed.
88
88
89 ESC_SHELL = '!' # Send line to underlying system shell
89 ESC_SHELL = '!' # Send line to underlying system shell
90 ESC_SH_CAP = '!!' # Send line to system shell and capture output
90 ESC_SH_CAP = '!!' # Send line to system shell and capture output
91 ESC_HELP = '?' # Find information about object
91 ESC_HELP = '?' # Find information about object
92 ESC_HELP2 = '??' # Find extra-detailed information about object
92 ESC_HELP2 = '??' # Find extra-detailed information about object
93 ESC_MAGIC = '%' # Call magic function
93 ESC_MAGIC = '%' # Call magic function
94 ESC_MAGIC2 = '%%' # Call cell-magic function
94 ESC_QUOTE = ',' # Split args on whitespace, quote each as string and call
95 ESC_QUOTE = ',' # Split args on whitespace, quote each as string and call
95 ESC_QUOTE2 = ';' # Quote all args as a single string, call
96 ESC_QUOTE2 = ';' # Quote all args as a single string, call
96 ESC_PAREN = '/' # Call first argument with rest of line as arguments
97 ESC_PAREN = '/' # Call first argument with rest of line as arguments
97
98
98 #-----------------------------------------------------------------------------
99 #-----------------------------------------------------------------------------
99 # Utilities
100 # Utilities
100 #-----------------------------------------------------------------------------
101 #-----------------------------------------------------------------------------
101
102
102 # FIXME: These are general-purpose utilities that later can be moved to the
103 # FIXME: These are general-purpose utilities that later can be moved to the
103 # general ward. Kept here for now because we're being very strict about test
104 # general ward. Kept here for now because we're being very strict about test
104 # coverage with this code, and this lets us ensure that we keep 100% coverage
105 # coverage with this code, and this lets us ensure that we keep 100% coverage
105 # while developing.
106 # while developing.
106
107
107 # compiled regexps for autoindent management
108 # compiled regexps for autoindent management
108 dedent_re = re.compile('|'.join([
109 dedent_re = re.compile('|'.join([
109 r'^\s+raise(\s.*)?$', # raise statement (+ space + other stuff, maybe)
110 r'^\s+raise(\s.*)?$', # raise statement (+ space + other stuff, maybe)
110 r'^\s+raise\([^\)]*\).*$', # wacky raise with immediate open paren
111 r'^\s+raise\([^\)]*\).*$', # wacky raise with immediate open paren
111 r'^\s+return(\s.*)?$', # normal return (+ space + other stuff, maybe)
112 r'^\s+return(\s.*)?$', # normal return (+ space + other stuff, maybe)
112 r'^\s+return\([^\)]*\).*$', # wacky return with immediate open paren
113 r'^\s+return\([^\)]*\).*$', # wacky return with immediate open paren
113 r'^\s+pass\s*$' # pass (optionally followed by trailing spaces)
114 r'^\s+pass\s*$' # pass (optionally followed by trailing spaces)
114 ]))
115 ]))
115 ini_spaces_re = re.compile(r'^([ \t\r\f\v]+)')
116 ini_spaces_re = re.compile(r'^([ \t\r\f\v]+)')
116
117
117 # regexp to match pure comment lines so we don't accidentally insert 'if 1:'
118 # regexp to match pure comment lines so we don't accidentally insert 'if 1:'
118 # before pure comments
119 # before pure comments
119 comment_line_re = re.compile('^\s*\#')
120 comment_line_re = re.compile('^\s*\#')
120
121
121
122
122 def num_ini_spaces(s):
123 def num_ini_spaces(s):
123 """Return the number of initial spaces in a string.
124 """Return the number of initial spaces in a string.
124
125
125 Note that tabs are counted as a single space. For now, we do *not* support
126 Note that tabs are counted as a single space. For now, we do *not* support
126 mixing of tabs and spaces in the user's input.
127 mixing of tabs and spaces in the user's input.
127
128
128 Parameters
129 Parameters
129 ----------
130 ----------
130 s : string
131 s : string
131
132
132 Returns
133 Returns
133 -------
134 -------
134 n : int
135 n : int
135 """
136 """
136
137
137 ini_spaces = ini_spaces_re.match(s)
138 ini_spaces = ini_spaces_re.match(s)
138 if ini_spaces:
139 if ini_spaces:
139 return ini_spaces.end()
140 return ini_spaces.end()
140 else:
141 else:
141 return 0
142 return 0
142
143
143 def last_blank(src):
144 def last_blank(src):
144 """Determine if the input source ends in a blank.
145 """Determine if the input source ends in a blank.
145
146
146 A blank is either a newline or a line consisting of whitespace.
147 A blank is either a newline or a line consisting of whitespace.
147
148
148 Parameters
149 Parameters
149 ----------
150 ----------
150 src : string
151 src : string
151 A single or multiline string.
152 A single or multiline string.
152 """
153 """
153 if not src: return False
154 if not src: return False
154 ll = src.splitlines()[-1]
155 ll = src.splitlines()[-1]
155 return (ll == '') or ll.isspace()
156 return (ll == '') or ll.isspace()
156
157
157
158
158 last_two_blanks_re = re.compile(r'\n\s*\n\s*$', re.MULTILINE)
159 last_two_blanks_re = re.compile(r'\n\s*\n\s*$', re.MULTILINE)
159 last_two_blanks_re2 = re.compile(r'.+\n\s*\n\s+$', re.MULTILINE)
160 last_two_blanks_re2 = re.compile(r'.+\n\s*\n\s+$', re.MULTILINE)
160
161
161 def last_two_blanks(src):
162 def last_two_blanks(src):
162 """Determine if the input source ends in two blanks.
163 """Determine if the input source ends in two blanks.
163
164
164 A blank is either a newline or a line consisting of whitespace.
165 A blank is either a newline or a line consisting of whitespace.
165
166
166 Parameters
167 Parameters
167 ----------
168 ----------
168 src : string
169 src : string
169 A single or multiline string.
170 A single or multiline string.
170 """
171 """
171 if not src: return False
172 if not src: return False
172 # The logic here is tricky: I couldn't get a regexp to work and pass all
173 # The logic here is tricky: I couldn't get a regexp to work and pass all
173 # the tests, so I took a different approach: split the source by lines,
174 # the tests, so I took a different approach: split the source by lines,
174 # grab the last two and prepend '###\n' as a stand-in for whatever was in
175 # grab the last two and prepend '###\n' as a stand-in for whatever was in
175 # the body before the last two lines. Then, with that structure, it's
176 # the body before the last two lines. Then, with that structure, it's
176 # possible to analyze with two regexps. Not the most elegant solution, but
177 # possible to analyze with two regexps. Not the most elegant solution, but
177 # it works. If anyone tries to change this logic, make sure to validate
178 # it works. If anyone tries to change this logic, make sure to validate
178 # the whole test suite first!
179 # the whole test suite first!
179 new_src = '\n'.join(['###\n'] + src.splitlines()[-2:])
180 new_src = '\n'.join(['###\n'] + src.splitlines()[-2:])
180 return (bool(last_two_blanks_re.match(new_src)) or
181 return (bool(last_two_blanks_re.match(new_src)) or
181 bool(last_two_blanks_re2.match(new_src)) )
182 bool(last_two_blanks_re2.match(new_src)) )
182
183
183
184
184 def remove_comments(src):
185 def remove_comments(src):
185 """Remove all comments from input source.
186 """Remove all comments from input source.
186
187
187 Note: comments are NOT recognized inside of strings!
188 Note: comments are NOT recognized inside of strings!
188
189
189 Parameters
190 Parameters
190 ----------
191 ----------
191 src : string
192 src : string
192 A single or multiline input string.
193 A single or multiline input string.
193
194
194 Returns
195 Returns
195 -------
196 -------
196 String with all Python comments removed.
197 String with all Python comments removed.
197 """
198 """
198
199
199 return re.sub('#.*', '', src)
200 return re.sub('#.*', '', src)
200
201
201 def has_comment(src):
202 def has_comment(src):
202 """Indicate whether an input line has (i.e. ends in, or is) a comment.
203 """Indicate whether an input line has (i.e. ends in, or is) a comment.
203
204
204 This uses tokenize, so it can distinguish comments from # inside strings.
205 This uses tokenize, so it can distinguish comments from # inside strings.
205
206
206 Parameters
207 Parameters
207 ----------
208 ----------
208 src : string
209 src : string
209 A single line input string.
210 A single line input string.
210
211
211 Returns
212 Returns
212 -------
213 -------
213 Boolean: True if source has a comment.
214 Boolean: True if source has a comment.
214 """
215 """
215 readline = StringIO(src).readline
216 readline = StringIO(src).readline
216 toktypes = set()
217 toktypes = set()
217 try:
218 try:
218 for t in tokenize.generate_tokens(readline):
219 for t in tokenize.generate_tokens(readline):
219 toktypes.add(t[0])
220 toktypes.add(t[0])
220 except tokenize.TokenError:
221 except tokenize.TokenError:
221 pass
222 pass
222 return(tokenize.COMMENT in toktypes)
223 return(tokenize.COMMENT in toktypes)
223
224
224
225
225 def get_input_encoding():
226 def get_input_encoding():
226 """Return the default standard input encoding.
227 """Return the default standard input encoding.
227
228
228 If sys.stdin has no encoding, 'ascii' is returned."""
229 If sys.stdin has no encoding, 'ascii' is returned."""
229 # There are strange environments for which sys.stdin.encoding is None. We
230 # There are strange environments for which sys.stdin.encoding is None. We
230 # ensure that a valid encoding is returned.
231 # ensure that a valid encoding is returned.
231 encoding = getattr(sys.stdin, 'encoding', None)
232 encoding = getattr(sys.stdin, 'encoding', None)
232 if encoding is None:
233 if encoding is None:
233 encoding = 'ascii'
234 encoding = 'ascii'
234 return encoding
235 return encoding
235
236
236 #-----------------------------------------------------------------------------
237 #-----------------------------------------------------------------------------
237 # Classes and functions for normal Python syntax handling
238 # Classes and functions for normal Python syntax handling
238 #-----------------------------------------------------------------------------
239 #-----------------------------------------------------------------------------
239
240
240 class InputSplitter(object):
241 class InputSplitter(object):
241 """An object that can accumulate lines of Python source before execution.
242 """An object that can accumulate lines of Python source before execution.
242
243
243 This object is designed to be fed python source line-by-line, using
244 This object is designed to be fed python source line-by-line, using
244 :meth:`push`. It will return on each push whether the currently pushed
245 :meth:`push`. It will return on each push whether the currently pushed
245 code could be executed already. In addition, it provides a method called
246 code could be executed already. In addition, it provides a method called
246 :meth:`push_accepts_more` that can be used to query whether more input
247 :meth:`push_accepts_more` that can be used to query whether more input
247 can be pushed into a single interactive block.
248 can be pushed into a single interactive block.
248
249
249 This is a simple example of how an interactive terminal-based client can use
250 This is a simple example of how an interactive terminal-based client can use
250 this tool::
251 this tool::
251
252
252 isp = InputSplitter()
253 isp = InputSplitter()
253 while isp.push_accepts_more():
254 while isp.push_accepts_more():
254 indent = ' '*isp.indent_spaces
255 indent = ' '*isp.indent_spaces
255 prompt = '>>> ' + indent
256 prompt = '>>> ' + indent
256 line = indent + raw_input(prompt)
257 line = indent + raw_input(prompt)
257 isp.push(line)
258 isp.push(line)
258 print 'Input source was:\n', isp.source_reset(),
259 print 'Input source was:\n', isp.source_reset(),
259 """
260 """
260 # Number of spaces of indentation computed from input that has been pushed
261 # Number of spaces of indentation computed from input that has been pushed
261 # so far. This is the attributes callers should query to get the current
262 # so far. This is the attributes callers should query to get the current
262 # indentation level, in order to provide auto-indent facilities.
263 # indentation level, in order to provide auto-indent facilities.
263 indent_spaces = 0
264 indent_spaces = 0
264 # String, indicating the default input encoding. It is computed by default
265 # String, indicating the default input encoding. It is computed by default
265 # at initialization time via get_input_encoding(), but it can be reset by a
266 # at initialization time via get_input_encoding(), but it can be reset by a
266 # client with specific knowledge of the encoding.
267 # client with specific knowledge of the encoding.
267 encoding = ''
268 encoding = ''
268 # String where the current full source input is stored, properly encoded.
269 # String where the current full source input is stored, properly encoded.
269 # Reading this attribute is the normal way of querying the currently pushed
270 # Reading this attribute is the normal way of querying the currently pushed
270 # source code, that has been properly encoded.
271 # source code, that has been properly encoded.
271 source = ''
272 source = ''
272 # Code object corresponding to the current source. It is automatically
273 # Code object corresponding to the current source. It is automatically
273 # synced to the source, so it can be queried at any time to obtain the code
274 # synced to the source, so it can be queried at any time to obtain the code
274 # object; it will be None if the source doesn't compile to valid Python.
275 # object; it will be None if the source doesn't compile to valid Python.
275 code = None
276 code = None
276 # Input mode
277 # Input mode
277 input_mode = 'line'
278 input_mode = 'line'
278
279
279 # Private attributes
280 # Private attributes
280
281
281 # List with lines of input accumulated so far
282 # List with lines of input accumulated so far
282 _buffer = None
283 _buffer = None
283 # Command compiler
284 # Command compiler
284 _compile = None
285 _compile = None
285 # Mark when input has changed indentation all the way back to flush-left
286 # Mark when input has changed indentation all the way back to flush-left
286 _full_dedent = False
287 _full_dedent = False
287 # Boolean indicating whether the current block is complete
288 # Boolean indicating whether the current block is complete
288 _is_complete = None
289 _is_complete = None
289
290
290 def __init__(self, input_mode=None):
291 def __init__(self, input_mode=None):
291 """Create a new InputSplitter instance.
292 """Create a new InputSplitter instance.
292
293
293 Parameters
294 Parameters
294 ----------
295 ----------
295 input_mode : str
296 input_mode : str
296
297
297 One of ['line', 'cell']; default is 'line'.
298 One of ['line', 'cell']; default is 'line'.
298
299
299 The input_mode parameter controls how new inputs are used when fed via
300 The input_mode parameter controls how new inputs are used when fed via
300 the :meth:`push` method:
301 the :meth:`push` method:
301
302
302 - 'line': meant for line-oriented clients, inputs are appended one at a
303 - 'line': meant for line-oriented clients, inputs are appended one at a
303 time to the internal buffer and the whole buffer is compiled.
304 time to the internal buffer and the whole buffer is compiled.
304
305
305 - 'cell': meant for clients that can edit multi-line 'cells' of text at
306 - 'cell': meant for clients that can edit multi-line 'cells' of text at
306 a time. A cell can contain one or more blocks that can be compile in
307 a time. A cell can contain one or more blocks that can be compile in
307 'single' mode by Python. In this mode, each new input new input
308 'single' mode by Python. In this mode, each new input new input
308 completely replaces all prior inputs. Cell mode is thus equivalent
309 completely replaces all prior inputs. Cell mode is thus equivalent
309 to prepending a full reset() to every push() call.
310 to prepending a full reset() to every push() call.
310 """
311 """
311 self._buffer = []
312 self._buffer = []
312 self._compile = codeop.CommandCompiler()
313 self._compile = codeop.CommandCompiler()
313 self.encoding = get_input_encoding()
314 self.encoding = get_input_encoding()
314 self.input_mode = InputSplitter.input_mode if input_mode is None \
315 self.input_mode = InputSplitter.input_mode if input_mode is None \
315 else input_mode
316 else input_mode
316
317
317 def reset(self):
318 def reset(self):
318 """Reset the input buffer and associated state."""
319 """Reset the input buffer and associated state."""
319 self.indent_spaces = 0
320 self.indent_spaces = 0
320 self._buffer[:] = []
321 self._buffer[:] = []
321 self.source = ''
322 self.source = ''
322 self.code = None
323 self.code = None
323 self._is_complete = False
324 self._is_complete = False
324 self._full_dedent = False
325 self._full_dedent = False
325
326
326 def source_reset(self):
327 def source_reset(self):
327 """Return the input source and perform a full reset.
328 """Return the input source and perform a full reset.
328 """
329 """
329 out = self.source
330 out = self.source
330 self.reset()
331 self.reset()
331 return out
332 return out
332
333
333 def push(self, lines):
334 def push(self, lines):
334 """Push one or more lines of input.
335 """Push one or more lines of input.
335
336
336 This stores the given lines and returns a status code indicating
337 This stores the given lines and returns a status code indicating
337 whether the code forms a complete Python block or not.
338 whether the code forms a complete Python block or not.
338
339
339 Any exceptions generated in compilation are swallowed, but if an
340 Any exceptions generated in compilation are swallowed, but if an
340 exception was produced, the method returns True.
341 exception was produced, the method returns True.
341
342
342 Parameters
343 Parameters
343 ----------
344 ----------
344 lines : string
345 lines : string
345 One or more lines of Python input.
346 One or more lines of Python input.
346
347
347 Returns
348 Returns
348 -------
349 -------
349 is_complete : boolean
350 is_complete : boolean
350 True if the current input source (the result of the current input
351 True if the current input source (the result of the current input
351 plus prior inputs) forms a complete Python execution block. Note that
352 plus prior inputs) forms a complete Python execution block. Note that
352 this value is also stored as a private attribute (_is_complete), so it
353 this value is also stored as a private attribute (_is_complete), so it
353 can be queried at any time.
354 can be queried at any time.
354 """
355 """
355 if self.input_mode == 'cell':
356 if self.input_mode == 'cell':
356 self.reset()
357 self.reset()
357
358
358 self._store(lines)
359 self._store(lines)
359 source = self.source
360 source = self.source
360
361
361 # Before calling _compile(), reset the code object to None so that if an
362 # Before calling _compile(), reset the code object to None so that if an
362 # exception is raised in compilation, we don't mislead by having
363 # exception is raised in compilation, we don't mislead by having
363 # inconsistent code/source attributes.
364 # inconsistent code/source attributes.
364 self.code, self._is_complete = None, None
365 self.code, self._is_complete = None, None
365
366
366 # Honor termination lines properly
367 # Honor termination lines properly
367 if source.rstrip().endswith('\\'):
368 if source.rstrip().endswith('\\'):
368 return False
369 return False
369
370
370 self._update_indent(lines)
371 self._update_indent(lines)
371 try:
372 try:
372 self.code = self._compile(source, symbol="exec")
373 self.code = self._compile(source, symbol="exec")
373 # Invalid syntax can produce any of a number of different errors from
374 # Invalid syntax can produce any of a number of different errors from
374 # inside the compiler, so we have to catch them all. Syntax errors
375 # inside the compiler, so we have to catch them all. Syntax errors
375 # immediately produce a 'ready' block, so the invalid Python can be
376 # immediately produce a 'ready' block, so the invalid Python can be
376 # sent to the kernel for evaluation with possible ipython
377 # sent to the kernel for evaluation with possible ipython
377 # special-syntax conversion.
378 # special-syntax conversion.
378 except (SyntaxError, OverflowError, ValueError, TypeError,
379 except (SyntaxError, OverflowError, ValueError, TypeError,
379 MemoryError):
380 MemoryError):
380 self._is_complete = True
381 self._is_complete = True
381 else:
382 else:
382 # Compilation didn't produce any exceptions (though it may not have
383 # Compilation didn't produce any exceptions (though it may not have
383 # given a complete code object)
384 # given a complete code object)
384 self._is_complete = self.code is not None
385 self._is_complete = self.code is not None
385
386
386 return self._is_complete
387 return self._is_complete
387
388
388 def push_accepts_more(self):
389 def push_accepts_more(self):
389 """Return whether a block of interactive input can accept more input.
390 """Return whether a block of interactive input can accept more input.
390
391
391 This method is meant to be used by line-oriented frontends, who need to
392 This method is meant to be used by line-oriented frontends, who need to
392 guess whether a block is complete or not based solely on prior and
393 guess whether a block is complete or not based solely on prior and
393 current input lines. The InputSplitter considers it has a complete
394 current input lines. The InputSplitter considers it has a complete
394 interactive block and will not accept more input only when either a
395 interactive block and will not accept more input only when either a
395 SyntaxError is raised, or *all* of the following are true:
396 SyntaxError is raised, or *all* of the following are true:
396
397
397 1. The input compiles to a complete statement.
398 1. The input compiles to a complete statement.
398
399
399 2. The indentation level is flush-left (because if we are indented,
400 2. The indentation level is flush-left (because if we are indented,
400 like inside a function definition or for loop, we need to keep
401 like inside a function definition or for loop, we need to keep
401 reading new input).
402 reading new input).
402
403
403 3. There is one extra line consisting only of whitespace.
404 3. There is one extra line consisting only of whitespace.
404
405
405 Because of condition #3, this method should be used only by
406 Because of condition #3, this method should be used only by
406 *line-oriented* frontends, since it means that intermediate blank lines
407 *line-oriented* frontends, since it means that intermediate blank lines
407 are not allowed in function definitions (or any other indented block).
408 are not allowed in function definitions (or any other indented block).
408
409
409 If the current input produces a syntax error, this method immediately
410 If the current input produces a syntax error, this method immediately
410 returns False but does *not* raise the syntax error exception, as
411 returns False but does *not* raise the syntax error exception, as
411 typically clients will want to send invalid syntax to an execution
412 typically clients will want to send invalid syntax to an execution
412 backend which might convert the invalid syntax into valid Python via
413 backend which might convert the invalid syntax into valid Python via
413 one of the dynamic IPython mechanisms.
414 one of the dynamic IPython mechanisms.
414 """
415 """
415
416
416 # With incomplete input, unconditionally accept more
417 # With incomplete input, unconditionally accept more
417 if not self._is_complete:
418 if not self._is_complete:
418 return True
419 return True
419
420
420 # If we already have complete input and we're flush left, the answer
421 # If we already have complete input and we're flush left, the answer
421 # depends. In line mode, if there hasn't been any indentation,
422 # depends. In line mode, if there hasn't been any indentation,
422 # that's it. If we've come back from some indentation, we need
423 # that's it. If we've come back from some indentation, we need
423 # the blank final line to finish.
424 # the blank final line to finish.
424 # In cell mode, we need to check how many blocks the input so far
425 # In cell mode, we need to check how many blocks the input so far
425 # compiles into, because if there's already more than one full
426 # compiles into, because if there's already more than one full
426 # independent block of input, then the client has entered full
427 # independent block of input, then the client has entered full
427 # 'cell' mode and is feeding lines that each is complete. In this
428 # 'cell' mode and is feeding lines that each is complete. In this
428 # case we should then keep accepting. The Qt terminal-like console
429 # case we should then keep accepting. The Qt terminal-like console
429 # does precisely this, to provide the convenience of terminal-like
430 # does precisely this, to provide the convenience of terminal-like
430 # input of single expressions, but allowing the user (with a
431 # input of single expressions, but allowing the user (with a
431 # separate keystroke) to switch to 'cell' mode and type multiple
432 # separate keystroke) to switch to 'cell' mode and type multiple
432 # expressions in one shot.
433 # expressions in one shot.
433 if self.indent_spaces==0:
434 if self.indent_spaces==0:
434 if self.input_mode=='line':
435 if self.input_mode=='line':
435 if not self._full_dedent:
436 if not self._full_dedent:
436 return False
437 return False
437 else:
438 else:
438 try:
439 try:
439 code_ast = ast.parse(u''.join(self._buffer))
440 code_ast = ast.parse(u''.join(self._buffer))
440 except Exception:
441 except Exception:
441 return False
442 return False
442 else:
443 else:
443 if len(code_ast.body) == 1:
444 if len(code_ast.body) == 1:
444 return False
445 return False
445
446
446 # When input is complete, then termination is marked by an extra blank
447 # When input is complete, then termination is marked by an extra blank
447 # line at the end.
448 # line at the end.
448 last_line = self.source.splitlines()[-1]
449 last_line = self.source.splitlines()[-1]
449 return bool(last_line and not last_line.isspace())
450 return bool(last_line and not last_line.isspace())
450
451
451 #------------------------------------------------------------------------
452 #------------------------------------------------------------------------
452 # Private interface
453 # Private interface
453 #------------------------------------------------------------------------
454 #------------------------------------------------------------------------
454
455
455 def _find_indent(self, line):
456 def _find_indent(self, line):
456 """Compute the new indentation level for a single line.
457 """Compute the new indentation level for a single line.
457
458
458 Parameters
459 Parameters
459 ----------
460 ----------
460 line : str
461 line : str
461 A single new line of non-whitespace, non-comment Python input.
462 A single new line of non-whitespace, non-comment Python input.
462
463
463 Returns
464 Returns
464 -------
465 -------
465 indent_spaces : int
466 indent_spaces : int
466 New value for the indent level (it may be equal to self.indent_spaces
467 New value for the indent level (it may be equal to self.indent_spaces
467 if indentation doesn't change.
468 if indentation doesn't change.
468
469
469 full_dedent : boolean
470 full_dedent : boolean
470 Whether the new line causes a full flush-left dedent.
471 Whether the new line causes a full flush-left dedent.
471 """
472 """
472 indent_spaces = self.indent_spaces
473 indent_spaces = self.indent_spaces
473 full_dedent = self._full_dedent
474 full_dedent = self._full_dedent
474
475
475 inisp = num_ini_spaces(line)
476 inisp = num_ini_spaces(line)
476 if inisp < indent_spaces:
477 if inisp < indent_spaces:
477 indent_spaces = inisp
478 indent_spaces = inisp
478 if indent_spaces <= 0:
479 if indent_spaces <= 0:
479 #print 'Full dedent in text',self.source # dbg
480 #print 'Full dedent in text',self.source # dbg
480 full_dedent = True
481 full_dedent = True
481
482
482 if line.rstrip()[-1] == ':':
483 if line.rstrip()[-1] == ':':
483 indent_spaces += 4
484 indent_spaces += 4
484 elif dedent_re.match(line):
485 elif dedent_re.match(line):
485 indent_spaces -= 4
486 indent_spaces -= 4
486 if indent_spaces <= 0:
487 if indent_spaces <= 0:
487 full_dedent = True
488 full_dedent = True
488
489
489 # Safety
490 # Safety
490 if indent_spaces < 0:
491 if indent_spaces < 0:
491 indent_spaces = 0
492 indent_spaces = 0
492 #print 'safety' # dbg
493 #print 'safety' # dbg
493
494
494 return indent_spaces, full_dedent
495 return indent_spaces, full_dedent
495
496
496 def _update_indent(self, lines):
497 def _update_indent(self, lines):
497 for line in remove_comments(lines).splitlines():
498 for line in remove_comments(lines).splitlines():
498 if line and not line.isspace():
499 if line and not line.isspace():
499 self.indent_spaces, self._full_dedent = self._find_indent(line)
500 self.indent_spaces, self._full_dedent = self._find_indent(line)
500
501
501 def _store(self, lines, buffer=None, store='source'):
502 def _store(self, lines, buffer=None, store='source'):
502 """Store one or more lines of input.
503 """Store one or more lines of input.
503
504
504 If input lines are not newline-terminated, a newline is automatically
505 If input lines are not newline-terminated, a newline is automatically
505 appended."""
506 appended."""
506
507
507 if buffer is None:
508 if buffer is None:
508 buffer = self._buffer
509 buffer = self._buffer
509
510
510 if lines.endswith('\n'):
511 if lines.endswith('\n'):
511 buffer.append(lines)
512 buffer.append(lines)
512 else:
513 else:
513 buffer.append(lines+'\n')
514 buffer.append(lines+'\n')
514 setattr(self, store, self._set_source(buffer))
515 setattr(self, store, self._set_source(buffer))
515
516
516 def _set_source(self, buffer):
517 def _set_source(self, buffer):
517 return u''.join(buffer)
518 return u''.join(buffer)
518
519
519
520
520 #-----------------------------------------------------------------------------
521 #-----------------------------------------------------------------------------
521 # Functions and classes for IPython-specific syntactic support
522 # Functions and classes for IPython-specific syntactic support
522 #-----------------------------------------------------------------------------
523 #-----------------------------------------------------------------------------
523
524
524 # The escaped translators ALL receive a line where their own escape has been
525 # The escaped translators ALL receive a line where their own escape has been
525 # stripped. Only '?' is valid at the end of the line, all others can only be
526 # stripped. Only '?' is valid at the end of the line, all others can only be
526 # placed at the start.
527 # placed at the start.
527
528
528 # Transformations of the special syntaxes that don't rely on an explicit escape
529 # Transformations of the special syntaxes that don't rely on an explicit escape
529 # character but instead on patterns on the input line
530 # character but instead on patterns on the input line
530
531
531 # The core transformations are implemented as standalone functions that can be
532 # The core transformations are implemented as standalone functions that can be
532 # tested and validated in isolation. Each of these uses a regexp, we
533 # tested and validated in isolation. Each of these uses a regexp, we
533 # pre-compile these and keep them close to each function definition for clarity
534 # pre-compile these and keep them close to each function definition for clarity
534
535
535 _assign_system_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
536 _assign_system_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
536 r'\s*=\s*!\s*(?P<cmd>.*)')
537 r'\s*=\s*!\s*(?P<cmd>.*)')
537
538
538 def transform_assign_system(line):
539 def transform_assign_system(line):
539 """Handle the `files = !ls` syntax."""
540 """Handle the `files = !ls` syntax."""
540 m = _assign_system_re.match(line)
541 m = _assign_system_re.match(line)
541 if m is not None:
542 if m is not None:
542 cmd = m.group('cmd')
543 cmd = m.group('cmd')
543 lhs = m.group('lhs')
544 lhs = m.group('lhs')
544 new_line = '%s = get_ipython().getoutput(%r)' % (lhs, cmd)
545 new_line = '%s = get_ipython().getoutput(%r)' % (lhs, cmd)
545 return new_line
546 return new_line
546 return line
547 return line
547
548
548
549
549 _assign_magic_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
550 _assign_magic_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
550 r'\s*=\s*%\s*(?P<cmd>.*)')
551 r'\s*=\s*%\s*(?P<cmd>.*)')
551
552
552 def transform_assign_magic(line):
553 def transform_assign_magic(line):
553 """Handle the `a = %who` syntax."""
554 """Handle the `a = %who` syntax."""
554 m = _assign_magic_re.match(line)
555 m = _assign_magic_re.match(line)
555 if m is not None:
556 if m is not None:
556 cmd = m.group('cmd')
557 cmd = m.group('cmd')
557 lhs = m.group('lhs')
558 lhs = m.group('lhs')
558 new_line = '%s = get_ipython().magic(%r)' % (lhs, cmd)
559 new_line = '%s = get_ipython().magic(%r)' % (lhs, cmd)
559 return new_line
560 return new_line
560 return line
561 return line
561
562
562
563
563 _classic_prompt_re = re.compile(r'^([ \t]*>>> |^[ \t]*\.\.\. )')
564 _classic_prompt_re = re.compile(r'^([ \t]*>>> |^[ \t]*\.\.\. )')
564
565
565 def transform_classic_prompt(line):
566 def transform_classic_prompt(line):
566 """Handle inputs that start with '>>> ' syntax."""
567 """Handle inputs that start with '>>> ' syntax."""
567
568
568 if not line or line.isspace():
569 if not line or line.isspace():
569 return line
570 return line
570 m = _classic_prompt_re.match(line)
571 m = _classic_prompt_re.match(line)
571 if m:
572 if m:
572 return line[len(m.group(0)):]
573 return line[len(m.group(0)):]
573 else:
574 else:
574 return line
575 return line
575
576
576
577
577 _ipy_prompt_re = re.compile(r'^([ \t]*In \[\d+\]: |^[ \t]*\ \ \ \.\.\.+: )')
578 _ipy_prompt_re = re.compile(r'^([ \t]*In \[\d+\]: |^[ \t]*\ \ \ \.\.\.+: )')
578
579
579 def transform_ipy_prompt(line):
580 def transform_ipy_prompt(line):
580 """Handle inputs that start classic IPython prompt syntax."""
581 """Handle inputs that start classic IPython prompt syntax."""
581
582
582 if not line or line.isspace():
583 if not line or line.isspace():
583 return line
584 return line
584 #print 'LINE: %r' % line # dbg
585 #print 'LINE: %r' % line # dbg
585 m = _ipy_prompt_re.match(line)
586 m = _ipy_prompt_re.match(line)
586 if m:
587 if m:
587 #print 'MATCH! %r -> %r' % (line, line[len(m.group(0)):]) # dbg
588 #print 'MATCH! %r -> %r' % (line, line[len(m.group(0)):]) # dbg
588 return line[len(m.group(0)):]
589 return line[len(m.group(0)):]
589 else:
590 else:
590 return line
591 return line
591
592
592
593
593 def _make_help_call(target, esc, lspace, next_input=None):
594 def _make_help_call(target, esc, lspace, next_input=None):
594 """Prepares a pinfo(2)/psearch call from a target name and the escape
595 """Prepares a pinfo(2)/psearch call from a target name and the escape
595 (i.e. ? or ??)"""
596 (i.e. ? or ??)"""
596 method = 'pinfo2' if esc == '??' \
597 method = 'pinfo2' if esc == '??' \
597 else 'psearch' if '*' in target \
598 else 'psearch' if '*' in target \
598 else 'pinfo'
599 else 'pinfo'
599 arg = " ".join([method, target])
600 arg = " ".join([method, target])
600 if next_input is None:
601 if next_input is None:
601 return '%sget_ipython().magic(%r)' % (lspace, arg)
602 return '%sget_ipython().magic(%r)' % (lspace, arg)
602 else:
603 else:
603 return '%sget_ipython().set_next_input(%r);get_ipython().magic(%r)' % \
604 return '%sget_ipython().set_next_input(%r);get_ipython().magic(%r)' % \
604 (lspace, next_input, arg)
605 (lspace, next_input, arg)
605
606
606
607
607 _initial_space_re = re.compile(r'\s*')
608 _initial_space_re = re.compile(r'\s*')
608
609
609 _help_end_re = re.compile(r"""(%{0,2}
610 _help_end_re = re.compile(r"""(%{0,2}
610 [a-zA-Z_*][\w*]* # Variable name
611 [a-zA-Z_*][\w*]* # Variable name
611 (\.[a-zA-Z_*][\w*]*)* # .etc.etc
612 (\.[a-zA-Z_*][\w*]*)* # .etc.etc
612 )
613 )
613 (\?\??)$ # ? or ??""",
614 (\?\??)$ # ? or ??""",
614 re.VERBOSE)
615 re.VERBOSE)
615
616
616
617
617 def transform_help_end(line):
618 def transform_help_end(line):
618 """Translate lines with ?/?? at the end"""
619 """Translate lines with ?/?? at the end"""
619 m = _help_end_re.search(line)
620 m = _help_end_re.search(line)
620 if m is None or has_comment(line):
621 if m is None or has_comment(line):
621 return line
622 return line
622 target = m.group(1)
623 target = m.group(1)
623 esc = m.group(3)
624 esc = m.group(3)
624 lspace = _initial_space_re.match(line).group(0)
625 lspace = _initial_space_re.match(line).group(0)
625
626
626 # If we're mid-command, put it back on the next prompt for the user.
627 # If we're mid-command, put it back on the next prompt for the user.
627 next_input = line.rstrip('?') if line.strip() != m.group(0) else None
628 next_input = line.rstrip('?') if line.strip() != m.group(0) else None
628
629
629 return _make_help_call(target, esc, lspace, next_input)
630 return _make_help_call(target, esc, lspace, next_input)
630
631
631
632
632 class EscapedTransformer(object):
633 class EscapedTransformer(object):
633 """Class to transform lines that are explicitly escaped out."""
634 """Class to transform lines that are explicitly escaped out."""
634
635
635 def __init__(self):
636 def __init__(self):
636 tr = { ESC_SHELL : self._tr_system,
637 tr = { ESC_SHELL : self._tr_system,
637 ESC_SH_CAP : self._tr_system2,
638 ESC_SH_CAP : self._tr_system2,
638 ESC_HELP : self._tr_help,
639 ESC_HELP : self._tr_help,
639 ESC_HELP2 : self._tr_help,
640 ESC_HELP2 : self._tr_help,
640 ESC_MAGIC : self._tr_magic,
641 ESC_MAGIC : self._tr_magic,
641 ESC_QUOTE : self._tr_quote,
642 ESC_QUOTE : self._tr_quote,
642 ESC_QUOTE2 : self._tr_quote2,
643 ESC_QUOTE2 : self._tr_quote2,
643 ESC_PAREN : self._tr_paren }
644 ESC_PAREN : self._tr_paren }
644 self.tr = tr
645 self.tr = tr
645
646
646 # Support for syntax transformations that use explicit escapes typed by the
647 # Support for syntax transformations that use explicit escapes typed by the
647 # user at the beginning of a line
648 # user at the beginning of a line
648 @staticmethod
649 @staticmethod
649 def _tr_system(line_info):
650 def _tr_system(line_info):
650 "Translate lines escaped with: !"
651 "Translate lines escaped with: !"
651 cmd = line_info.line.lstrip().lstrip(ESC_SHELL)
652 cmd = line_info.line.lstrip().lstrip(ESC_SHELL)
652 return '%sget_ipython().system(%r)' % (line_info.pre, cmd)
653 return '%sget_ipython().system(%r)' % (line_info.pre, cmd)
653
654
654 @staticmethod
655 @staticmethod
655 def _tr_system2(line_info):
656 def _tr_system2(line_info):
656 "Translate lines escaped with: !!"
657 "Translate lines escaped with: !!"
657 cmd = line_info.line.lstrip()[2:]
658 cmd = line_info.line.lstrip()[2:]
658 return '%sget_ipython().getoutput(%r)' % (line_info.pre, cmd)
659 return '%sget_ipython().getoutput(%r)' % (line_info.pre, cmd)
659
660
660 @staticmethod
661 @staticmethod
661 def _tr_help(line_info):
662 def _tr_help(line_info):
662 "Translate lines escaped with: ?/??"
663 "Translate lines escaped with: ?/??"
663 # A naked help line should just fire the intro help screen
664 # A naked help line should just fire the intro help screen
664 if not line_info.line[1:]:
665 if not line_info.line[1:]:
665 return 'get_ipython().show_usage()'
666 return 'get_ipython().show_usage()'
666
667
667 return _make_help_call(line_info.ifun, line_info.esc, line_info.pre)
668 return _make_help_call(line_info.ifun, line_info.esc, line_info.pre)
668
669
669 @staticmethod
670 @staticmethod
670 def _tr_magic(line_info):
671 def _tr_magic(line_info):
671 "Translate lines escaped with: %"
672 "Translate lines escaped with: %"
672 tpl = '%sget_ipython().magic(%r)'
673 tpl = '%sget_ipython().magic(%r)'
673 cmd = ' '.join([line_info.ifun, line_info.the_rest]).strip()
674 cmd = ' '.join([line_info.ifun, line_info.the_rest]).strip()
674 return tpl % (line_info.pre, cmd)
675 return tpl % (line_info.pre, cmd)
675
676
676 @staticmethod
677 @staticmethod
677 def _tr_quote(line_info):
678 def _tr_quote(line_info):
678 "Translate lines escaped with: ,"
679 "Translate lines escaped with: ,"
679 return '%s%s("%s")' % (line_info.pre, line_info.ifun,
680 return '%s%s("%s")' % (line_info.pre, line_info.ifun,
680 '", "'.join(line_info.the_rest.split()) )
681 '", "'.join(line_info.the_rest.split()) )
681
682
682 @staticmethod
683 @staticmethod
683 def _tr_quote2(line_info):
684 def _tr_quote2(line_info):
684 "Translate lines escaped with: ;"
685 "Translate lines escaped with: ;"
685 return '%s%s("%s")' % (line_info.pre, line_info.ifun,
686 return '%s%s("%s")' % (line_info.pre, line_info.ifun,
686 line_info.the_rest)
687 line_info.the_rest)
687
688
688 @staticmethod
689 @staticmethod
689 def _tr_paren(line_info):
690 def _tr_paren(line_info):
690 "Translate lines escaped with: /"
691 "Translate lines escaped with: /"
691 return '%s%s(%s)' % (line_info.pre, line_info.ifun,
692 return '%s%s(%s)' % (line_info.pre, line_info.ifun,
692 ", ".join(line_info.the_rest.split()))
693 ", ".join(line_info.the_rest.split()))
693
694
694 def __call__(self, line):
695 def __call__(self, line):
695 """Class to transform lines that are explicitly escaped out.
696 """Class to transform lines that are explicitly escaped out.
696
697
697 This calls the above _tr_* static methods for the actual line
698 This calls the above _tr_* static methods for the actual line
698 translations."""
699 translations."""
699
700
700 # Empty lines just get returned unmodified
701 # Empty lines just get returned unmodified
701 if not line or line.isspace():
702 if not line or line.isspace():
702 return line
703 return line
703
704
704 # Get line endpoints, where the escapes can be
705 # Get line endpoints, where the escapes can be
705 line_info = LineInfo(line)
706 line_info = LineInfo(line)
706
707
707 if not line_info.esc in self.tr:
708 if not line_info.esc in self.tr:
708 # If we don't recognize the escape, don't modify the line
709 # If we don't recognize the escape, don't modify the line
709 return line
710 return line
710
711
711 return self.tr[line_info.esc](line_info)
712 return self.tr[line_info.esc](line_info)
712
713
713
714
714 # A function-looking object to be used by the rest of the code. The purpose of
715 # A function-looking object to be used by the rest of the code. The purpose of
715 # the class in this case is to organize related functionality, more than to
716 # the class in this case is to organize related functionality, more than to
716 # manage state.
717 # manage state.
717 transform_escaped = EscapedTransformer()
718 transform_escaped = EscapedTransformer()
718
719
719
720
720 class IPythonInputSplitter(InputSplitter):
721 class IPythonInputSplitter(InputSplitter):
721 """An input splitter that recognizes all of IPython's special syntax."""
722 """An input splitter that recognizes all of IPython's special syntax."""
722
723
723 # String with raw, untransformed input.
724 # String with raw, untransformed input.
724 source_raw = ''
725 source_raw = ''
725
726
726 # Flag to track when we're in the middle of processing a cell magic, since
727 # Flag to track when we're in the middle of processing a cell magic, since
727 # the logic has to change. In that case, we apply no transformations at
728 # the logic has to change. In that case, we apply no transformations at
728 # all.
729 # all.
729 processing_cell_magic = False
730 processing_cell_magic = False
730
731
731 # Storage for all blocks of input that make up a cell magic
732 # Storage for all blocks of input that make up a cell magic
732 cell_magic_parts = []
733 cell_magic_parts = []
733
734
734 # Private attributes
735 # Private attributes
735
736
736 # List with lines of raw input accumulated so far.
737 # List with lines of raw input accumulated so far.
737 _buffer_raw = None
738 _buffer_raw = None
738
739
739 def __init__(self, input_mode=None):
740 def __init__(self, input_mode=None):
740 super(IPythonInputSplitter, self).__init__(input_mode)
741 super(IPythonInputSplitter, self).__init__(input_mode)
741 self._buffer_raw = []
742 self._buffer_raw = []
742 self._validate = True
743 self._validate = True
743
744
744 def reset(self):
745 def reset(self):
745 """Reset the input buffer and associated state."""
746 """Reset the input buffer and associated state."""
746 super(IPythonInputSplitter, self).reset()
747 super(IPythonInputSplitter, self).reset()
747 self._buffer_raw[:] = []
748 self._buffer_raw[:] = []
748 self.source_raw = ''
749 self.source_raw = ''
749 self.cell_magic_parts = []
750 self.cell_magic_parts = []
750 self.processing_cell_magic = False
751 self.processing_cell_magic = False
751
752
752 def source_raw_reset(self):
753 def source_raw_reset(self):
753 """Return input and raw source and perform a full reset.
754 """Return input and raw source and perform a full reset.
754 """
755 """
755 out = self.source
756 out = self.source
756 out_r = self.source_raw
757 out_r = self.source_raw
757 self.reset()
758 self.reset()
758 return out, out_r
759 return out, out_r
759
760
760 def push_accepts_more(self):
761 def push_accepts_more(self):
761 if self.processing_cell_magic:
762 if self.processing_cell_magic:
762 return not self._is_complete
763 return not self._is_complete
763 else:
764 else:
764 return super(IPythonInputSplitter, self).push_accepts_more()
765 return super(IPythonInputSplitter, self).push_accepts_more()
765
766
766 def _handle_cell_magic(self, lines):
767 def _handle_cell_magic(self, lines):
767 """Process lines when they start with %%, which marks cell magics.
768 """Process lines when they start with %%, which marks cell magics.
768 """
769 """
769 self.processing_cell_magic = True
770 self.processing_cell_magic = True
770 first, _, body = lines.partition('\n')
771 first, _, body = lines.partition('\n')
771 magic_name, _, line = first.partition(' ')
772 magic_name, _, line = first.partition(' ')
772 magic_name = magic_name.lstrip(ESC_MAGIC)
773 magic_name = magic_name.lstrip(ESC_MAGIC)
773 # We store the body of the cell and create a call to a method that
774 # We store the body of the cell and create a call to a method that
774 # will use this stored value. This is ugly, but it's a first cut to
775 # will use this stored value. This is ugly, but it's a first cut to
775 # get it all working, as right now changing the return API of our
776 # get it all working, as right now changing the return API of our
776 # methods would require major refactoring.
777 # methods would require major refactoring.
777 self.cell_magic_parts = [body]
778 self.cell_magic_parts = [body]
778 tpl = 'get_ipython()._run_cached_cell_magic(%r, %r)'
779 tpl = 'get_ipython()._run_cached_cell_magic(%r, %r)'
779 tlines = tpl % (magic_name, line)
780 tlines = tpl % (magic_name, line)
780 self._store(tlines)
781 self._store(tlines)
781 self._store(lines, self._buffer_raw, 'source_raw')
782 self._store(lines, self._buffer_raw, 'source_raw')
782 # We can actually choose whether to allow for single blank lines here
783 # We can actually choose whether to allow for single blank lines here
783 # during input for clients that use cell mode to decide when to stop
784 # during input for clients that use cell mode to decide when to stop
784 # pushing input (currently only the Qt console).
785 # pushing input (currently only the Qt console).
785 # My first implementation did that, and then I realized it wasn't
786 # My first implementation did that, and then I realized it wasn't
786 # consistent with the terminal behavior, so I've reverted it to one
787 # consistent with the terminal behavior, so I've reverted it to one
787 # line. But I'm leaving it here so we can easily test both behaviors,
788 # line. But I'm leaving it here so we can easily test both behaviors,
788 # I kind of liked having full blank lines allowed in the cell magics...
789 # I kind of liked having full blank lines allowed in the cell magics...
789 #self._is_complete = last_two_blanks(lines)
790 #self._is_complete = last_two_blanks(lines)
790 self._is_complete = last_blank(lines)
791 self._is_complete = last_blank(lines)
791 return self._is_complete
792 return self._is_complete
792
793
793 def _line_mode_cell_append(self, lines):
794 def _line_mode_cell_append(self, lines):
794 """Append new content for a cell magic in line mode.
795 """Append new content for a cell magic in line mode.
795 """
796 """
796 # Only store the raw input. Lines beyond the first one are only only
797 # Only store the raw input. Lines beyond the first one are only only
797 # stored for history purposes; for execution the caller will grab the
798 # stored for history purposes; for execution the caller will grab the
798 # magic pieces from cell_magic_parts and will assemble the cell body
799 # magic pieces from cell_magic_parts and will assemble the cell body
799 self._store(lines, self._buffer_raw, 'source_raw')
800 self._store(lines, self._buffer_raw, 'source_raw')
800 self.cell_magic_parts.append(lines)
801 self.cell_magic_parts.append(lines)
801 # Find out if the last stored block has a whitespace line as its
802 # Find out if the last stored block has a whitespace line as its
802 # last line and also this line is whitespace, case in which we're
803 # last line and also this line is whitespace, case in which we're
803 # done (two contiguous blank lines signal termination). Note that
804 # done (two contiguous blank lines signal termination). Note that
804 # the storage logic *enforces* that every stored block is
805 # the storage logic *enforces* that every stored block is
805 # newline-terminated, so we grab everything but the last character
806 # newline-terminated, so we grab everything but the last character
806 # so we can have the body of the block alone.
807 # so we can have the body of the block alone.
807 last_block = self.cell_magic_parts[-1]
808 last_block = self.cell_magic_parts[-1]
808 self._is_complete = last_blank(last_block) and lines.isspace()
809 self._is_complete = last_blank(last_block) and lines.isspace()
809 return self._is_complete
810 return self._is_complete
810
811
811 def push(self, lines):
812 def push(self, lines):
812 """Push one or more lines of IPython input.
813 """Push one or more lines of IPython input.
813
814
814 This stores the given lines and returns a status code indicating
815 This stores the given lines and returns a status code indicating
815 whether the code forms a complete Python block or not, after processing
816 whether the code forms a complete Python block or not, after processing
816 all input lines for special IPython syntax.
817 all input lines for special IPython syntax.
817
818
818 Any exceptions generated in compilation are swallowed, but if an
819 Any exceptions generated in compilation are swallowed, but if an
819 exception was produced, the method returns True.
820 exception was produced, the method returns True.
820
821
821 Parameters
822 Parameters
822 ----------
823 ----------
823 lines : string
824 lines : string
824 One or more lines of Python input.
825 One or more lines of Python input.
825
826
826 Returns
827 Returns
827 -------
828 -------
828 is_complete : boolean
829 is_complete : boolean
829 True if the current input source (the result of the current input
830 True if the current input source (the result of the current input
830 plus prior inputs) forms a complete Python execution block. Note that
831 plus prior inputs) forms a complete Python execution block. Note that
831 this value is also stored as a private attribute (_is_complete), so it
832 this value is also stored as a private attribute (_is_complete), so it
832 can be queried at any time.
833 can be queried at any time.
833 """
834 """
834 if not lines:
835 if not lines:
835 return super(IPythonInputSplitter, self).push(lines)
836 return super(IPythonInputSplitter, self).push(lines)
836
837
837 # We must ensure all input is pure unicode
838 # We must ensure all input is pure unicode
838 lines = cast_unicode(lines, self.encoding)
839 lines = cast_unicode(lines, self.encoding)
839
840
840 # If the entire input block is a cell magic, return after handling it
841 # If the entire input block is a cell magic, return after handling it
841 # as the rest of the transformation logic should be skipped.
842 # as the rest of the transformation logic should be skipped.
842 if lines.startswith('%%') and not \
843 if lines.startswith('%%') and not \
843 (len(lines.splitlines()) == 1 and lines.strip().endswith('?')):
844 (len(lines.splitlines()) == 1 and lines.strip().endswith('?')):
844 return self._handle_cell_magic(lines)
845 return self._handle_cell_magic(lines)
845
846
846 # In line mode, a cell magic can arrive in separate pieces
847 # In line mode, a cell magic can arrive in separate pieces
847 if self.input_mode == 'line' and self.processing_cell_magic:
848 if self.input_mode == 'line' and self.processing_cell_magic:
848 return self._line_mode_cell_append(lines)
849 return self._line_mode_cell_append(lines)
849
850
850 # The rest of the processing is for 'normal' content, i.e. IPython
851 # The rest of the processing is for 'normal' content, i.e. IPython
851 # source that we process through our transformations pipeline.
852 # source that we process through our transformations pipeline.
852 lines_list = lines.splitlines()
853 lines_list = lines.splitlines()
853
854
854 transforms = [transform_ipy_prompt, transform_classic_prompt,
855 transforms = [transform_ipy_prompt, transform_classic_prompt,
855 transform_help_end, transform_escaped,
856 transform_help_end, transform_escaped,
856 transform_assign_system, transform_assign_magic]
857 transform_assign_system, transform_assign_magic]
857
858
858 # Transform logic
859 # Transform logic
859 #
860 #
860 # We only apply the line transformers to the input if we have either no
861 # We only apply the line transformers to the input if we have either no
861 # input yet, or complete input, or if the last line of the buffer ends
862 # input yet, or complete input, or if the last line of the buffer ends
862 # with ':' (opening an indented block). This prevents the accidental
863 # with ':' (opening an indented block). This prevents the accidental
863 # transformation of escapes inside multiline expressions like
864 # transformation of escapes inside multiline expressions like
864 # triple-quoted strings or parenthesized expressions.
865 # triple-quoted strings or parenthesized expressions.
865 #
866 #
866 # The last heuristic, while ugly, ensures that the first line of an
867 # The last heuristic, while ugly, ensures that the first line of an
867 # indented block is correctly transformed.
868 # indented block is correctly transformed.
868 #
869 #
869 # FIXME: try to find a cleaner approach for this last bit.
870 # FIXME: try to find a cleaner approach for this last bit.
870
871
871 # If we were in 'block' mode, since we're going to pump the parent
872 # If we were in 'block' mode, since we're going to pump the parent
872 # class by hand line by line, we need to temporarily switch out to
873 # class by hand line by line, we need to temporarily switch out to
873 # 'line' mode, do a single manual reset and then feed the lines one
874 # 'line' mode, do a single manual reset and then feed the lines one
874 # by one. Note that this only matters if the input has more than one
875 # by one. Note that this only matters if the input has more than one
875 # line.
876 # line.
876 changed_input_mode = False
877 changed_input_mode = False
877
878
878 if self.input_mode == 'cell':
879 if self.input_mode == 'cell':
879 self.reset()
880 self.reset()
880 changed_input_mode = True
881 changed_input_mode = True
881 saved_input_mode = 'cell'
882 saved_input_mode = 'cell'
882 self.input_mode = 'line'
883 self.input_mode = 'line'
883
884
884 # Store raw source before applying any transformations to it. Note
885 # Store raw source before applying any transformations to it. Note
885 # that this must be done *after* the reset() call that would otherwise
886 # that this must be done *after* the reset() call that would otherwise
886 # flush the buffer.
887 # flush the buffer.
887 self._store(lines, self._buffer_raw, 'source_raw')
888 self._store(lines, self._buffer_raw, 'source_raw')
888
889
889 try:
890 try:
890 push = super(IPythonInputSplitter, self).push
891 push = super(IPythonInputSplitter, self).push
891 buf = self._buffer
892 buf = self._buffer
892 for line in lines_list:
893 for line in lines_list:
893 if self._is_complete or not buf or \
894 if self._is_complete or not buf or \
894 (buf and buf[-1].rstrip().endswith((':', ','))):
895 (buf and buf[-1].rstrip().endswith((':', ','))):
895 for f in transforms:
896 for f in transforms:
896 line = f(line)
897 line = f(line)
897
898
898 out = push(line)
899 out = push(line)
899 finally:
900 finally:
900 if changed_input_mode:
901 if changed_input_mode:
901 self.input_mode = saved_input_mode
902 self.input_mode = saved_input_mode
902 return out
903 return out
@@ -1,2989 +1,2989 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Main IPython class."""
2 """Main IPython class."""
3
3
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
7 # Copyright (C) 2008-2011 The IPython Development Team
7 # Copyright (C) 2008-2011 The IPython Development Team
8 #
8 #
9 # Distributed under the terms of the BSD License. The full license is in
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
10 # the file COPYING, distributed as part of this software.
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12
12
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 # Imports
14 # Imports
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16
16
17 from __future__ import with_statement
17 from __future__ import with_statement
18 from __future__ import absolute_import
18 from __future__ import absolute_import
19
19
20 import __builtin__ as builtin_mod
20 import __builtin__ as builtin_mod
21 import __future__
21 import __future__
22 import abc
22 import abc
23 import ast
23 import ast
24 import atexit
24 import atexit
25 import os
25 import os
26 import re
26 import re
27 import runpy
27 import runpy
28 import sys
28 import sys
29 import tempfile
29 import tempfile
30 import types
30 import types
31
31
32 # We need to use nested to support python 2.6, once we move to >=2.7, we can
32 # We need to use nested to support python 2.6, once we move to >=2.7, we can
33 # use the with keyword's new builtin support for nested managers
33 # use the with keyword's new builtin support for nested managers
34 try:
34 try:
35 from contextlib import nested
35 from contextlib import nested
36 except:
36 except:
37 from IPython.utils.nested_context import nested
37 from IPython.utils.nested_context import nested
38
38
39 from IPython.config.configurable import SingletonConfigurable
39 from IPython.config.configurable import SingletonConfigurable
40 from IPython.core import debugger, oinspect
40 from IPython.core import debugger, oinspect
41 from IPython.core import history as ipcorehist
41 from IPython.core import history as ipcorehist
42 from IPython.core import magic
42 from IPython.core import magic
43 from IPython.core import page
43 from IPython.core import page
44 from IPython.core import prefilter
44 from IPython.core import prefilter
45 from IPython.core import shadowns
45 from IPython.core import shadowns
46 from IPython.core import ultratb
46 from IPython.core import ultratb
47 from IPython.core.alias import AliasManager, AliasError
47 from IPython.core.alias import AliasManager, AliasError
48 from IPython.core.autocall import ExitAutocall
48 from IPython.core.autocall import ExitAutocall
49 from IPython.core.builtin_trap import BuiltinTrap
49 from IPython.core.builtin_trap import BuiltinTrap
50 from IPython.core.compilerop import CachingCompiler
50 from IPython.core.compilerop import CachingCompiler
51 from IPython.core.display_trap import DisplayTrap
51 from IPython.core.display_trap import DisplayTrap
52 from IPython.core.displayhook import DisplayHook
52 from IPython.core.displayhook import DisplayHook
53 from IPython.core.displaypub import DisplayPublisher
53 from IPython.core.displaypub import DisplayPublisher
54 from IPython.core.error import UsageError
54 from IPython.core.error import UsageError
55 from IPython.core.extensions import ExtensionManager
55 from IPython.core.extensions import ExtensionManager
56 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
56 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
57 from IPython.core.formatters import DisplayFormatter
57 from IPython.core.formatters import DisplayFormatter
58 from IPython.core.history import HistoryManager
58 from IPython.core.history import HistoryManager
59 from IPython.core.inputsplitter import IPythonInputSplitter
59 from IPython.core.inputsplitter import IPythonInputSplitter, ESC_MAGIC, ESC_MAGIC2
60 from IPython.core.logger import Logger
60 from IPython.core.logger import Logger
61 from IPython.core.macro import Macro
61 from IPython.core.macro import Macro
62 from IPython.core.payload import PayloadManager
62 from IPython.core.payload import PayloadManager
63 from IPython.core.plugin import PluginManager
63 from IPython.core.plugin import PluginManager
64 from IPython.core.prefilter import PrefilterManager, ESC_MAGIC, ESC_CELL_MAGIC
64 from IPython.core.prefilter import PrefilterManager
65 from IPython.core.profiledir import ProfileDir
65 from IPython.core.profiledir import ProfileDir
66 from IPython.core.pylabtools import pylab_activate
66 from IPython.core.pylabtools import pylab_activate
67 from IPython.core.prompts import PromptManager
67 from IPython.core.prompts import PromptManager
68 from IPython.utils import PyColorize
68 from IPython.utils import PyColorize
69 from IPython.utils import io
69 from IPython.utils import io
70 from IPython.utils import py3compat
70 from IPython.utils import py3compat
71 from IPython.utils import openpy
71 from IPython.utils import openpy
72 from IPython.utils.doctestreload import doctest_reload
72 from IPython.utils.doctestreload import doctest_reload
73 from IPython.utils.io import ask_yes_no
73 from IPython.utils.io import ask_yes_no
74 from IPython.utils.ipstruct import Struct
74 from IPython.utils.ipstruct import Struct
75 from IPython.utils.path import get_home_dir, get_ipython_dir, get_py_filename, unquote_filename
75 from IPython.utils.path import get_home_dir, get_ipython_dir, get_py_filename, unquote_filename
76 from IPython.utils.pickleshare import PickleShareDB
76 from IPython.utils.pickleshare import PickleShareDB
77 from IPython.utils.process import system, getoutput
77 from IPython.utils.process import system, getoutput
78 from IPython.utils.strdispatch import StrDispatch
78 from IPython.utils.strdispatch import StrDispatch
79 from IPython.utils.syspathcontext import prepended_to_syspath
79 from IPython.utils.syspathcontext import prepended_to_syspath
80 from IPython.utils.text import (format_screen, LSString, SList,
80 from IPython.utils.text import (format_screen, LSString, SList,
81 DollarFormatter)
81 DollarFormatter)
82 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
82 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
83 List, Unicode, Instance, Type)
83 List, Unicode, Instance, Type)
84 from IPython.utils.warn import warn, error
84 from IPython.utils.warn import warn, error
85 import IPython.core.hooks
85 import IPython.core.hooks
86
86
87 #-----------------------------------------------------------------------------
87 #-----------------------------------------------------------------------------
88 # Globals
88 # Globals
89 #-----------------------------------------------------------------------------
89 #-----------------------------------------------------------------------------
90
90
91 # compiled regexps for autoindent management
91 # compiled regexps for autoindent management
92 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
92 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
93
93
94 #-----------------------------------------------------------------------------
94 #-----------------------------------------------------------------------------
95 # Utilities
95 # Utilities
96 #-----------------------------------------------------------------------------
96 #-----------------------------------------------------------------------------
97
97
98 def softspace(file, newvalue):
98 def softspace(file, newvalue):
99 """Copied from code.py, to remove the dependency"""
99 """Copied from code.py, to remove the dependency"""
100
100
101 oldvalue = 0
101 oldvalue = 0
102 try:
102 try:
103 oldvalue = file.softspace
103 oldvalue = file.softspace
104 except AttributeError:
104 except AttributeError:
105 pass
105 pass
106 try:
106 try:
107 file.softspace = newvalue
107 file.softspace = newvalue
108 except (AttributeError, TypeError):
108 except (AttributeError, TypeError):
109 # "attribute-less object" or "read-only attributes"
109 # "attribute-less object" or "read-only attributes"
110 pass
110 pass
111 return oldvalue
111 return oldvalue
112
112
113
113
114 def no_op(*a, **kw): pass
114 def no_op(*a, **kw): pass
115
115
116 class NoOpContext(object):
116 class NoOpContext(object):
117 def __enter__(self): pass
117 def __enter__(self): pass
118 def __exit__(self, type, value, traceback): pass
118 def __exit__(self, type, value, traceback): pass
119 no_op_context = NoOpContext()
119 no_op_context = NoOpContext()
120
120
121 class SpaceInInput(Exception): pass
121 class SpaceInInput(Exception): pass
122
122
123 class Bunch: pass
123 class Bunch: pass
124
124
125
125
126 def get_default_colors():
126 def get_default_colors():
127 if sys.platform=='darwin':
127 if sys.platform=='darwin':
128 return "LightBG"
128 return "LightBG"
129 elif os.name=='nt':
129 elif os.name=='nt':
130 return 'Linux'
130 return 'Linux'
131 else:
131 else:
132 return 'Linux'
132 return 'Linux'
133
133
134
134
135 class SeparateUnicode(Unicode):
135 class SeparateUnicode(Unicode):
136 """A Unicode subclass to validate separate_in, separate_out, etc.
136 """A Unicode subclass to validate separate_in, separate_out, etc.
137
137
138 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
138 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
139 """
139 """
140
140
141 def validate(self, obj, value):
141 def validate(self, obj, value):
142 if value == '0': value = ''
142 if value == '0': value = ''
143 value = value.replace('\\n','\n')
143 value = value.replace('\\n','\n')
144 return super(SeparateUnicode, self).validate(obj, value)
144 return super(SeparateUnicode, self).validate(obj, value)
145
145
146
146
147 class ReadlineNoRecord(object):
147 class ReadlineNoRecord(object):
148 """Context manager to execute some code, then reload readline history
148 """Context manager to execute some code, then reload readline history
149 so that interactive input to the code doesn't appear when pressing up."""
149 so that interactive input to the code doesn't appear when pressing up."""
150 def __init__(self, shell):
150 def __init__(self, shell):
151 self.shell = shell
151 self.shell = shell
152 self._nested_level = 0
152 self._nested_level = 0
153
153
154 def __enter__(self):
154 def __enter__(self):
155 if self._nested_level == 0:
155 if self._nested_level == 0:
156 try:
156 try:
157 self.orig_length = self.current_length()
157 self.orig_length = self.current_length()
158 self.readline_tail = self.get_readline_tail()
158 self.readline_tail = self.get_readline_tail()
159 except (AttributeError, IndexError): # Can fail with pyreadline
159 except (AttributeError, IndexError): # Can fail with pyreadline
160 self.orig_length, self.readline_tail = 999999, []
160 self.orig_length, self.readline_tail = 999999, []
161 self._nested_level += 1
161 self._nested_level += 1
162
162
163 def __exit__(self, type, value, traceback):
163 def __exit__(self, type, value, traceback):
164 self._nested_level -= 1
164 self._nested_level -= 1
165 if self._nested_level == 0:
165 if self._nested_level == 0:
166 # Try clipping the end if it's got longer
166 # Try clipping the end if it's got longer
167 try:
167 try:
168 e = self.current_length() - self.orig_length
168 e = self.current_length() - self.orig_length
169 if e > 0:
169 if e > 0:
170 for _ in range(e):
170 for _ in range(e):
171 self.shell.readline.remove_history_item(self.orig_length)
171 self.shell.readline.remove_history_item(self.orig_length)
172
172
173 # If it still doesn't match, just reload readline history.
173 # If it still doesn't match, just reload readline history.
174 if self.current_length() != self.orig_length \
174 if self.current_length() != self.orig_length \
175 or self.get_readline_tail() != self.readline_tail:
175 or self.get_readline_tail() != self.readline_tail:
176 self.shell.refill_readline_hist()
176 self.shell.refill_readline_hist()
177 except (AttributeError, IndexError):
177 except (AttributeError, IndexError):
178 pass
178 pass
179 # Returning False will cause exceptions to propagate
179 # Returning False will cause exceptions to propagate
180 return False
180 return False
181
181
182 def current_length(self):
182 def current_length(self):
183 return self.shell.readline.get_current_history_length()
183 return self.shell.readline.get_current_history_length()
184
184
185 def get_readline_tail(self, n=10):
185 def get_readline_tail(self, n=10):
186 """Get the last n items in readline history."""
186 """Get the last n items in readline history."""
187 end = self.shell.readline.get_current_history_length() + 1
187 end = self.shell.readline.get_current_history_length() + 1
188 start = max(end-n, 1)
188 start = max(end-n, 1)
189 ghi = self.shell.readline.get_history_item
189 ghi = self.shell.readline.get_history_item
190 return [ghi(x) for x in range(start, end)]
190 return [ghi(x) for x in range(start, end)]
191
191
192 #-----------------------------------------------------------------------------
192 #-----------------------------------------------------------------------------
193 # Main IPython class
193 # Main IPython class
194 #-----------------------------------------------------------------------------
194 #-----------------------------------------------------------------------------
195
195
196 class InteractiveShell(SingletonConfigurable):
196 class InteractiveShell(SingletonConfigurable):
197 """An enhanced, interactive shell for Python."""
197 """An enhanced, interactive shell for Python."""
198
198
199 _instance = None
199 _instance = None
200
200
201 autocall = Enum((0,1,2), default_value=0, config=True, help=
201 autocall = Enum((0,1,2), default_value=0, config=True, help=
202 """
202 """
203 Make IPython automatically call any callable object even if you didn't
203 Make IPython automatically call any callable object even if you didn't
204 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
204 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
205 automatically. The value can be '0' to disable the feature, '1' for
205 automatically. The value can be '0' to disable the feature, '1' for
206 'smart' autocall, where it is not applied if there are no more
206 'smart' autocall, where it is not applied if there are no more
207 arguments on the line, and '2' for 'full' autocall, where all callable
207 arguments on the line, and '2' for 'full' autocall, where all callable
208 objects are automatically called (even if no arguments are present).
208 objects are automatically called (even if no arguments are present).
209 """
209 """
210 )
210 )
211 # TODO: remove all autoindent logic and put into frontends.
211 # TODO: remove all autoindent logic and put into frontends.
212 # We can't do this yet because even runlines uses the autoindent.
212 # We can't do this yet because even runlines uses the autoindent.
213 autoindent = CBool(True, config=True, help=
213 autoindent = CBool(True, config=True, help=
214 """
214 """
215 Autoindent IPython code entered interactively.
215 Autoindent IPython code entered interactively.
216 """
216 """
217 )
217 )
218 automagic = CBool(True, config=True, help=
218 automagic = CBool(True, config=True, help=
219 """
219 """
220 Enable magic commands to be called without the leading %.
220 Enable magic commands to be called without the leading %.
221 """
221 """
222 )
222 )
223 cache_size = Integer(1000, config=True, help=
223 cache_size = Integer(1000, config=True, help=
224 """
224 """
225 Set the size of the output cache. The default is 1000, you can
225 Set the size of the output cache. The default is 1000, you can
226 change it permanently in your config file. Setting it to 0 completely
226 change it permanently in your config file. Setting it to 0 completely
227 disables the caching system, and the minimum value accepted is 20 (if
227 disables the caching system, and the minimum value accepted is 20 (if
228 you provide a value less than 20, it is reset to 0 and a warning is
228 you provide a value less than 20, it is reset to 0 and a warning is
229 issued). This limit is defined because otherwise you'll spend more
229 issued). This limit is defined because otherwise you'll spend more
230 time re-flushing a too small cache than working
230 time re-flushing a too small cache than working
231 """
231 """
232 )
232 )
233 color_info = CBool(True, config=True, help=
233 color_info = CBool(True, config=True, help=
234 """
234 """
235 Use colors for displaying information about objects. Because this
235 Use colors for displaying information about objects. Because this
236 information is passed through a pager (like 'less'), and some pagers
236 information is passed through a pager (like 'less'), and some pagers
237 get confused with color codes, this capability can be turned off.
237 get confused with color codes, this capability can be turned off.
238 """
238 """
239 )
239 )
240 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
240 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
241 default_value=get_default_colors(), config=True,
241 default_value=get_default_colors(), config=True,
242 help="Set the color scheme (NoColor, Linux, or LightBG)."
242 help="Set the color scheme (NoColor, Linux, or LightBG)."
243 )
243 )
244 colors_force = CBool(False, help=
244 colors_force = CBool(False, help=
245 """
245 """
246 Force use of ANSI color codes, regardless of OS and readline
246 Force use of ANSI color codes, regardless of OS and readline
247 availability.
247 availability.
248 """
248 """
249 # FIXME: This is essentially a hack to allow ZMQShell to show colors
249 # FIXME: This is essentially a hack to allow ZMQShell to show colors
250 # without readline on Win32. When the ZMQ formatting system is
250 # without readline on Win32. When the ZMQ formatting system is
251 # refactored, this should be removed.
251 # refactored, this should be removed.
252 )
252 )
253 debug = CBool(False, config=True)
253 debug = CBool(False, config=True)
254 deep_reload = CBool(False, config=True, help=
254 deep_reload = CBool(False, config=True, help=
255 """
255 """
256 Enable deep (recursive) reloading by default. IPython can use the
256 Enable deep (recursive) reloading by default. IPython can use the
257 deep_reload module which reloads changes in modules recursively (it
257 deep_reload module which reloads changes in modules recursively (it
258 replaces the reload() function, so you don't need to change anything to
258 replaces the reload() function, so you don't need to change anything to
259 use it). deep_reload() forces a full reload of modules whose code may
259 use it). deep_reload() forces a full reload of modules whose code may
260 have changed, which the default reload() function does not. When
260 have changed, which the default reload() function does not. When
261 deep_reload is off, IPython will use the normal reload(), but
261 deep_reload is off, IPython will use the normal reload(), but
262 deep_reload will still be available as dreload().
262 deep_reload will still be available as dreload().
263 """
263 """
264 )
264 )
265 disable_failing_post_execute = CBool(False, config=True,
265 disable_failing_post_execute = CBool(False, config=True,
266 help="Don't call post-execute functions that have failed in the past."
266 help="Don't call post-execute functions that have failed in the past."
267 )
267 )
268 display_formatter = Instance(DisplayFormatter)
268 display_formatter = Instance(DisplayFormatter)
269 displayhook_class = Type(DisplayHook)
269 displayhook_class = Type(DisplayHook)
270 display_pub_class = Type(DisplayPublisher)
270 display_pub_class = Type(DisplayPublisher)
271
271
272 exit_now = CBool(False)
272 exit_now = CBool(False)
273 exiter = Instance(ExitAutocall)
273 exiter = Instance(ExitAutocall)
274 def _exiter_default(self):
274 def _exiter_default(self):
275 return ExitAutocall(self)
275 return ExitAutocall(self)
276 # Monotonically increasing execution counter
276 # Monotonically increasing execution counter
277 execution_count = Integer(1)
277 execution_count = Integer(1)
278 filename = Unicode("<ipython console>")
278 filename = Unicode("<ipython console>")
279 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
279 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
280
280
281 # Input splitter, to split entire cells of input into either individual
281 # Input splitter, to split entire cells of input into either individual
282 # interactive statements or whole blocks.
282 # interactive statements or whole blocks.
283 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
283 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
284 (), {})
284 (), {})
285 logstart = CBool(False, config=True, help=
285 logstart = CBool(False, config=True, help=
286 """
286 """
287 Start logging to the default log file.
287 Start logging to the default log file.
288 """
288 """
289 )
289 )
290 logfile = Unicode('', config=True, help=
290 logfile = Unicode('', config=True, help=
291 """
291 """
292 The name of the logfile to use.
292 The name of the logfile to use.
293 """
293 """
294 )
294 )
295 logappend = Unicode('', config=True, help=
295 logappend = Unicode('', config=True, help=
296 """
296 """
297 Start logging to the given file in append mode.
297 Start logging to the given file in append mode.
298 """
298 """
299 )
299 )
300 object_info_string_level = Enum((0,1,2), default_value=0,
300 object_info_string_level = Enum((0,1,2), default_value=0,
301 config=True)
301 config=True)
302 pdb = CBool(False, config=True, help=
302 pdb = CBool(False, config=True, help=
303 """
303 """
304 Automatically call the pdb debugger after every exception.
304 Automatically call the pdb debugger after every exception.
305 """
305 """
306 )
306 )
307 multiline_history = CBool(sys.platform != 'win32', config=True,
307 multiline_history = CBool(sys.platform != 'win32', config=True,
308 help="Save multi-line entries as one entry in readline history"
308 help="Save multi-line entries as one entry in readline history"
309 )
309 )
310
310
311 # deprecated prompt traits:
311 # deprecated prompt traits:
312
312
313 prompt_in1 = Unicode('In [\\#]: ', config=True,
313 prompt_in1 = Unicode('In [\\#]: ', config=True,
314 help="Deprecated, use PromptManager.in_template")
314 help="Deprecated, use PromptManager.in_template")
315 prompt_in2 = Unicode(' .\\D.: ', config=True,
315 prompt_in2 = Unicode(' .\\D.: ', config=True,
316 help="Deprecated, use PromptManager.in2_template")
316 help="Deprecated, use PromptManager.in2_template")
317 prompt_out = Unicode('Out[\\#]: ', config=True,
317 prompt_out = Unicode('Out[\\#]: ', config=True,
318 help="Deprecated, use PromptManager.out_template")
318 help="Deprecated, use PromptManager.out_template")
319 prompts_pad_left = CBool(True, config=True,
319 prompts_pad_left = CBool(True, config=True,
320 help="Deprecated, use PromptManager.justify")
320 help="Deprecated, use PromptManager.justify")
321
321
322 def _prompt_trait_changed(self, name, old, new):
322 def _prompt_trait_changed(self, name, old, new):
323 table = {
323 table = {
324 'prompt_in1' : 'in_template',
324 'prompt_in1' : 'in_template',
325 'prompt_in2' : 'in2_template',
325 'prompt_in2' : 'in2_template',
326 'prompt_out' : 'out_template',
326 'prompt_out' : 'out_template',
327 'prompts_pad_left' : 'justify',
327 'prompts_pad_left' : 'justify',
328 }
328 }
329 warn("InteractiveShell.{name} is deprecated, use PromptManager.{newname}\n".format(
329 warn("InteractiveShell.{name} is deprecated, use PromptManager.{newname}\n".format(
330 name=name, newname=table[name])
330 name=name, newname=table[name])
331 )
331 )
332 # protect against weird cases where self.config may not exist:
332 # protect against weird cases where self.config may not exist:
333 if self.config is not None:
333 if self.config is not None:
334 # propagate to corresponding PromptManager trait
334 # propagate to corresponding PromptManager trait
335 setattr(self.config.PromptManager, table[name], new)
335 setattr(self.config.PromptManager, table[name], new)
336
336
337 _prompt_in1_changed = _prompt_trait_changed
337 _prompt_in1_changed = _prompt_trait_changed
338 _prompt_in2_changed = _prompt_trait_changed
338 _prompt_in2_changed = _prompt_trait_changed
339 _prompt_out_changed = _prompt_trait_changed
339 _prompt_out_changed = _prompt_trait_changed
340 _prompt_pad_left_changed = _prompt_trait_changed
340 _prompt_pad_left_changed = _prompt_trait_changed
341
341
342 show_rewritten_input = CBool(True, config=True,
342 show_rewritten_input = CBool(True, config=True,
343 help="Show rewritten input, e.g. for autocall."
343 help="Show rewritten input, e.g. for autocall."
344 )
344 )
345
345
346 quiet = CBool(False, config=True)
346 quiet = CBool(False, config=True)
347
347
348 history_length = Integer(10000, config=True)
348 history_length = Integer(10000, config=True)
349
349
350 # The readline stuff will eventually be moved to the terminal subclass
350 # The readline stuff will eventually be moved to the terminal subclass
351 # but for now, we can't do that as readline is welded in everywhere.
351 # but for now, we can't do that as readline is welded in everywhere.
352 readline_use = CBool(True, config=True)
352 readline_use = CBool(True, config=True)
353 readline_remove_delims = Unicode('-/~', config=True)
353 readline_remove_delims = Unicode('-/~', config=True)
354 # don't use \M- bindings by default, because they
354 # don't use \M- bindings by default, because they
355 # conflict with 8-bit encodings. See gh-58,gh-88
355 # conflict with 8-bit encodings. See gh-58,gh-88
356 readline_parse_and_bind = List([
356 readline_parse_and_bind = List([
357 'tab: complete',
357 'tab: complete',
358 '"\C-l": clear-screen',
358 '"\C-l": clear-screen',
359 'set show-all-if-ambiguous on',
359 'set show-all-if-ambiguous on',
360 '"\C-o": tab-insert',
360 '"\C-o": tab-insert',
361 '"\C-r": reverse-search-history',
361 '"\C-r": reverse-search-history',
362 '"\C-s": forward-search-history',
362 '"\C-s": forward-search-history',
363 '"\C-p": history-search-backward',
363 '"\C-p": history-search-backward',
364 '"\C-n": history-search-forward',
364 '"\C-n": history-search-forward',
365 '"\e[A": history-search-backward',
365 '"\e[A": history-search-backward',
366 '"\e[B": history-search-forward',
366 '"\e[B": history-search-forward',
367 '"\C-k": kill-line',
367 '"\C-k": kill-line',
368 '"\C-u": unix-line-discard',
368 '"\C-u": unix-line-discard',
369 ], allow_none=False, config=True)
369 ], allow_none=False, config=True)
370
370
371 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none'],
371 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none'],
372 default_value='last_expr', config=True,
372 default_value='last_expr', config=True,
373 help="""
373 help="""
374 'all', 'last', 'last_expr' or 'none'," specifying which nodes should be
374 'all', 'last', 'last_expr' or 'none'," specifying which nodes should be
375 run interactively (displaying output from expressions).""")
375 run interactively (displaying output from expressions).""")
376
376
377 # TODO: this part of prompt management should be moved to the frontends.
377 # TODO: this part of prompt management should be moved to the frontends.
378 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
378 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
379 separate_in = SeparateUnicode('\n', config=True)
379 separate_in = SeparateUnicode('\n', config=True)
380 separate_out = SeparateUnicode('', config=True)
380 separate_out = SeparateUnicode('', config=True)
381 separate_out2 = SeparateUnicode('', config=True)
381 separate_out2 = SeparateUnicode('', config=True)
382 wildcards_case_sensitive = CBool(True, config=True)
382 wildcards_case_sensitive = CBool(True, config=True)
383 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
383 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
384 default_value='Context', config=True)
384 default_value='Context', config=True)
385
385
386 # Subcomponents of InteractiveShell
386 # Subcomponents of InteractiveShell
387 alias_manager = Instance('IPython.core.alias.AliasManager')
387 alias_manager = Instance('IPython.core.alias.AliasManager')
388 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
388 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
389 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
389 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
390 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
390 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
391 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
391 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
392 plugin_manager = Instance('IPython.core.plugin.PluginManager')
392 plugin_manager = Instance('IPython.core.plugin.PluginManager')
393 payload_manager = Instance('IPython.core.payload.PayloadManager')
393 payload_manager = Instance('IPython.core.payload.PayloadManager')
394 history_manager = Instance('IPython.core.history.HistoryManager')
394 history_manager = Instance('IPython.core.history.HistoryManager')
395 magics_manager = Instance('IPython.core.magic.MagicsManager')
395 magics_manager = Instance('IPython.core.magic.MagicsManager')
396
396
397 profile_dir = Instance('IPython.core.application.ProfileDir')
397 profile_dir = Instance('IPython.core.application.ProfileDir')
398 @property
398 @property
399 def profile(self):
399 def profile(self):
400 if self.profile_dir is not None:
400 if self.profile_dir is not None:
401 name = os.path.basename(self.profile_dir.location)
401 name = os.path.basename(self.profile_dir.location)
402 return name.replace('profile_','')
402 return name.replace('profile_','')
403
403
404
404
405 # Private interface
405 # Private interface
406 _post_execute = Instance(dict)
406 _post_execute = Instance(dict)
407
407
408 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
408 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
409 user_module=None, user_ns=None,
409 user_module=None, user_ns=None,
410 custom_exceptions=((), None)):
410 custom_exceptions=((), None)):
411
411
412 # This is where traits with a config_key argument are updated
412 # This is where traits with a config_key argument are updated
413 # from the values on config.
413 # from the values on config.
414 super(InteractiveShell, self).__init__(config=config)
414 super(InteractiveShell, self).__init__(config=config)
415 self.configurables = [self]
415 self.configurables = [self]
416
416
417 # These are relatively independent and stateless
417 # These are relatively independent and stateless
418 self.init_ipython_dir(ipython_dir)
418 self.init_ipython_dir(ipython_dir)
419 self.init_profile_dir(profile_dir)
419 self.init_profile_dir(profile_dir)
420 self.init_instance_attrs()
420 self.init_instance_attrs()
421 self.init_environment()
421 self.init_environment()
422
422
423 # Check if we're in a virtualenv, and set up sys.path.
423 # Check if we're in a virtualenv, and set up sys.path.
424 self.init_virtualenv()
424 self.init_virtualenv()
425
425
426 # Create namespaces (user_ns, user_global_ns, etc.)
426 # Create namespaces (user_ns, user_global_ns, etc.)
427 self.init_create_namespaces(user_module, user_ns)
427 self.init_create_namespaces(user_module, user_ns)
428 # This has to be done after init_create_namespaces because it uses
428 # This has to be done after init_create_namespaces because it uses
429 # something in self.user_ns, but before init_sys_modules, which
429 # something in self.user_ns, but before init_sys_modules, which
430 # is the first thing to modify sys.
430 # is the first thing to modify sys.
431 # TODO: When we override sys.stdout and sys.stderr before this class
431 # TODO: When we override sys.stdout and sys.stderr before this class
432 # is created, we are saving the overridden ones here. Not sure if this
432 # is created, we are saving the overridden ones here. Not sure if this
433 # is what we want to do.
433 # is what we want to do.
434 self.save_sys_module_state()
434 self.save_sys_module_state()
435 self.init_sys_modules()
435 self.init_sys_modules()
436
436
437 # While we're trying to have each part of the code directly access what
437 # While we're trying to have each part of the code directly access what
438 # it needs without keeping redundant references to objects, we have too
438 # it needs without keeping redundant references to objects, we have too
439 # much legacy code that expects ip.db to exist.
439 # much legacy code that expects ip.db to exist.
440 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
440 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
441
441
442 self.init_history()
442 self.init_history()
443 self.init_encoding()
443 self.init_encoding()
444 self.init_prefilter()
444 self.init_prefilter()
445
445
446 self.init_syntax_highlighting()
446 self.init_syntax_highlighting()
447 self.init_hooks()
447 self.init_hooks()
448 self.init_pushd_popd_magic()
448 self.init_pushd_popd_magic()
449 # self.init_traceback_handlers use to be here, but we moved it below
449 # self.init_traceback_handlers use to be here, but we moved it below
450 # because it and init_io have to come after init_readline.
450 # because it and init_io have to come after init_readline.
451 self.init_user_ns()
451 self.init_user_ns()
452 self.init_logger()
452 self.init_logger()
453 self.init_alias()
453 self.init_alias()
454 self.init_builtins()
454 self.init_builtins()
455
455
456 # pre_config_initialization
456 # pre_config_initialization
457
457
458 # The next section should contain everything that was in ipmaker.
458 # The next section should contain everything that was in ipmaker.
459 self.init_logstart()
459 self.init_logstart()
460
460
461 # The following was in post_config_initialization
461 # The following was in post_config_initialization
462 self.init_inspector()
462 self.init_inspector()
463 # init_readline() must come before init_io(), because init_io uses
463 # init_readline() must come before init_io(), because init_io uses
464 # readline related things.
464 # readline related things.
465 self.init_readline()
465 self.init_readline()
466 # We save this here in case user code replaces raw_input, but it needs
466 # We save this here in case user code replaces raw_input, but it needs
467 # to be after init_readline(), because PyPy's readline works by replacing
467 # to be after init_readline(), because PyPy's readline works by replacing
468 # raw_input.
468 # raw_input.
469 if py3compat.PY3:
469 if py3compat.PY3:
470 self.raw_input_original = input
470 self.raw_input_original = input
471 else:
471 else:
472 self.raw_input_original = raw_input
472 self.raw_input_original = raw_input
473 # init_completer must come after init_readline, because it needs to
473 # init_completer must come after init_readline, because it needs to
474 # know whether readline is present or not system-wide to configure the
474 # know whether readline is present or not system-wide to configure the
475 # completers, since the completion machinery can now operate
475 # completers, since the completion machinery can now operate
476 # independently of readline (e.g. over the network)
476 # independently of readline (e.g. over the network)
477 self.init_completer()
477 self.init_completer()
478 # TODO: init_io() needs to happen before init_traceback handlers
478 # TODO: init_io() needs to happen before init_traceback handlers
479 # because the traceback handlers hardcode the stdout/stderr streams.
479 # because the traceback handlers hardcode the stdout/stderr streams.
480 # This logic in in debugger.Pdb and should eventually be changed.
480 # This logic in in debugger.Pdb and should eventually be changed.
481 self.init_io()
481 self.init_io()
482 self.init_traceback_handlers(custom_exceptions)
482 self.init_traceback_handlers(custom_exceptions)
483 self.init_prompts()
483 self.init_prompts()
484 self.init_display_formatter()
484 self.init_display_formatter()
485 self.init_display_pub()
485 self.init_display_pub()
486 self.init_displayhook()
486 self.init_displayhook()
487 self.init_reload_doctest()
487 self.init_reload_doctest()
488 self.init_magics()
488 self.init_magics()
489 self.init_pdb()
489 self.init_pdb()
490 self.init_extension_manager()
490 self.init_extension_manager()
491 self.init_plugin_manager()
491 self.init_plugin_manager()
492 self.init_payload()
492 self.init_payload()
493 self.hooks.late_startup_hook()
493 self.hooks.late_startup_hook()
494 atexit.register(self.atexit_operations)
494 atexit.register(self.atexit_operations)
495
495
496 def get_ipython(self):
496 def get_ipython(self):
497 """Return the currently running IPython instance."""
497 """Return the currently running IPython instance."""
498 return self
498 return self
499
499
500 #-------------------------------------------------------------------------
500 #-------------------------------------------------------------------------
501 # Trait changed handlers
501 # Trait changed handlers
502 #-------------------------------------------------------------------------
502 #-------------------------------------------------------------------------
503
503
504 def _ipython_dir_changed(self, name, new):
504 def _ipython_dir_changed(self, name, new):
505 if not os.path.isdir(new):
505 if not os.path.isdir(new):
506 os.makedirs(new, mode = 0777)
506 os.makedirs(new, mode = 0777)
507
507
508 def set_autoindent(self,value=None):
508 def set_autoindent(self,value=None):
509 """Set the autoindent flag, checking for readline support.
509 """Set the autoindent flag, checking for readline support.
510
510
511 If called with no arguments, it acts as a toggle."""
511 If called with no arguments, it acts as a toggle."""
512
512
513 if value != 0 and not self.has_readline:
513 if value != 0 and not self.has_readline:
514 if os.name == 'posix':
514 if os.name == 'posix':
515 warn("The auto-indent feature requires the readline library")
515 warn("The auto-indent feature requires the readline library")
516 self.autoindent = 0
516 self.autoindent = 0
517 return
517 return
518 if value is None:
518 if value is None:
519 self.autoindent = not self.autoindent
519 self.autoindent = not self.autoindent
520 else:
520 else:
521 self.autoindent = value
521 self.autoindent = value
522
522
523 #-------------------------------------------------------------------------
523 #-------------------------------------------------------------------------
524 # init_* methods called by __init__
524 # init_* methods called by __init__
525 #-------------------------------------------------------------------------
525 #-------------------------------------------------------------------------
526
526
527 def init_ipython_dir(self, ipython_dir):
527 def init_ipython_dir(self, ipython_dir):
528 if ipython_dir is not None:
528 if ipython_dir is not None:
529 self.ipython_dir = ipython_dir
529 self.ipython_dir = ipython_dir
530 return
530 return
531
531
532 self.ipython_dir = get_ipython_dir()
532 self.ipython_dir = get_ipython_dir()
533
533
534 def init_profile_dir(self, profile_dir):
534 def init_profile_dir(self, profile_dir):
535 if profile_dir is not None:
535 if profile_dir is not None:
536 self.profile_dir = profile_dir
536 self.profile_dir = profile_dir
537 return
537 return
538 self.profile_dir =\
538 self.profile_dir =\
539 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
539 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
540
540
541 def init_instance_attrs(self):
541 def init_instance_attrs(self):
542 self.more = False
542 self.more = False
543
543
544 # command compiler
544 # command compiler
545 self.compile = CachingCompiler()
545 self.compile = CachingCompiler()
546
546
547 # Make an empty namespace, which extension writers can rely on both
547 # Make an empty namespace, which extension writers can rely on both
548 # existing and NEVER being used by ipython itself. This gives them a
548 # existing and NEVER being used by ipython itself. This gives them a
549 # convenient location for storing additional information and state
549 # convenient location for storing additional information and state
550 # their extensions may require, without fear of collisions with other
550 # their extensions may require, without fear of collisions with other
551 # ipython names that may develop later.
551 # ipython names that may develop later.
552 self.meta = Struct()
552 self.meta = Struct()
553
553
554 # Temporary files used for various purposes. Deleted at exit.
554 # Temporary files used for various purposes. Deleted at exit.
555 self.tempfiles = []
555 self.tempfiles = []
556
556
557 # Keep track of readline usage (later set by init_readline)
557 # Keep track of readline usage (later set by init_readline)
558 self.has_readline = False
558 self.has_readline = False
559
559
560 # keep track of where we started running (mainly for crash post-mortem)
560 # keep track of where we started running (mainly for crash post-mortem)
561 # This is not being used anywhere currently.
561 # This is not being used anywhere currently.
562 self.starting_dir = os.getcwdu()
562 self.starting_dir = os.getcwdu()
563
563
564 # Indentation management
564 # Indentation management
565 self.indent_current_nsp = 0
565 self.indent_current_nsp = 0
566
566
567 # Dict to track post-execution functions that have been registered
567 # Dict to track post-execution functions that have been registered
568 self._post_execute = {}
568 self._post_execute = {}
569
569
570 def init_environment(self):
570 def init_environment(self):
571 """Any changes we need to make to the user's environment."""
571 """Any changes we need to make to the user's environment."""
572 pass
572 pass
573
573
574 def init_encoding(self):
574 def init_encoding(self):
575 # Get system encoding at startup time. Certain terminals (like Emacs
575 # Get system encoding at startup time. Certain terminals (like Emacs
576 # under Win32 have it set to None, and we need to have a known valid
576 # under Win32 have it set to None, and we need to have a known valid
577 # encoding to use in the raw_input() method
577 # encoding to use in the raw_input() method
578 try:
578 try:
579 self.stdin_encoding = sys.stdin.encoding or 'ascii'
579 self.stdin_encoding = sys.stdin.encoding or 'ascii'
580 except AttributeError:
580 except AttributeError:
581 self.stdin_encoding = 'ascii'
581 self.stdin_encoding = 'ascii'
582
582
583 def init_syntax_highlighting(self):
583 def init_syntax_highlighting(self):
584 # Python source parser/formatter for syntax highlighting
584 # Python source parser/formatter for syntax highlighting
585 pyformat = PyColorize.Parser().format
585 pyformat = PyColorize.Parser().format
586 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
586 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
587
587
588 def init_pushd_popd_magic(self):
588 def init_pushd_popd_magic(self):
589 # for pushd/popd management
589 # for pushd/popd management
590 self.home_dir = get_home_dir()
590 self.home_dir = get_home_dir()
591
591
592 self.dir_stack = []
592 self.dir_stack = []
593
593
594 def init_logger(self):
594 def init_logger(self):
595 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
595 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
596 logmode='rotate')
596 logmode='rotate')
597
597
598 def init_logstart(self):
598 def init_logstart(self):
599 """Initialize logging in case it was requested at the command line.
599 """Initialize logging in case it was requested at the command line.
600 """
600 """
601 if self.logappend:
601 if self.logappend:
602 self.magic('logstart %s append' % self.logappend)
602 self.magic('logstart %s append' % self.logappend)
603 elif self.logfile:
603 elif self.logfile:
604 self.magic('logstart %' % self.logfile)
604 self.magic('logstart %' % self.logfile)
605 elif self.logstart:
605 elif self.logstart:
606 self.magic('logstart')
606 self.magic('logstart')
607
607
608 def init_builtins(self):
608 def init_builtins(self):
609 # A single, static flag that we set to True. Its presence indicates
609 # A single, static flag that we set to True. Its presence indicates
610 # that an IPython shell has been created, and we make no attempts at
610 # that an IPython shell has been created, and we make no attempts at
611 # removing on exit or representing the existence of more than one
611 # removing on exit or representing the existence of more than one
612 # IPython at a time.
612 # IPython at a time.
613 builtin_mod.__dict__['__IPYTHON__'] = True
613 builtin_mod.__dict__['__IPYTHON__'] = True
614
614
615 # In 0.11 we introduced '__IPYTHON__active' as an integer we'd try to
615 # In 0.11 we introduced '__IPYTHON__active' as an integer we'd try to
616 # manage on enter/exit, but with all our shells it's virtually
616 # manage on enter/exit, but with all our shells it's virtually
617 # impossible to get all the cases right. We're leaving the name in for
617 # impossible to get all the cases right. We're leaving the name in for
618 # those who adapted their codes to check for this flag, but will
618 # those who adapted their codes to check for this flag, but will
619 # eventually remove it after a few more releases.
619 # eventually remove it after a few more releases.
620 builtin_mod.__dict__['__IPYTHON__active'] = \
620 builtin_mod.__dict__['__IPYTHON__active'] = \
621 'Deprecated, check for __IPYTHON__'
621 'Deprecated, check for __IPYTHON__'
622
622
623 self.builtin_trap = BuiltinTrap(shell=self)
623 self.builtin_trap = BuiltinTrap(shell=self)
624
624
625 def init_inspector(self):
625 def init_inspector(self):
626 # Object inspector
626 # Object inspector
627 self.inspector = oinspect.Inspector(oinspect.InspectColors,
627 self.inspector = oinspect.Inspector(oinspect.InspectColors,
628 PyColorize.ANSICodeColors,
628 PyColorize.ANSICodeColors,
629 'NoColor',
629 'NoColor',
630 self.object_info_string_level)
630 self.object_info_string_level)
631
631
632 def init_io(self):
632 def init_io(self):
633 # This will just use sys.stdout and sys.stderr. If you want to
633 # This will just use sys.stdout and sys.stderr. If you want to
634 # override sys.stdout and sys.stderr themselves, you need to do that
634 # override sys.stdout and sys.stderr themselves, you need to do that
635 # *before* instantiating this class, because io holds onto
635 # *before* instantiating this class, because io holds onto
636 # references to the underlying streams.
636 # references to the underlying streams.
637 if sys.platform == 'win32' and self.has_readline:
637 if sys.platform == 'win32' and self.has_readline:
638 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
638 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
639 else:
639 else:
640 io.stdout = io.IOStream(sys.stdout)
640 io.stdout = io.IOStream(sys.stdout)
641 io.stderr = io.IOStream(sys.stderr)
641 io.stderr = io.IOStream(sys.stderr)
642
642
643 def init_prompts(self):
643 def init_prompts(self):
644 self.prompt_manager = PromptManager(shell=self, config=self.config)
644 self.prompt_manager = PromptManager(shell=self, config=self.config)
645 self.configurables.append(self.prompt_manager)
645 self.configurables.append(self.prompt_manager)
646 # Set system prompts, so that scripts can decide if they are running
646 # Set system prompts, so that scripts can decide if they are running
647 # interactively.
647 # interactively.
648 sys.ps1 = 'In : '
648 sys.ps1 = 'In : '
649 sys.ps2 = '...: '
649 sys.ps2 = '...: '
650 sys.ps3 = 'Out: '
650 sys.ps3 = 'Out: '
651
651
652 def init_display_formatter(self):
652 def init_display_formatter(self):
653 self.display_formatter = DisplayFormatter(config=self.config)
653 self.display_formatter = DisplayFormatter(config=self.config)
654 self.configurables.append(self.display_formatter)
654 self.configurables.append(self.display_formatter)
655
655
656 def init_display_pub(self):
656 def init_display_pub(self):
657 self.display_pub = self.display_pub_class(config=self.config)
657 self.display_pub = self.display_pub_class(config=self.config)
658 self.configurables.append(self.display_pub)
658 self.configurables.append(self.display_pub)
659
659
660 def init_displayhook(self):
660 def init_displayhook(self):
661 # Initialize displayhook, set in/out prompts and printing system
661 # Initialize displayhook, set in/out prompts and printing system
662 self.displayhook = self.displayhook_class(
662 self.displayhook = self.displayhook_class(
663 config=self.config,
663 config=self.config,
664 shell=self,
664 shell=self,
665 cache_size=self.cache_size,
665 cache_size=self.cache_size,
666 )
666 )
667 self.configurables.append(self.displayhook)
667 self.configurables.append(self.displayhook)
668 # This is a context manager that installs/revmoes the displayhook at
668 # This is a context manager that installs/revmoes the displayhook at
669 # the appropriate time.
669 # the appropriate time.
670 self.display_trap = DisplayTrap(hook=self.displayhook)
670 self.display_trap = DisplayTrap(hook=self.displayhook)
671
671
672 def init_reload_doctest(self):
672 def init_reload_doctest(self):
673 # Do a proper resetting of doctest, including the necessary displayhook
673 # Do a proper resetting of doctest, including the necessary displayhook
674 # monkeypatching
674 # monkeypatching
675 try:
675 try:
676 doctest_reload()
676 doctest_reload()
677 except ImportError:
677 except ImportError:
678 warn("doctest module does not exist.")
678 warn("doctest module does not exist.")
679
679
680 def init_virtualenv(self):
680 def init_virtualenv(self):
681 """Add a virtualenv to sys.path so the user can import modules from it.
681 """Add a virtualenv to sys.path so the user can import modules from it.
682 This isn't perfect: it doesn't use the Python interpreter with which the
682 This isn't perfect: it doesn't use the Python interpreter with which the
683 virtualenv was built, and it ignores the --no-site-packages option. A
683 virtualenv was built, and it ignores the --no-site-packages option. A
684 warning will appear suggesting the user installs IPython in the
684 warning will appear suggesting the user installs IPython in the
685 virtualenv, but for many cases, it probably works well enough.
685 virtualenv, but for many cases, it probably works well enough.
686
686
687 Adapted from code snippets online.
687 Adapted from code snippets online.
688
688
689 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
689 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
690 """
690 """
691 if 'VIRTUAL_ENV' not in os.environ:
691 if 'VIRTUAL_ENV' not in os.environ:
692 # Not in a virtualenv
692 # Not in a virtualenv
693 return
693 return
694
694
695 if sys.executable.startswith(os.environ['VIRTUAL_ENV']):
695 if sys.executable.startswith(os.environ['VIRTUAL_ENV']):
696 # Running properly in the virtualenv, don't need to do anything
696 # Running properly in the virtualenv, don't need to do anything
697 return
697 return
698
698
699 warn("Attempting to work in a virtualenv. If you encounter problems, please "
699 warn("Attempting to work in a virtualenv. If you encounter problems, please "
700 "install IPython inside the virtualenv.\n")
700 "install IPython inside the virtualenv.\n")
701 if sys.platform == "win32":
701 if sys.platform == "win32":
702 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
702 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
703 else:
703 else:
704 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
704 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
705 'python%d.%d' % sys.version_info[:2], 'site-packages')
705 'python%d.%d' % sys.version_info[:2], 'site-packages')
706
706
707 import site
707 import site
708 sys.path.insert(0, virtual_env)
708 sys.path.insert(0, virtual_env)
709 site.addsitedir(virtual_env)
709 site.addsitedir(virtual_env)
710
710
711 #-------------------------------------------------------------------------
711 #-------------------------------------------------------------------------
712 # Things related to injections into the sys module
712 # Things related to injections into the sys module
713 #-------------------------------------------------------------------------
713 #-------------------------------------------------------------------------
714
714
715 def save_sys_module_state(self):
715 def save_sys_module_state(self):
716 """Save the state of hooks in the sys module.
716 """Save the state of hooks in the sys module.
717
717
718 This has to be called after self.user_module is created.
718 This has to be called after self.user_module is created.
719 """
719 """
720 self._orig_sys_module_state = {}
720 self._orig_sys_module_state = {}
721 self._orig_sys_module_state['stdin'] = sys.stdin
721 self._orig_sys_module_state['stdin'] = sys.stdin
722 self._orig_sys_module_state['stdout'] = sys.stdout
722 self._orig_sys_module_state['stdout'] = sys.stdout
723 self._orig_sys_module_state['stderr'] = sys.stderr
723 self._orig_sys_module_state['stderr'] = sys.stderr
724 self._orig_sys_module_state['excepthook'] = sys.excepthook
724 self._orig_sys_module_state['excepthook'] = sys.excepthook
725 self._orig_sys_modules_main_name = self.user_module.__name__
725 self._orig_sys_modules_main_name = self.user_module.__name__
726 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
726 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
727
727
728 def restore_sys_module_state(self):
728 def restore_sys_module_state(self):
729 """Restore the state of the sys module."""
729 """Restore the state of the sys module."""
730 try:
730 try:
731 for k, v in self._orig_sys_module_state.iteritems():
731 for k, v in self._orig_sys_module_state.iteritems():
732 setattr(sys, k, v)
732 setattr(sys, k, v)
733 except AttributeError:
733 except AttributeError:
734 pass
734 pass
735 # Reset what what done in self.init_sys_modules
735 # Reset what what done in self.init_sys_modules
736 if self._orig_sys_modules_main_mod is not None:
736 if self._orig_sys_modules_main_mod is not None:
737 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
737 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
738
738
739 #-------------------------------------------------------------------------
739 #-------------------------------------------------------------------------
740 # Things related to hooks
740 # Things related to hooks
741 #-------------------------------------------------------------------------
741 #-------------------------------------------------------------------------
742
742
743 def init_hooks(self):
743 def init_hooks(self):
744 # hooks holds pointers used for user-side customizations
744 # hooks holds pointers used for user-side customizations
745 self.hooks = Struct()
745 self.hooks = Struct()
746
746
747 self.strdispatchers = {}
747 self.strdispatchers = {}
748
748
749 # Set all default hooks, defined in the IPython.hooks module.
749 # Set all default hooks, defined in the IPython.hooks module.
750 hooks = IPython.core.hooks
750 hooks = IPython.core.hooks
751 for hook_name in hooks.__all__:
751 for hook_name in hooks.__all__:
752 # default hooks have priority 100, i.e. low; user hooks should have
752 # default hooks have priority 100, i.e. low; user hooks should have
753 # 0-100 priority
753 # 0-100 priority
754 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
754 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
755
755
756 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
756 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
757 """set_hook(name,hook) -> sets an internal IPython hook.
757 """set_hook(name,hook) -> sets an internal IPython hook.
758
758
759 IPython exposes some of its internal API as user-modifiable hooks. By
759 IPython exposes some of its internal API as user-modifiable hooks. By
760 adding your function to one of these hooks, you can modify IPython's
760 adding your function to one of these hooks, you can modify IPython's
761 behavior to call at runtime your own routines."""
761 behavior to call at runtime your own routines."""
762
762
763 # At some point in the future, this should validate the hook before it
763 # At some point in the future, this should validate the hook before it
764 # accepts it. Probably at least check that the hook takes the number
764 # accepts it. Probably at least check that the hook takes the number
765 # of args it's supposed to.
765 # of args it's supposed to.
766
766
767 f = types.MethodType(hook,self)
767 f = types.MethodType(hook,self)
768
768
769 # check if the hook is for strdispatcher first
769 # check if the hook is for strdispatcher first
770 if str_key is not None:
770 if str_key is not None:
771 sdp = self.strdispatchers.get(name, StrDispatch())
771 sdp = self.strdispatchers.get(name, StrDispatch())
772 sdp.add_s(str_key, f, priority )
772 sdp.add_s(str_key, f, priority )
773 self.strdispatchers[name] = sdp
773 self.strdispatchers[name] = sdp
774 return
774 return
775 if re_key is not None:
775 if re_key is not None:
776 sdp = self.strdispatchers.get(name, StrDispatch())
776 sdp = self.strdispatchers.get(name, StrDispatch())
777 sdp.add_re(re.compile(re_key), f, priority )
777 sdp.add_re(re.compile(re_key), f, priority )
778 self.strdispatchers[name] = sdp
778 self.strdispatchers[name] = sdp
779 return
779 return
780
780
781 dp = getattr(self.hooks, name, None)
781 dp = getattr(self.hooks, name, None)
782 if name not in IPython.core.hooks.__all__:
782 if name not in IPython.core.hooks.__all__:
783 print "Warning! Hook '%s' is not one of %s" % \
783 print "Warning! Hook '%s' is not one of %s" % \
784 (name, IPython.core.hooks.__all__ )
784 (name, IPython.core.hooks.__all__ )
785 if not dp:
785 if not dp:
786 dp = IPython.core.hooks.CommandChainDispatcher()
786 dp = IPython.core.hooks.CommandChainDispatcher()
787
787
788 try:
788 try:
789 dp.add(f,priority)
789 dp.add(f,priority)
790 except AttributeError:
790 except AttributeError:
791 # it was not commandchain, plain old func - replace
791 # it was not commandchain, plain old func - replace
792 dp = f
792 dp = f
793
793
794 setattr(self.hooks,name, dp)
794 setattr(self.hooks,name, dp)
795
795
796 def register_post_execute(self, func):
796 def register_post_execute(self, func):
797 """Register a function for calling after code execution.
797 """Register a function for calling after code execution.
798 """
798 """
799 if not callable(func):
799 if not callable(func):
800 raise ValueError('argument %s must be callable' % func)
800 raise ValueError('argument %s must be callable' % func)
801 self._post_execute[func] = True
801 self._post_execute[func] = True
802
802
803 #-------------------------------------------------------------------------
803 #-------------------------------------------------------------------------
804 # Things related to the "main" module
804 # Things related to the "main" module
805 #-------------------------------------------------------------------------
805 #-------------------------------------------------------------------------
806
806
807 def new_main_mod(self,ns=None):
807 def new_main_mod(self,ns=None):
808 """Return a new 'main' module object for user code execution.
808 """Return a new 'main' module object for user code execution.
809 """
809 """
810 main_mod = self._user_main_module
810 main_mod = self._user_main_module
811 init_fakemod_dict(main_mod,ns)
811 init_fakemod_dict(main_mod,ns)
812 return main_mod
812 return main_mod
813
813
814 def cache_main_mod(self,ns,fname):
814 def cache_main_mod(self,ns,fname):
815 """Cache a main module's namespace.
815 """Cache a main module's namespace.
816
816
817 When scripts are executed via %run, we must keep a reference to the
817 When scripts are executed via %run, we must keep a reference to the
818 namespace of their __main__ module (a FakeModule instance) around so
818 namespace of their __main__ module (a FakeModule instance) around so
819 that Python doesn't clear it, rendering objects defined therein
819 that Python doesn't clear it, rendering objects defined therein
820 useless.
820 useless.
821
821
822 This method keeps said reference in a private dict, keyed by the
822 This method keeps said reference in a private dict, keyed by the
823 absolute path of the module object (which corresponds to the script
823 absolute path of the module object (which corresponds to the script
824 path). This way, for multiple executions of the same script we only
824 path). This way, for multiple executions of the same script we only
825 keep one copy of the namespace (the last one), thus preventing memory
825 keep one copy of the namespace (the last one), thus preventing memory
826 leaks from old references while allowing the objects from the last
826 leaks from old references while allowing the objects from the last
827 execution to be accessible.
827 execution to be accessible.
828
828
829 Note: we can not allow the actual FakeModule instances to be deleted,
829 Note: we can not allow the actual FakeModule instances to be deleted,
830 because of how Python tears down modules (it hard-sets all their
830 because of how Python tears down modules (it hard-sets all their
831 references to None without regard for reference counts). This method
831 references to None without regard for reference counts). This method
832 must therefore make a *copy* of the given namespace, to allow the
832 must therefore make a *copy* of the given namespace, to allow the
833 original module's __dict__ to be cleared and reused.
833 original module's __dict__ to be cleared and reused.
834
834
835
835
836 Parameters
836 Parameters
837 ----------
837 ----------
838 ns : a namespace (a dict, typically)
838 ns : a namespace (a dict, typically)
839
839
840 fname : str
840 fname : str
841 Filename associated with the namespace.
841 Filename associated with the namespace.
842
842
843 Examples
843 Examples
844 --------
844 --------
845
845
846 In [10]: import IPython
846 In [10]: import IPython
847
847
848 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
848 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
849
849
850 In [12]: IPython.__file__ in _ip._main_ns_cache
850 In [12]: IPython.__file__ in _ip._main_ns_cache
851 Out[12]: True
851 Out[12]: True
852 """
852 """
853 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
853 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
854
854
855 def clear_main_mod_cache(self):
855 def clear_main_mod_cache(self):
856 """Clear the cache of main modules.
856 """Clear the cache of main modules.
857
857
858 Mainly for use by utilities like %reset.
858 Mainly for use by utilities like %reset.
859
859
860 Examples
860 Examples
861 --------
861 --------
862
862
863 In [15]: import IPython
863 In [15]: import IPython
864
864
865 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
865 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
866
866
867 In [17]: len(_ip._main_ns_cache) > 0
867 In [17]: len(_ip._main_ns_cache) > 0
868 Out[17]: True
868 Out[17]: True
869
869
870 In [18]: _ip.clear_main_mod_cache()
870 In [18]: _ip.clear_main_mod_cache()
871
871
872 In [19]: len(_ip._main_ns_cache) == 0
872 In [19]: len(_ip._main_ns_cache) == 0
873 Out[19]: True
873 Out[19]: True
874 """
874 """
875 self._main_ns_cache.clear()
875 self._main_ns_cache.clear()
876
876
877 #-------------------------------------------------------------------------
877 #-------------------------------------------------------------------------
878 # Things related to debugging
878 # Things related to debugging
879 #-------------------------------------------------------------------------
879 #-------------------------------------------------------------------------
880
880
881 def init_pdb(self):
881 def init_pdb(self):
882 # Set calling of pdb on exceptions
882 # Set calling of pdb on exceptions
883 # self.call_pdb is a property
883 # self.call_pdb is a property
884 self.call_pdb = self.pdb
884 self.call_pdb = self.pdb
885
885
886 def _get_call_pdb(self):
886 def _get_call_pdb(self):
887 return self._call_pdb
887 return self._call_pdb
888
888
889 def _set_call_pdb(self,val):
889 def _set_call_pdb(self,val):
890
890
891 if val not in (0,1,False,True):
891 if val not in (0,1,False,True):
892 raise ValueError,'new call_pdb value must be boolean'
892 raise ValueError,'new call_pdb value must be boolean'
893
893
894 # store value in instance
894 # store value in instance
895 self._call_pdb = val
895 self._call_pdb = val
896
896
897 # notify the actual exception handlers
897 # notify the actual exception handlers
898 self.InteractiveTB.call_pdb = val
898 self.InteractiveTB.call_pdb = val
899
899
900 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
900 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
901 'Control auto-activation of pdb at exceptions')
901 'Control auto-activation of pdb at exceptions')
902
902
903 def debugger(self,force=False):
903 def debugger(self,force=False):
904 """Call the pydb/pdb debugger.
904 """Call the pydb/pdb debugger.
905
905
906 Keywords:
906 Keywords:
907
907
908 - force(False): by default, this routine checks the instance call_pdb
908 - force(False): by default, this routine checks the instance call_pdb
909 flag and does not actually invoke the debugger if the flag is false.
909 flag and does not actually invoke the debugger if the flag is false.
910 The 'force' option forces the debugger to activate even if the flag
910 The 'force' option forces the debugger to activate even if the flag
911 is false.
911 is false.
912 """
912 """
913
913
914 if not (force or self.call_pdb):
914 if not (force or self.call_pdb):
915 return
915 return
916
916
917 if not hasattr(sys,'last_traceback'):
917 if not hasattr(sys,'last_traceback'):
918 error('No traceback has been produced, nothing to debug.')
918 error('No traceback has been produced, nothing to debug.')
919 return
919 return
920
920
921 # use pydb if available
921 # use pydb if available
922 if debugger.has_pydb:
922 if debugger.has_pydb:
923 from pydb import pm
923 from pydb import pm
924 else:
924 else:
925 # fallback to our internal debugger
925 # fallback to our internal debugger
926 pm = lambda : self.InteractiveTB.debugger(force=True)
926 pm = lambda : self.InteractiveTB.debugger(force=True)
927
927
928 with self.readline_no_record:
928 with self.readline_no_record:
929 pm()
929 pm()
930
930
931 #-------------------------------------------------------------------------
931 #-------------------------------------------------------------------------
932 # Things related to IPython's various namespaces
932 # Things related to IPython's various namespaces
933 #-------------------------------------------------------------------------
933 #-------------------------------------------------------------------------
934 default_user_namespaces = True
934 default_user_namespaces = True
935
935
936 def init_create_namespaces(self, user_module=None, user_ns=None):
936 def init_create_namespaces(self, user_module=None, user_ns=None):
937 # Create the namespace where the user will operate. user_ns is
937 # Create the namespace where the user will operate. user_ns is
938 # normally the only one used, and it is passed to the exec calls as
938 # normally the only one used, and it is passed to the exec calls as
939 # the locals argument. But we do carry a user_global_ns namespace
939 # the locals argument. But we do carry a user_global_ns namespace
940 # given as the exec 'globals' argument, This is useful in embedding
940 # given as the exec 'globals' argument, This is useful in embedding
941 # situations where the ipython shell opens in a context where the
941 # situations where the ipython shell opens in a context where the
942 # distinction between locals and globals is meaningful. For
942 # distinction between locals and globals is meaningful. For
943 # non-embedded contexts, it is just the same object as the user_ns dict.
943 # non-embedded contexts, it is just the same object as the user_ns dict.
944
944
945 # FIXME. For some strange reason, __builtins__ is showing up at user
945 # FIXME. For some strange reason, __builtins__ is showing up at user
946 # level as a dict instead of a module. This is a manual fix, but I
946 # level as a dict instead of a module. This is a manual fix, but I
947 # should really track down where the problem is coming from. Alex
947 # should really track down where the problem is coming from. Alex
948 # Schmolck reported this problem first.
948 # Schmolck reported this problem first.
949
949
950 # A useful post by Alex Martelli on this topic:
950 # A useful post by Alex Martelli on this topic:
951 # Re: inconsistent value from __builtins__
951 # Re: inconsistent value from __builtins__
952 # Von: Alex Martelli <aleaxit@yahoo.com>
952 # Von: Alex Martelli <aleaxit@yahoo.com>
953 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
953 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
954 # Gruppen: comp.lang.python
954 # Gruppen: comp.lang.python
955
955
956 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
956 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
957 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
957 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
958 # > <type 'dict'>
958 # > <type 'dict'>
959 # > >>> print type(__builtins__)
959 # > >>> print type(__builtins__)
960 # > <type 'module'>
960 # > <type 'module'>
961 # > Is this difference in return value intentional?
961 # > Is this difference in return value intentional?
962
962
963 # Well, it's documented that '__builtins__' can be either a dictionary
963 # Well, it's documented that '__builtins__' can be either a dictionary
964 # or a module, and it's been that way for a long time. Whether it's
964 # or a module, and it's been that way for a long time. Whether it's
965 # intentional (or sensible), I don't know. In any case, the idea is
965 # intentional (or sensible), I don't know. In any case, the idea is
966 # that if you need to access the built-in namespace directly, you
966 # that if you need to access the built-in namespace directly, you
967 # should start with "import __builtin__" (note, no 's') which will
967 # should start with "import __builtin__" (note, no 's') which will
968 # definitely give you a module. Yeah, it's somewhat confusing:-(.
968 # definitely give you a module. Yeah, it's somewhat confusing:-(.
969
969
970 # These routines return a properly built module and dict as needed by
970 # These routines return a properly built module and dict as needed by
971 # the rest of the code, and can also be used by extension writers to
971 # the rest of the code, and can also be used by extension writers to
972 # generate properly initialized namespaces.
972 # generate properly initialized namespaces.
973 if (user_ns is not None) or (user_module is not None):
973 if (user_ns is not None) or (user_module is not None):
974 self.default_user_namespaces = False
974 self.default_user_namespaces = False
975 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
975 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
976
976
977 # A record of hidden variables we have added to the user namespace, so
977 # A record of hidden variables we have added to the user namespace, so
978 # we can list later only variables defined in actual interactive use.
978 # we can list later only variables defined in actual interactive use.
979 self.user_ns_hidden = set()
979 self.user_ns_hidden = set()
980
980
981 # Now that FakeModule produces a real module, we've run into a nasty
981 # Now that FakeModule produces a real module, we've run into a nasty
982 # problem: after script execution (via %run), the module where the user
982 # problem: after script execution (via %run), the module where the user
983 # code ran is deleted. Now that this object is a true module (needed
983 # code ran is deleted. Now that this object is a true module (needed
984 # so docetst and other tools work correctly), the Python module
984 # so docetst and other tools work correctly), the Python module
985 # teardown mechanism runs over it, and sets to None every variable
985 # teardown mechanism runs over it, and sets to None every variable
986 # present in that module. Top-level references to objects from the
986 # present in that module. Top-level references to objects from the
987 # script survive, because the user_ns is updated with them. However,
987 # script survive, because the user_ns is updated with them. However,
988 # calling functions defined in the script that use other things from
988 # calling functions defined in the script that use other things from
989 # the script will fail, because the function's closure had references
989 # the script will fail, because the function's closure had references
990 # to the original objects, which are now all None. So we must protect
990 # to the original objects, which are now all None. So we must protect
991 # these modules from deletion by keeping a cache.
991 # these modules from deletion by keeping a cache.
992 #
992 #
993 # To avoid keeping stale modules around (we only need the one from the
993 # To avoid keeping stale modules around (we only need the one from the
994 # last run), we use a dict keyed with the full path to the script, so
994 # last run), we use a dict keyed with the full path to the script, so
995 # only the last version of the module is held in the cache. Note,
995 # only the last version of the module is held in the cache. Note,
996 # however, that we must cache the module *namespace contents* (their
996 # however, that we must cache the module *namespace contents* (their
997 # __dict__). Because if we try to cache the actual modules, old ones
997 # __dict__). Because if we try to cache the actual modules, old ones
998 # (uncached) could be destroyed while still holding references (such as
998 # (uncached) could be destroyed while still holding references (such as
999 # those held by GUI objects that tend to be long-lived)>
999 # those held by GUI objects that tend to be long-lived)>
1000 #
1000 #
1001 # The %reset command will flush this cache. See the cache_main_mod()
1001 # The %reset command will flush this cache. See the cache_main_mod()
1002 # and clear_main_mod_cache() methods for details on use.
1002 # and clear_main_mod_cache() methods for details on use.
1003
1003
1004 # This is the cache used for 'main' namespaces
1004 # This is the cache used for 'main' namespaces
1005 self._main_ns_cache = {}
1005 self._main_ns_cache = {}
1006 # And this is the single instance of FakeModule whose __dict__ we keep
1006 # And this is the single instance of FakeModule whose __dict__ we keep
1007 # copying and clearing for reuse on each %run
1007 # copying and clearing for reuse on each %run
1008 self._user_main_module = FakeModule()
1008 self._user_main_module = FakeModule()
1009
1009
1010 # A table holding all the namespaces IPython deals with, so that
1010 # A table holding all the namespaces IPython deals with, so that
1011 # introspection facilities can search easily.
1011 # introspection facilities can search easily.
1012 self.ns_table = {'user_global':self.user_module.__dict__,
1012 self.ns_table = {'user_global':self.user_module.__dict__,
1013 'user_local':self.user_ns,
1013 'user_local':self.user_ns,
1014 'builtin':builtin_mod.__dict__
1014 'builtin':builtin_mod.__dict__
1015 }
1015 }
1016
1016
1017 @property
1017 @property
1018 def user_global_ns(self):
1018 def user_global_ns(self):
1019 return self.user_module.__dict__
1019 return self.user_module.__dict__
1020
1020
1021 def prepare_user_module(self, user_module=None, user_ns=None):
1021 def prepare_user_module(self, user_module=None, user_ns=None):
1022 """Prepare the module and namespace in which user code will be run.
1022 """Prepare the module and namespace in which user code will be run.
1023
1023
1024 When IPython is started normally, both parameters are None: a new module
1024 When IPython is started normally, both parameters are None: a new module
1025 is created automatically, and its __dict__ used as the namespace.
1025 is created automatically, and its __dict__ used as the namespace.
1026
1026
1027 If only user_module is provided, its __dict__ is used as the namespace.
1027 If only user_module is provided, its __dict__ is used as the namespace.
1028 If only user_ns is provided, a dummy module is created, and user_ns
1028 If only user_ns is provided, a dummy module is created, and user_ns
1029 becomes the global namespace. If both are provided (as they may be
1029 becomes the global namespace. If both are provided (as they may be
1030 when embedding), user_ns is the local namespace, and user_module
1030 when embedding), user_ns is the local namespace, and user_module
1031 provides the global namespace.
1031 provides the global namespace.
1032
1032
1033 Parameters
1033 Parameters
1034 ----------
1034 ----------
1035 user_module : module, optional
1035 user_module : module, optional
1036 The current user module in which IPython is being run. If None,
1036 The current user module in which IPython is being run. If None,
1037 a clean module will be created.
1037 a clean module will be created.
1038 user_ns : dict, optional
1038 user_ns : dict, optional
1039 A namespace in which to run interactive commands.
1039 A namespace in which to run interactive commands.
1040
1040
1041 Returns
1041 Returns
1042 -------
1042 -------
1043 A tuple of user_module and user_ns, each properly initialised.
1043 A tuple of user_module and user_ns, each properly initialised.
1044 """
1044 """
1045 if user_module is None and user_ns is not None:
1045 if user_module is None and user_ns is not None:
1046 user_ns.setdefault("__name__", "__main__")
1046 user_ns.setdefault("__name__", "__main__")
1047 class DummyMod(object):
1047 class DummyMod(object):
1048 "A dummy module used for IPython's interactive namespace."
1048 "A dummy module used for IPython's interactive namespace."
1049 pass
1049 pass
1050 user_module = DummyMod()
1050 user_module = DummyMod()
1051 user_module.__dict__ = user_ns
1051 user_module.__dict__ = user_ns
1052
1052
1053 if user_module is None:
1053 if user_module is None:
1054 user_module = types.ModuleType("__main__",
1054 user_module = types.ModuleType("__main__",
1055 doc="Automatically created module for IPython interactive environment")
1055 doc="Automatically created module for IPython interactive environment")
1056
1056
1057 # We must ensure that __builtin__ (without the final 's') is always
1057 # We must ensure that __builtin__ (without the final 's') is always
1058 # available and pointing to the __builtin__ *module*. For more details:
1058 # available and pointing to the __builtin__ *module*. For more details:
1059 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1059 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1060 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1060 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1061 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1061 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1062
1062
1063 if user_ns is None:
1063 if user_ns is None:
1064 user_ns = user_module.__dict__
1064 user_ns = user_module.__dict__
1065
1065
1066 return user_module, user_ns
1066 return user_module, user_ns
1067
1067
1068 def init_sys_modules(self):
1068 def init_sys_modules(self):
1069 # We need to insert into sys.modules something that looks like a
1069 # We need to insert into sys.modules something that looks like a
1070 # module but which accesses the IPython namespace, for shelve and
1070 # module but which accesses the IPython namespace, for shelve and
1071 # pickle to work interactively. Normally they rely on getting
1071 # pickle to work interactively. Normally they rely on getting
1072 # everything out of __main__, but for embedding purposes each IPython
1072 # everything out of __main__, but for embedding purposes each IPython
1073 # instance has its own private namespace, so we can't go shoving
1073 # instance has its own private namespace, so we can't go shoving
1074 # everything into __main__.
1074 # everything into __main__.
1075
1075
1076 # note, however, that we should only do this for non-embedded
1076 # note, however, that we should only do this for non-embedded
1077 # ipythons, which really mimic the __main__.__dict__ with their own
1077 # ipythons, which really mimic the __main__.__dict__ with their own
1078 # namespace. Embedded instances, on the other hand, should not do
1078 # namespace. Embedded instances, on the other hand, should not do
1079 # this because they need to manage the user local/global namespaces
1079 # this because they need to manage the user local/global namespaces
1080 # only, but they live within a 'normal' __main__ (meaning, they
1080 # only, but they live within a 'normal' __main__ (meaning, they
1081 # shouldn't overtake the execution environment of the script they're
1081 # shouldn't overtake the execution environment of the script they're
1082 # embedded in).
1082 # embedded in).
1083
1083
1084 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1084 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1085 main_name = self.user_module.__name__
1085 main_name = self.user_module.__name__
1086 sys.modules[main_name] = self.user_module
1086 sys.modules[main_name] = self.user_module
1087
1087
1088 def init_user_ns(self):
1088 def init_user_ns(self):
1089 """Initialize all user-visible namespaces to their minimum defaults.
1089 """Initialize all user-visible namespaces to their minimum defaults.
1090
1090
1091 Certain history lists are also initialized here, as they effectively
1091 Certain history lists are also initialized here, as they effectively
1092 act as user namespaces.
1092 act as user namespaces.
1093
1093
1094 Notes
1094 Notes
1095 -----
1095 -----
1096 All data structures here are only filled in, they are NOT reset by this
1096 All data structures here are only filled in, they are NOT reset by this
1097 method. If they were not empty before, data will simply be added to
1097 method. If they were not empty before, data will simply be added to
1098 therm.
1098 therm.
1099 """
1099 """
1100 # This function works in two parts: first we put a few things in
1100 # This function works in two parts: first we put a few things in
1101 # user_ns, and we sync that contents into user_ns_hidden so that these
1101 # user_ns, and we sync that contents into user_ns_hidden so that these
1102 # initial variables aren't shown by %who. After the sync, we add the
1102 # initial variables aren't shown by %who. After the sync, we add the
1103 # rest of what we *do* want the user to see with %who even on a new
1103 # rest of what we *do* want the user to see with %who even on a new
1104 # session (probably nothing, so theye really only see their own stuff)
1104 # session (probably nothing, so theye really only see their own stuff)
1105
1105
1106 # The user dict must *always* have a __builtin__ reference to the
1106 # The user dict must *always* have a __builtin__ reference to the
1107 # Python standard __builtin__ namespace, which must be imported.
1107 # Python standard __builtin__ namespace, which must be imported.
1108 # This is so that certain operations in prompt evaluation can be
1108 # This is so that certain operations in prompt evaluation can be
1109 # reliably executed with builtins. Note that we can NOT use
1109 # reliably executed with builtins. Note that we can NOT use
1110 # __builtins__ (note the 's'), because that can either be a dict or a
1110 # __builtins__ (note the 's'), because that can either be a dict or a
1111 # module, and can even mutate at runtime, depending on the context
1111 # module, and can even mutate at runtime, depending on the context
1112 # (Python makes no guarantees on it). In contrast, __builtin__ is
1112 # (Python makes no guarantees on it). In contrast, __builtin__ is
1113 # always a module object, though it must be explicitly imported.
1113 # always a module object, though it must be explicitly imported.
1114
1114
1115 # For more details:
1115 # For more details:
1116 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1116 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1117 ns = dict()
1117 ns = dict()
1118
1118
1119 # Put 'help' in the user namespace
1119 # Put 'help' in the user namespace
1120 try:
1120 try:
1121 from site import _Helper
1121 from site import _Helper
1122 ns['help'] = _Helper()
1122 ns['help'] = _Helper()
1123 except ImportError:
1123 except ImportError:
1124 warn('help() not available - check site.py')
1124 warn('help() not available - check site.py')
1125
1125
1126 # make global variables for user access to the histories
1126 # make global variables for user access to the histories
1127 ns['_ih'] = self.history_manager.input_hist_parsed
1127 ns['_ih'] = self.history_manager.input_hist_parsed
1128 ns['_oh'] = self.history_manager.output_hist
1128 ns['_oh'] = self.history_manager.output_hist
1129 ns['_dh'] = self.history_manager.dir_hist
1129 ns['_dh'] = self.history_manager.dir_hist
1130
1130
1131 ns['_sh'] = shadowns
1131 ns['_sh'] = shadowns
1132
1132
1133 # user aliases to input and output histories. These shouldn't show up
1133 # user aliases to input and output histories. These shouldn't show up
1134 # in %who, as they can have very large reprs.
1134 # in %who, as they can have very large reprs.
1135 ns['In'] = self.history_manager.input_hist_parsed
1135 ns['In'] = self.history_manager.input_hist_parsed
1136 ns['Out'] = self.history_manager.output_hist
1136 ns['Out'] = self.history_manager.output_hist
1137
1137
1138 # Store myself as the public api!!!
1138 # Store myself as the public api!!!
1139 ns['get_ipython'] = self.get_ipython
1139 ns['get_ipython'] = self.get_ipython
1140
1140
1141 ns['exit'] = self.exiter
1141 ns['exit'] = self.exiter
1142 ns['quit'] = self.exiter
1142 ns['quit'] = self.exiter
1143
1143
1144 # Sync what we've added so far to user_ns_hidden so these aren't seen
1144 # Sync what we've added so far to user_ns_hidden so these aren't seen
1145 # by %who
1145 # by %who
1146 self.user_ns_hidden.update(ns)
1146 self.user_ns_hidden.update(ns)
1147
1147
1148 # Anything put into ns now would show up in %who. Think twice before
1148 # Anything put into ns now would show up in %who. Think twice before
1149 # putting anything here, as we really want %who to show the user their
1149 # putting anything here, as we really want %who to show the user their
1150 # stuff, not our variables.
1150 # stuff, not our variables.
1151
1151
1152 # Finally, update the real user's namespace
1152 # Finally, update the real user's namespace
1153 self.user_ns.update(ns)
1153 self.user_ns.update(ns)
1154
1154
1155 @property
1155 @property
1156 def all_ns_refs(self):
1156 def all_ns_refs(self):
1157 """Get a list of references to all the namespace dictionaries in which
1157 """Get a list of references to all the namespace dictionaries in which
1158 IPython might store a user-created object.
1158 IPython might store a user-created object.
1159
1159
1160 Note that this does not include the displayhook, which also caches
1160 Note that this does not include the displayhook, which also caches
1161 objects from the output."""
1161 objects from the output."""
1162 return [self.user_ns, self.user_global_ns,
1162 return [self.user_ns, self.user_global_ns,
1163 self._user_main_module.__dict__] + self._main_ns_cache.values()
1163 self._user_main_module.__dict__] + self._main_ns_cache.values()
1164
1164
1165 def reset(self, new_session=True):
1165 def reset(self, new_session=True):
1166 """Clear all internal namespaces, and attempt to release references to
1166 """Clear all internal namespaces, and attempt to release references to
1167 user objects.
1167 user objects.
1168
1168
1169 If new_session is True, a new history session will be opened.
1169 If new_session is True, a new history session will be opened.
1170 """
1170 """
1171 # Clear histories
1171 # Clear histories
1172 self.history_manager.reset(new_session)
1172 self.history_manager.reset(new_session)
1173 # Reset counter used to index all histories
1173 # Reset counter used to index all histories
1174 if new_session:
1174 if new_session:
1175 self.execution_count = 1
1175 self.execution_count = 1
1176
1176
1177 # Flush cached output items
1177 # Flush cached output items
1178 if self.displayhook.do_full_cache:
1178 if self.displayhook.do_full_cache:
1179 self.displayhook.flush()
1179 self.displayhook.flush()
1180
1180
1181 # The main execution namespaces must be cleared very carefully,
1181 # The main execution namespaces must be cleared very carefully,
1182 # skipping the deletion of the builtin-related keys, because doing so
1182 # skipping the deletion of the builtin-related keys, because doing so
1183 # would cause errors in many object's __del__ methods.
1183 # would cause errors in many object's __del__ methods.
1184 if self.user_ns is not self.user_global_ns:
1184 if self.user_ns is not self.user_global_ns:
1185 self.user_ns.clear()
1185 self.user_ns.clear()
1186 ns = self.user_global_ns
1186 ns = self.user_global_ns
1187 drop_keys = set(ns.keys())
1187 drop_keys = set(ns.keys())
1188 drop_keys.discard('__builtin__')
1188 drop_keys.discard('__builtin__')
1189 drop_keys.discard('__builtins__')
1189 drop_keys.discard('__builtins__')
1190 drop_keys.discard('__name__')
1190 drop_keys.discard('__name__')
1191 for k in drop_keys:
1191 for k in drop_keys:
1192 del ns[k]
1192 del ns[k]
1193
1193
1194 self.user_ns_hidden.clear()
1194 self.user_ns_hidden.clear()
1195
1195
1196 # Restore the user namespaces to minimal usability
1196 # Restore the user namespaces to minimal usability
1197 self.init_user_ns()
1197 self.init_user_ns()
1198
1198
1199 # Restore the default and user aliases
1199 # Restore the default and user aliases
1200 self.alias_manager.clear_aliases()
1200 self.alias_manager.clear_aliases()
1201 self.alias_manager.init_aliases()
1201 self.alias_manager.init_aliases()
1202
1202
1203 # Flush the private list of module references kept for script
1203 # Flush the private list of module references kept for script
1204 # execution protection
1204 # execution protection
1205 self.clear_main_mod_cache()
1205 self.clear_main_mod_cache()
1206
1206
1207 # Clear out the namespace from the last %run
1207 # Clear out the namespace from the last %run
1208 self.new_main_mod()
1208 self.new_main_mod()
1209
1209
1210 def del_var(self, varname, by_name=False):
1210 def del_var(self, varname, by_name=False):
1211 """Delete a variable from the various namespaces, so that, as
1211 """Delete a variable from the various namespaces, so that, as
1212 far as possible, we're not keeping any hidden references to it.
1212 far as possible, we're not keeping any hidden references to it.
1213
1213
1214 Parameters
1214 Parameters
1215 ----------
1215 ----------
1216 varname : str
1216 varname : str
1217 The name of the variable to delete.
1217 The name of the variable to delete.
1218 by_name : bool
1218 by_name : bool
1219 If True, delete variables with the given name in each
1219 If True, delete variables with the given name in each
1220 namespace. If False (default), find the variable in the user
1220 namespace. If False (default), find the variable in the user
1221 namespace, and delete references to it.
1221 namespace, and delete references to it.
1222 """
1222 """
1223 if varname in ('__builtin__', '__builtins__'):
1223 if varname in ('__builtin__', '__builtins__'):
1224 raise ValueError("Refusing to delete %s" % varname)
1224 raise ValueError("Refusing to delete %s" % varname)
1225
1225
1226 ns_refs = self.all_ns_refs
1226 ns_refs = self.all_ns_refs
1227
1227
1228 if by_name: # Delete by name
1228 if by_name: # Delete by name
1229 for ns in ns_refs:
1229 for ns in ns_refs:
1230 try:
1230 try:
1231 del ns[varname]
1231 del ns[varname]
1232 except KeyError:
1232 except KeyError:
1233 pass
1233 pass
1234 else: # Delete by object
1234 else: # Delete by object
1235 try:
1235 try:
1236 obj = self.user_ns[varname]
1236 obj = self.user_ns[varname]
1237 except KeyError:
1237 except KeyError:
1238 raise NameError("name '%s' is not defined" % varname)
1238 raise NameError("name '%s' is not defined" % varname)
1239 # Also check in output history
1239 # Also check in output history
1240 ns_refs.append(self.history_manager.output_hist)
1240 ns_refs.append(self.history_manager.output_hist)
1241 for ns in ns_refs:
1241 for ns in ns_refs:
1242 to_delete = [n for n, o in ns.iteritems() if o is obj]
1242 to_delete = [n for n, o in ns.iteritems() if o is obj]
1243 for name in to_delete:
1243 for name in to_delete:
1244 del ns[name]
1244 del ns[name]
1245
1245
1246 # displayhook keeps extra references, but not in a dictionary
1246 # displayhook keeps extra references, but not in a dictionary
1247 for name in ('_', '__', '___'):
1247 for name in ('_', '__', '___'):
1248 if getattr(self.displayhook, name) is obj:
1248 if getattr(self.displayhook, name) is obj:
1249 setattr(self.displayhook, name, None)
1249 setattr(self.displayhook, name, None)
1250
1250
1251 def reset_selective(self, regex=None):
1251 def reset_selective(self, regex=None):
1252 """Clear selective variables from internal namespaces based on a
1252 """Clear selective variables from internal namespaces based on a
1253 specified regular expression.
1253 specified regular expression.
1254
1254
1255 Parameters
1255 Parameters
1256 ----------
1256 ----------
1257 regex : string or compiled pattern, optional
1257 regex : string or compiled pattern, optional
1258 A regular expression pattern that will be used in searching
1258 A regular expression pattern that will be used in searching
1259 variable names in the users namespaces.
1259 variable names in the users namespaces.
1260 """
1260 """
1261 if regex is not None:
1261 if regex is not None:
1262 try:
1262 try:
1263 m = re.compile(regex)
1263 m = re.compile(regex)
1264 except TypeError:
1264 except TypeError:
1265 raise TypeError('regex must be a string or compiled pattern')
1265 raise TypeError('regex must be a string or compiled pattern')
1266 # Search for keys in each namespace that match the given regex
1266 # Search for keys in each namespace that match the given regex
1267 # If a match is found, delete the key/value pair.
1267 # If a match is found, delete the key/value pair.
1268 for ns in self.all_ns_refs:
1268 for ns in self.all_ns_refs:
1269 for var in ns:
1269 for var in ns:
1270 if m.search(var):
1270 if m.search(var):
1271 del ns[var]
1271 del ns[var]
1272
1272
1273 def push(self, variables, interactive=True):
1273 def push(self, variables, interactive=True):
1274 """Inject a group of variables into the IPython user namespace.
1274 """Inject a group of variables into the IPython user namespace.
1275
1275
1276 Parameters
1276 Parameters
1277 ----------
1277 ----------
1278 variables : dict, str or list/tuple of str
1278 variables : dict, str or list/tuple of str
1279 The variables to inject into the user's namespace. If a dict, a
1279 The variables to inject into the user's namespace. If a dict, a
1280 simple update is done. If a str, the string is assumed to have
1280 simple update is done. If a str, the string is assumed to have
1281 variable names separated by spaces. A list/tuple of str can also
1281 variable names separated by spaces. A list/tuple of str can also
1282 be used to give the variable names. If just the variable names are
1282 be used to give the variable names. If just the variable names are
1283 give (list/tuple/str) then the variable values looked up in the
1283 give (list/tuple/str) then the variable values looked up in the
1284 callers frame.
1284 callers frame.
1285 interactive : bool
1285 interactive : bool
1286 If True (default), the variables will be listed with the ``who``
1286 If True (default), the variables will be listed with the ``who``
1287 magic.
1287 magic.
1288 """
1288 """
1289 vdict = None
1289 vdict = None
1290
1290
1291 # We need a dict of name/value pairs to do namespace updates.
1291 # We need a dict of name/value pairs to do namespace updates.
1292 if isinstance(variables, dict):
1292 if isinstance(variables, dict):
1293 vdict = variables
1293 vdict = variables
1294 elif isinstance(variables, (basestring, list, tuple)):
1294 elif isinstance(variables, (basestring, list, tuple)):
1295 if isinstance(variables, basestring):
1295 if isinstance(variables, basestring):
1296 vlist = variables.split()
1296 vlist = variables.split()
1297 else:
1297 else:
1298 vlist = variables
1298 vlist = variables
1299 vdict = {}
1299 vdict = {}
1300 cf = sys._getframe(1)
1300 cf = sys._getframe(1)
1301 for name in vlist:
1301 for name in vlist:
1302 try:
1302 try:
1303 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1303 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1304 except:
1304 except:
1305 print ('Could not get variable %s from %s' %
1305 print ('Could not get variable %s from %s' %
1306 (name,cf.f_code.co_name))
1306 (name,cf.f_code.co_name))
1307 else:
1307 else:
1308 raise ValueError('variables must be a dict/str/list/tuple')
1308 raise ValueError('variables must be a dict/str/list/tuple')
1309
1309
1310 # Propagate variables to user namespace
1310 # Propagate variables to user namespace
1311 self.user_ns.update(vdict)
1311 self.user_ns.update(vdict)
1312
1312
1313 # And configure interactive visibility
1313 # And configure interactive visibility
1314 user_ns_hidden = self.user_ns_hidden
1314 user_ns_hidden = self.user_ns_hidden
1315 if interactive:
1315 if interactive:
1316 user_ns_hidden.difference_update(vdict)
1316 user_ns_hidden.difference_update(vdict)
1317 else:
1317 else:
1318 user_ns_hidden.update(vdict)
1318 user_ns_hidden.update(vdict)
1319
1319
1320 def drop_by_id(self, variables):
1320 def drop_by_id(self, variables):
1321 """Remove a dict of variables from the user namespace, if they are the
1321 """Remove a dict of variables from the user namespace, if they are the
1322 same as the values in the dictionary.
1322 same as the values in the dictionary.
1323
1323
1324 This is intended for use by extensions: variables that they've added can
1324 This is intended for use by extensions: variables that they've added can
1325 be taken back out if they are unloaded, without removing any that the
1325 be taken back out if they are unloaded, without removing any that the
1326 user has overwritten.
1326 user has overwritten.
1327
1327
1328 Parameters
1328 Parameters
1329 ----------
1329 ----------
1330 variables : dict
1330 variables : dict
1331 A dictionary mapping object names (as strings) to the objects.
1331 A dictionary mapping object names (as strings) to the objects.
1332 """
1332 """
1333 for name, obj in variables.iteritems():
1333 for name, obj in variables.iteritems():
1334 if name in self.user_ns and self.user_ns[name] is obj:
1334 if name in self.user_ns and self.user_ns[name] is obj:
1335 del self.user_ns[name]
1335 del self.user_ns[name]
1336 self.user_ns_hidden.discard(name)
1336 self.user_ns_hidden.discard(name)
1337
1337
1338 #-------------------------------------------------------------------------
1338 #-------------------------------------------------------------------------
1339 # Things related to object introspection
1339 # Things related to object introspection
1340 #-------------------------------------------------------------------------
1340 #-------------------------------------------------------------------------
1341
1341
1342 def _ofind(self, oname, namespaces=None):
1342 def _ofind(self, oname, namespaces=None):
1343 """Find an object in the available namespaces.
1343 """Find an object in the available namespaces.
1344
1344
1345 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1345 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1346
1346
1347 Has special code to detect magic functions.
1347 Has special code to detect magic functions.
1348 """
1348 """
1349 oname = oname.strip()
1349 oname = oname.strip()
1350 #print '1- oname: <%r>' % oname # dbg
1350 #print '1- oname: <%r>' % oname # dbg
1351 if not oname.startswith(ESC_MAGIC) and \
1351 if not oname.startswith(ESC_MAGIC) and \
1352 not oname.startswith(ESC_CELL_MAGIC) and \
1352 not oname.startswith(ESC_MAGIC2) and \
1353 not py3compat.isidentifier(oname, dotted=True):
1353 not py3compat.isidentifier(oname, dotted=True):
1354 return dict(found=False)
1354 return dict(found=False)
1355
1355
1356 alias_ns = None
1356 alias_ns = None
1357 if namespaces is None:
1357 if namespaces is None:
1358 # Namespaces to search in:
1358 # Namespaces to search in:
1359 # Put them in a list. The order is important so that we
1359 # Put them in a list. The order is important so that we
1360 # find things in the same order that Python finds them.
1360 # find things in the same order that Python finds them.
1361 namespaces = [ ('Interactive', self.user_ns),
1361 namespaces = [ ('Interactive', self.user_ns),
1362 ('Interactive (global)', self.user_global_ns),
1362 ('Interactive (global)', self.user_global_ns),
1363 ('Python builtin', builtin_mod.__dict__),
1363 ('Python builtin', builtin_mod.__dict__),
1364 ('Alias', self.alias_manager.alias_table),
1364 ('Alias', self.alias_manager.alias_table),
1365 ]
1365 ]
1366 alias_ns = self.alias_manager.alias_table
1366 alias_ns = self.alias_manager.alias_table
1367
1367
1368 # initialize results to 'null'
1368 # initialize results to 'null'
1369 found = False; obj = None; ospace = None; ds = None;
1369 found = False; obj = None; ospace = None; ds = None;
1370 ismagic = False; isalias = False; parent = None
1370 ismagic = False; isalias = False; parent = None
1371
1371
1372 # We need to special-case 'print', which as of python2.6 registers as a
1372 # We need to special-case 'print', which as of python2.6 registers as a
1373 # function but should only be treated as one if print_function was
1373 # function but should only be treated as one if print_function was
1374 # loaded with a future import. In this case, just bail.
1374 # loaded with a future import. In this case, just bail.
1375 if (oname == 'print' and not py3compat.PY3 and not \
1375 if (oname == 'print' and not py3compat.PY3 and not \
1376 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1376 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1377 return {'found':found, 'obj':obj, 'namespace':ospace,
1377 return {'found':found, 'obj':obj, 'namespace':ospace,
1378 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1378 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1379
1379
1380 # Look for the given name by splitting it in parts. If the head is
1380 # Look for the given name by splitting it in parts. If the head is
1381 # found, then we look for all the remaining parts as members, and only
1381 # found, then we look for all the remaining parts as members, and only
1382 # declare success if we can find them all.
1382 # declare success if we can find them all.
1383 oname_parts = oname.split('.')
1383 oname_parts = oname.split('.')
1384 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1384 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1385 for nsname,ns in namespaces:
1385 for nsname,ns in namespaces:
1386 try:
1386 try:
1387 obj = ns[oname_head]
1387 obj = ns[oname_head]
1388 except KeyError:
1388 except KeyError:
1389 continue
1389 continue
1390 else:
1390 else:
1391 #print 'oname_rest:', oname_rest # dbg
1391 #print 'oname_rest:', oname_rest # dbg
1392 for part in oname_rest:
1392 for part in oname_rest:
1393 try:
1393 try:
1394 parent = obj
1394 parent = obj
1395 obj = getattr(obj,part)
1395 obj = getattr(obj,part)
1396 except:
1396 except:
1397 # Blanket except b/c some badly implemented objects
1397 # Blanket except b/c some badly implemented objects
1398 # allow __getattr__ to raise exceptions other than
1398 # allow __getattr__ to raise exceptions other than
1399 # AttributeError, which then crashes IPython.
1399 # AttributeError, which then crashes IPython.
1400 break
1400 break
1401 else:
1401 else:
1402 # If we finish the for loop (no break), we got all members
1402 # If we finish the for loop (no break), we got all members
1403 found = True
1403 found = True
1404 ospace = nsname
1404 ospace = nsname
1405 if ns == alias_ns:
1405 if ns == alias_ns:
1406 isalias = True
1406 isalias = True
1407 break # namespace loop
1407 break # namespace loop
1408
1408
1409 # Try to see if it's magic
1409 # Try to see if it's magic
1410 if not found:
1410 if not found:
1411 obj = None
1411 obj = None
1412 if oname.startswith(ESC_CELL_MAGIC):
1412 if oname.startswith(ESC_MAGIC2):
1413 oname = oname.lstrip(ESC_CELL_MAGIC)
1413 oname = oname.lstrip(ESC_MAGIC2)
1414 obj = self.find_cell_magic(oname)
1414 obj = self.find_cell_magic(oname)
1415 elif oname.startswith(ESC_MAGIC):
1415 elif oname.startswith(ESC_MAGIC):
1416 oname = oname.lstrip(ESC_MAGIC)
1416 oname = oname.lstrip(ESC_MAGIC)
1417 obj = self.find_line_magic(oname)
1417 obj = self.find_line_magic(oname)
1418 else:
1418 else:
1419 # search without prefix, so run? will find %run?
1419 # search without prefix, so run? will find %run?
1420 obj = self.find_line_magic(oname)
1420 obj = self.find_line_magic(oname)
1421 if obj is None:
1421 if obj is None:
1422 obj = self.find_cell_magic(oname)
1422 obj = self.find_cell_magic(oname)
1423 if obj is not None:
1423 if obj is not None:
1424 found = True
1424 found = True
1425 ospace = 'IPython internal'
1425 ospace = 'IPython internal'
1426 ismagic = True
1426 ismagic = True
1427
1427
1428 # Last try: special-case some literals like '', [], {}, etc:
1428 # Last try: special-case some literals like '', [], {}, etc:
1429 if not found and oname_head in ["''",'""','[]','{}','()']:
1429 if not found and oname_head in ["''",'""','[]','{}','()']:
1430 obj = eval(oname_head)
1430 obj = eval(oname_head)
1431 found = True
1431 found = True
1432 ospace = 'Interactive'
1432 ospace = 'Interactive'
1433
1433
1434 return {'found':found, 'obj':obj, 'namespace':ospace,
1434 return {'found':found, 'obj':obj, 'namespace':ospace,
1435 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1435 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1436
1436
1437 def _ofind_property(self, oname, info):
1437 def _ofind_property(self, oname, info):
1438 """Second part of object finding, to look for property details."""
1438 """Second part of object finding, to look for property details."""
1439 if info.found:
1439 if info.found:
1440 # Get the docstring of the class property if it exists.
1440 # Get the docstring of the class property if it exists.
1441 path = oname.split('.')
1441 path = oname.split('.')
1442 root = '.'.join(path[:-1])
1442 root = '.'.join(path[:-1])
1443 if info.parent is not None:
1443 if info.parent is not None:
1444 try:
1444 try:
1445 target = getattr(info.parent, '__class__')
1445 target = getattr(info.parent, '__class__')
1446 # The object belongs to a class instance.
1446 # The object belongs to a class instance.
1447 try:
1447 try:
1448 target = getattr(target, path[-1])
1448 target = getattr(target, path[-1])
1449 # The class defines the object.
1449 # The class defines the object.
1450 if isinstance(target, property):
1450 if isinstance(target, property):
1451 oname = root + '.__class__.' + path[-1]
1451 oname = root + '.__class__.' + path[-1]
1452 info = Struct(self._ofind(oname))
1452 info = Struct(self._ofind(oname))
1453 except AttributeError: pass
1453 except AttributeError: pass
1454 except AttributeError: pass
1454 except AttributeError: pass
1455
1455
1456 # We return either the new info or the unmodified input if the object
1456 # We return either the new info or the unmodified input if the object
1457 # hadn't been found
1457 # hadn't been found
1458 return info
1458 return info
1459
1459
1460 def _object_find(self, oname, namespaces=None):
1460 def _object_find(self, oname, namespaces=None):
1461 """Find an object and return a struct with info about it."""
1461 """Find an object and return a struct with info about it."""
1462 inf = Struct(self._ofind(oname, namespaces))
1462 inf = Struct(self._ofind(oname, namespaces))
1463 return Struct(self._ofind_property(oname, inf))
1463 return Struct(self._ofind_property(oname, inf))
1464
1464
1465 def _inspect(self, meth, oname, namespaces=None, **kw):
1465 def _inspect(self, meth, oname, namespaces=None, **kw):
1466 """Generic interface to the inspector system.
1466 """Generic interface to the inspector system.
1467
1467
1468 This function is meant to be called by pdef, pdoc & friends."""
1468 This function is meant to be called by pdef, pdoc & friends."""
1469 info = self._object_find(oname)
1469 info = self._object_find(oname)
1470 if info.found:
1470 if info.found:
1471 pmethod = getattr(self.inspector, meth)
1471 pmethod = getattr(self.inspector, meth)
1472 formatter = format_screen if info.ismagic else None
1472 formatter = format_screen if info.ismagic else None
1473 if meth == 'pdoc':
1473 if meth == 'pdoc':
1474 pmethod(info.obj, oname, formatter)
1474 pmethod(info.obj, oname, formatter)
1475 elif meth == 'pinfo':
1475 elif meth == 'pinfo':
1476 pmethod(info.obj, oname, formatter, info, **kw)
1476 pmethod(info.obj, oname, formatter, info, **kw)
1477 else:
1477 else:
1478 pmethod(info.obj, oname)
1478 pmethod(info.obj, oname)
1479 else:
1479 else:
1480 print 'Object `%s` not found.' % oname
1480 print 'Object `%s` not found.' % oname
1481 return 'not found' # so callers can take other action
1481 return 'not found' # so callers can take other action
1482
1482
1483 def object_inspect(self, oname, detail_level=0):
1483 def object_inspect(self, oname, detail_level=0):
1484 with self.builtin_trap:
1484 with self.builtin_trap:
1485 info = self._object_find(oname)
1485 info = self._object_find(oname)
1486 if info.found:
1486 if info.found:
1487 return self.inspector.info(info.obj, oname, info=info,
1487 return self.inspector.info(info.obj, oname, info=info,
1488 detail_level=detail_level
1488 detail_level=detail_level
1489 )
1489 )
1490 else:
1490 else:
1491 return oinspect.object_info(name=oname, found=False)
1491 return oinspect.object_info(name=oname, found=False)
1492
1492
1493 #-------------------------------------------------------------------------
1493 #-------------------------------------------------------------------------
1494 # Things related to history management
1494 # Things related to history management
1495 #-------------------------------------------------------------------------
1495 #-------------------------------------------------------------------------
1496
1496
1497 def init_history(self):
1497 def init_history(self):
1498 """Sets up the command history, and starts regular autosaves."""
1498 """Sets up the command history, and starts regular autosaves."""
1499 self.history_manager = HistoryManager(shell=self, config=self.config)
1499 self.history_manager = HistoryManager(shell=self, config=self.config)
1500 self.configurables.append(self.history_manager)
1500 self.configurables.append(self.history_manager)
1501
1501
1502 #-------------------------------------------------------------------------
1502 #-------------------------------------------------------------------------
1503 # Things related to exception handling and tracebacks (not debugging)
1503 # Things related to exception handling and tracebacks (not debugging)
1504 #-------------------------------------------------------------------------
1504 #-------------------------------------------------------------------------
1505
1505
1506 def init_traceback_handlers(self, custom_exceptions):
1506 def init_traceback_handlers(self, custom_exceptions):
1507 # Syntax error handler.
1507 # Syntax error handler.
1508 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1508 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1509
1509
1510 # The interactive one is initialized with an offset, meaning we always
1510 # The interactive one is initialized with an offset, meaning we always
1511 # want to remove the topmost item in the traceback, which is our own
1511 # want to remove the topmost item in the traceback, which is our own
1512 # internal code. Valid modes: ['Plain','Context','Verbose']
1512 # internal code. Valid modes: ['Plain','Context','Verbose']
1513 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1513 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1514 color_scheme='NoColor',
1514 color_scheme='NoColor',
1515 tb_offset = 1,
1515 tb_offset = 1,
1516 check_cache=self.compile.check_cache)
1516 check_cache=self.compile.check_cache)
1517
1517
1518 # The instance will store a pointer to the system-wide exception hook,
1518 # The instance will store a pointer to the system-wide exception hook,
1519 # so that runtime code (such as magics) can access it. This is because
1519 # so that runtime code (such as magics) can access it. This is because
1520 # during the read-eval loop, it may get temporarily overwritten.
1520 # during the read-eval loop, it may get temporarily overwritten.
1521 self.sys_excepthook = sys.excepthook
1521 self.sys_excepthook = sys.excepthook
1522
1522
1523 # and add any custom exception handlers the user may have specified
1523 # and add any custom exception handlers the user may have specified
1524 self.set_custom_exc(*custom_exceptions)
1524 self.set_custom_exc(*custom_exceptions)
1525
1525
1526 # Set the exception mode
1526 # Set the exception mode
1527 self.InteractiveTB.set_mode(mode=self.xmode)
1527 self.InteractiveTB.set_mode(mode=self.xmode)
1528
1528
1529 def set_custom_exc(self, exc_tuple, handler):
1529 def set_custom_exc(self, exc_tuple, handler):
1530 """set_custom_exc(exc_tuple,handler)
1530 """set_custom_exc(exc_tuple,handler)
1531
1531
1532 Set a custom exception handler, which will be called if any of the
1532 Set a custom exception handler, which will be called if any of the
1533 exceptions in exc_tuple occur in the mainloop (specifically, in the
1533 exceptions in exc_tuple occur in the mainloop (specifically, in the
1534 run_code() method).
1534 run_code() method).
1535
1535
1536 Parameters
1536 Parameters
1537 ----------
1537 ----------
1538
1538
1539 exc_tuple : tuple of exception classes
1539 exc_tuple : tuple of exception classes
1540 A *tuple* of exception classes, for which to call the defined
1540 A *tuple* of exception classes, for which to call the defined
1541 handler. It is very important that you use a tuple, and NOT A
1541 handler. It is very important that you use a tuple, and NOT A
1542 LIST here, because of the way Python's except statement works. If
1542 LIST here, because of the way Python's except statement works. If
1543 you only want to trap a single exception, use a singleton tuple::
1543 you only want to trap a single exception, use a singleton tuple::
1544
1544
1545 exc_tuple == (MyCustomException,)
1545 exc_tuple == (MyCustomException,)
1546
1546
1547 handler : callable
1547 handler : callable
1548 handler must have the following signature::
1548 handler must have the following signature::
1549
1549
1550 def my_handler(self, etype, value, tb, tb_offset=None):
1550 def my_handler(self, etype, value, tb, tb_offset=None):
1551 ...
1551 ...
1552 return structured_traceback
1552 return structured_traceback
1553
1553
1554 Your handler must return a structured traceback (a list of strings),
1554 Your handler must return a structured traceback (a list of strings),
1555 or None.
1555 or None.
1556
1556
1557 This will be made into an instance method (via types.MethodType)
1557 This will be made into an instance method (via types.MethodType)
1558 of IPython itself, and it will be called if any of the exceptions
1558 of IPython itself, and it will be called if any of the exceptions
1559 listed in the exc_tuple are caught. If the handler is None, an
1559 listed in the exc_tuple are caught. If the handler is None, an
1560 internal basic one is used, which just prints basic info.
1560 internal basic one is used, which just prints basic info.
1561
1561
1562 To protect IPython from crashes, if your handler ever raises an
1562 To protect IPython from crashes, if your handler ever raises an
1563 exception or returns an invalid result, it will be immediately
1563 exception or returns an invalid result, it will be immediately
1564 disabled.
1564 disabled.
1565
1565
1566 WARNING: by putting in your own exception handler into IPython's main
1566 WARNING: by putting in your own exception handler into IPython's main
1567 execution loop, you run a very good chance of nasty crashes. This
1567 execution loop, you run a very good chance of nasty crashes. This
1568 facility should only be used if you really know what you are doing."""
1568 facility should only be used if you really know what you are doing."""
1569
1569
1570 assert type(exc_tuple)==type(()) , \
1570 assert type(exc_tuple)==type(()) , \
1571 "The custom exceptions must be given AS A TUPLE."
1571 "The custom exceptions must be given AS A TUPLE."
1572
1572
1573 def dummy_handler(self,etype,value,tb,tb_offset=None):
1573 def dummy_handler(self,etype,value,tb,tb_offset=None):
1574 print '*** Simple custom exception handler ***'
1574 print '*** Simple custom exception handler ***'
1575 print 'Exception type :',etype
1575 print 'Exception type :',etype
1576 print 'Exception value:',value
1576 print 'Exception value:',value
1577 print 'Traceback :',tb
1577 print 'Traceback :',tb
1578 #print 'Source code :','\n'.join(self.buffer)
1578 #print 'Source code :','\n'.join(self.buffer)
1579
1579
1580 def validate_stb(stb):
1580 def validate_stb(stb):
1581 """validate structured traceback return type
1581 """validate structured traceback return type
1582
1582
1583 return type of CustomTB *should* be a list of strings, but allow
1583 return type of CustomTB *should* be a list of strings, but allow
1584 single strings or None, which are harmless.
1584 single strings or None, which are harmless.
1585
1585
1586 This function will *always* return a list of strings,
1586 This function will *always* return a list of strings,
1587 and will raise a TypeError if stb is inappropriate.
1587 and will raise a TypeError if stb is inappropriate.
1588 """
1588 """
1589 msg = "CustomTB must return list of strings, not %r" % stb
1589 msg = "CustomTB must return list of strings, not %r" % stb
1590 if stb is None:
1590 if stb is None:
1591 return []
1591 return []
1592 elif isinstance(stb, basestring):
1592 elif isinstance(stb, basestring):
1593 return [stb]
1593 return [stb]
1594 elif not isinstance(stb, list):
1594 elif not isinstance(stb, list):
1595 raise TypeError(msg)
1595 raise TypeError(msg)
1596 # it's a list
1596 # it's a list
1597 for line in stb:
1597 for line in stb:
1598 # check every element
1598 # check every element
1599 if not isinstance(line, basestring):
1599 if not isinstance(line, basestring):
1600 raise TypeError(msg)
1600 raise TypeError(msg)
1601 return stb
1601 return stb
1602
1602
1603 if handler is None:
1603 if handler is None:
1604 wrapped = dummy_handler
1604 wrapped = dummy_handler
1605 else:
1605 else:
1606 def wrapped(self,etype,value,tb,tb_offset=None):
1606 def wrapped(self,etype,value,tb,tb_offset=None):
1607 """wrap CustomTB handler, to protect IPython from user code
1607 """wrap CustomTB handler, to protect IPython from user code
1608
1608
1609 This makes it harder (but not impossible) for custom exception
1609 This makes it harder (but not impossible) for custom exception
1610 handlers to crash IPython.
1610 handlers to crash IPython.
1611 """
1611 """
1612 try:
1612 try:
1613 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1613 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1614 return validate_stb(stb)
1614 return validate_stb(stb)
1615 except:
1615 except:
1616 # clear custom handler immediately
1616 # clear custom handler immediately
1617 self.set_custom_exc((), None)
1617 self.set_custom_exc((), None)
1618 print >> io.stderr, "Custom TB Handler failed, unregistering"
1618 print >> io.stderr, "Custom TB Handler failed, unregistering"
1619 # show the exception in handler first
1619 # show the exception in handler first
1620 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1620 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1621 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1621 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1622 print >> io.stdout, "The original exception:"
1622 print >> io.stdout, "The original exception:"
1623 stb = self.InteractiveTB.structured_traceback(
1623 stb = self.InteractiveTB.structured_traceback(
1624 (etype,value,tb), tb_offset=tb_offset
1624 (etype,value,tb), tb_offset=tb_offset
1625 )
1625 )
1626 return stb
1626 return stb
1627
1627
1628 self.CustomTB = types.MethodType(wrapped,self)
1628 self.CustomTB = types.MethodType(wrapped,self)
1629 self.custom_exceptions = exc_tuple
1629 self.custom_exceptions = exc_tuple
1630
1630
1631 def excepthook(self, etype, value, tb):
1631 def excepthook(self, etype, value, tb):
1632 """One more defense for GUI apps that call sys.excepthook.
1632 """One more defense for GUI apps that call sys.excepthook.
1633
1633
1634 GUI frameworks like wxPython trap exceptions and call
1634 GUI frameworks like wxPython trap exceptions and call
1635 sys.excepthook themselves. I guess this is a feature that
1635 sys.excepthook themselves. I guess this is a feature that
1636 enables them to keep running after exceptions that would
1636 enables them to keep running after exceptions that would
1637 otherwise kill their mainloop. This is a bother for IPython
1637 otherwise kill their mainloop. This is a bother for IPython
1638 which excepts to catch all of the program exceptions with a try:
1638 which excepts to catch all of the program exceptions with a try:
1639 except: statement.
1639 except: statement.
1640
1640
1641 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1641 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1642 any app directly invokes sys.excepthook, it will look to the user like
1642 any app directly invokes sys.excepthook, it will look to the user like
1643 IPython crashed. In order to work around this, we can disable the
1643 IPython crashed. In order to work around this, we can disable the
1644 CrashHandler and replace it with this excepthook instead, which prints a
1644 CrashHandler and replace it with this excepthook instead, which prints a
1645 regular traceback using our InteractiveTB. In this fashion, apps which
1645 regular traceback using our InteractiveTB. In this fashion, apps which
1646 call sys.excepthook will generate a regular-looking exception from
1646 call sys.excepthook will generate a regular-looking exception from
1647 IPython, and the CrashHandler will only be triggered by real IPython
1647 IPython, and the CrashHandler will only be triggered by real IPython
1648 crashes.
1648 crashes.
1649
1649
1650 This hook should be used sparingly, only in places which are not likely
1650 This hook should be used sparingly, only in places which are not likely
1651 to be true IPython errors.
1651 to be true IPython errors.
1652 """
1652 """
1653 self.showtraceback((etype,value,tb),tb_offset=0)
1653 self.showtraceback((etype,value,tb),tb_offset=0)
1654
1654
1655 def _get_exc_info(self, exc_tuple=None):
1655 def _get_exc_info(self, exc_tuple=None):
1656 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1656 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1657
1657
1658 Ensures sys.last_type,value,traceback hold the exc_info we found,
1658 Ensures sys.last_type,value,traceback hold the exc_info we found,
1659 from whichever source.
1659 from whichever source.
1660
1660
1661 raises ValueError if none of these contain any information
1661 raises ValueError if none of these contain any information
1662 """
1662 """
1663 if exc_tuple is None:
1663 if exc_tuple is None:
1664 etype, value, tb = sys.exc_info()
1664 etype, value, tb = sys.exc_info()
1665 else:
1665 else:
1666 etype, value, tb = exc_tuple
1666 etype, value, tb = exc_tuple
1667
1667
1668 if etype is None:
1668 if etype is None:
1669 if hasattr(sys, 'last_type'):
1669 if hasattr(sys, 'last_type'):
1670 etype, value, tb = sys.last_type, sys.last_value, \
1670 etype, value, tb = sys.last_type, sys.last_value, \
1671 sys.last_traceback
1671 sys.last_traceback
1672
1672
1673 if etype is None:
1673 if etype is None:
1674 raise ValueError("No exception to find")
1674 raise ValueError("No exception to find")
1675
1675
1676 # Now store the exception info in sys.last_type etc.
1676 # Now store the exception info in sys.last_type etc.
1677 # WARNING: these variables are somewhat deprecated and not
1677 # WARNING: these variables are somewhat deprecated and not
1678 # necessarily safe to use in a threaded environment, but tools
1678 # necessarily safe to use in a threaded environment, but tools
1679 # like pdb depend on their existence, so let's set them. If we
1679 # like pdb depend on their existence, so let's set them. If we
1680 # find problems in the field, we'll need to revisit their use.
1680 # find problems in the field, we'll need to revisit their use.
1681 sys.last_type = etype
1681 sys.last_type = etype
1682 sys.last_value = value
1682 sys.last_value = value
1683 sys.last_traceback = tb
1683 sys.last_traceback = tb
1684
1684
1685 return etype, value, tb
1685 return etype, value, tb
1686
1686
1687
1687
1688 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1688 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1689 exception_only=False):
1689 exception_only=False):
1690 """Display the exception that just occurred.
1690 """Display the exception that just occurred.
1691
1691
1692 If nothing is known about the exception, this is the method which
1692 If nothing is known about the exception, this is the method which
1693 should be used throughout the code for presenting user tracebacks,
1693 should be used throughout the code for presenting user tracebacks,
1694 rather than directly invoking the InteractiveTB object.
1694 rather than directly invoking the InteractiveTB object.
1695
1695
1696 A specific showsyntaxerror() also exists, but this method can take
1696 A specific showsyntaxerror() also exists, but this method can take
1697 care of calling it if needed, so unless you are explicitly catching a
1697 care of calling it if needed, so unless you are explicitly catching a
1698 SyntaxError exception, don't try to analyze the stack manually and
1698 SyntaxError exception, don't try to analyze the stack manually and
1699 simply call this method."""
1699 simply call this method."""
1700
1700
1701 try:
1701 try:
1702 try:
1702 try:
1703 etype, value, tb = self._get_exc_info(exc_tuple)
1703 etype, value, tb = self._get_exc_info(exc_tuple)
1704 except ValueError:
1704 except ValueError:
1705 self.write_err('No traceback available to show.\n')
1705 self.write_err('No traceback available to show.\n')
1706 return
1706 return
1707
1707
1708 if etype is SyntaxError:
1708 if etype is SyntaxError:
1709 # Though this won't be called by syntax errors in the input
1709 # Though this won't be called by syntax errors in the input
1710 # line, there may be SyntaxError cases with imported code.
1710 # line, there may be SyntaxError cases with imported code.
1711 self.showsyntaxerror(filename)
1711 self.showsyntaxerror(filename)
1712 elif etype is UsageError:
1712 elif etype is UsageError:
1713 self.write_err("UsageError: %s" % value)
1713 self.write_err("UsageError: %s" % value)
1714 else:
1714 else:
1715 if exception_only:
1715 if exception_only:
1716 stb = ['An exception has occurred, use %tb to see '
1716 stb = ['An exception has occurred, use %tb to see '
1717 'the full traceback.\n']
1717 'the full traceback.\n']
1718 stb.extend(self.InteractiveTB.get_exception_only(etype,
1718 stb.extend(self.InteractiveTB.get_exception_only(etype,
1719 value))
1719 value))
1720 else:
1720 else:
1721 stb = self.InteractiveTB.structured_traceback(etype,
1721 stb = self.InteractiveTB.structured_traceback(etype,
1722 value, tb, tb_offset=tb_offset)
1722 value, tb, tb_offset=tb_offset)
1723
1723
1724 self._showtraceback(etype, value, stb)
1724 self._showtraceback(etype, value, stb)
1725 if self.call_pdb:
1725 if self.call_pdb:
1726 # drop into debugger
1726 # drop into debugger
1727 self.debugger(force=True)
1727 self.debugger(force=True)
1728 return
1728 return
1729
1729
1730 # Actually show the traceback
1730 # Actually show the traceback
1731 self._showtraceback(etype, value, stb)
1731 self._showtraceback(etype, value, stb)
1732
1732
1733 except KeyboardInterrupt:
1733 except KeyboardInterrupt:
1734 self.write_err("\nKeyboardInterrupt\n")
1734 self.write_err("\nKeyboardInterrupt\n")
1735
1735
1736 def _showtraceback(self, etype, evalue, stb):
1736 def _showtraceback(self, etype, evalue, stb):
1737 """Actually show a traceback.
1737 """Actually show a traceback.
1738
1738
1739 Subclasses may override this method to put the traceback on a different
1739 Subclasses may override this method to put the traceback on a different
1740 place, like a side channel.
1740 place, like a side channel.
1741 """
1741 """
1742 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1742 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1743
1743
1744 def showsyntaxerror(self, filename=None):
1744 def showsyntaxerror(self, filename=None):
1745 """Display the syntax error that just occurred.
1745 """Display the syntax error that just occurred.
1746
1746
1747 This doesn't display a stack trace because there isn't one.
1747 This doesn't display a stack trace because there isn't one.
1748
1748
1749 If a filename is given, it is stuffed in the exception instead
1749 If a filename is given, it is stuffed in the exception instead
1750 of what was there before (because Python's parser always uses
1750 of what was there before (because Python's parser always uses
1751 "<string>" when reading from a string).
1751 "<string>" when reading from a string).
1752 """
1752 """
1753 etype, value, last_traceback = self._get_exc_info()
1753 etype, value, last_traceback = self._get_exc_info()
1754
1754
1755 if filename and etype is SyntaxError:
1755 if filename and etype is SyntaxError:
1756 try:
1756 try:
1757 value.filename = filename
1757 value.filename = filename
1758 except:
1758 except:
1759 # Not the format we expect; leave it alone
1759 # Not the format we expect; leave it alone
1760 pass
1760 pass
1761
1761
1762 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1762 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1763 self._showtraceback(etype, value, stb)
1763 self._showtraceback(etype, value, stb)
1764
1764
1765 # This is overridden in TerminalInteractiveShell to show a message about
1765 # This is overridden in TerminalInteractiveShell to show a message about
1766 # the %paste magic.
1766 # the %paste magic.
1767 def showindentationerror(self):
1767 def showindentationerror(self):
1768 """Called by run_cell when there's an IndentationError in code entered
1768 """Called by run_cell when there's an IndentationError in code entered
1769 at the prompt.
1769 at the prompt.
1770
1770
1771 This is overridden in TerminalInteractiveShell to show a message about
1771 This is overridden in TerminalInteractiveShell to show a message about
1772 the %paste magic."""
1772 the %paste magic."""
1773 self.showsyntaxerror()
1773 self.showsyntaxerror()
1774
1774
1775 #-------------------------------------------------------------------------
1775 #-------------------------------------------------------------------------
1776 # Things related to readline
1776 # Things related to readline
1777 #-------------------------------------------------------------------------
1777 #-------------------------------------------------------------------------
1778
1778
1779 def init_readline(self):
1779 def init_readline(self):
1780 """Command history completion/saving/reloading."""
1780 """Command history completion/saving/reloading."""
1781
1781
1782 if self.readline_use:
1782 if self.readline_use:
1783 import IPython.utils.rlineimpl as readline
1783 import IPython.utils.rlineimpl as readline
1784
1784
1785 self.rl_next_input = None
1785 self.rl_next_input = None
1786 self.rl_do_indent = False
1786 self.rl_do_indent = False
1787
1787
1788 if not self.readline_use or not readline.have_readline:
1788 if not self.readline_use or not readline.have_readline:
1789 self.has_readline = False
1789 self.has_readline = False
1790 self.readline = None
1790 self.readline = None
1791 # Set a number of methods that depend on readline to be no-op
1791 # Set a number of methods that depend on readline to be no-op
1792 self.readline_no_record = no_op_context
1792 self.readline_no_record = no_op_context
1793 self.set_readline_completer = no_op
1793 self.set_readline_completer = no_op
1794 self.set_custom_completer = no_op
1794 self.set_custom_completer = no_op
1795 self.set_completer_frame = no_op
1795 self.set_completer_frame = no_op
1796 if self.readline_use:
1796 if self.readline_use:
1797 warn('Readline services not available or not loaded.')
1797 warn('Readline services not available or not loaded.')
1798 else:
1798 else:
1799 self.has_readline = True
1799 self.has_readline = True
1800 self.readline = readline
1800 self.readline = readline
1801 sys.modules['readline'] = readline
1801 sys.modules['readline'] = readline
1802
1802
1803 # Platform-specific configuration
1803 # Platform-specific configuration
1804 if os.name == 'nt':
1804 if os.name == 'nt':
1805 # FIXME - check with Frederick to see if we can harmonize
1805 # FIXME - check with Frederick to see if we can harmonize
1806 # naming conventions with pyreadline to avoid this
1806 # naming conventions with pyreadline to avoid this
1807 # platform-dependent check
1807 # platform-dependent check
1808 self.readline_startup_hook = readline.set_pre_input_hook
1808 self.readline_startup_hook = readline.set_pre_input_hook
1809 else:
1809 else:
1810 self.readline_startup_hook = readline.set_startup_hook
1810 self.readline_startup_hook = readline.set_startup_hook
1811
1811
1812 # Load user's initrc file (readline config)
1812 # Load user's initrc file (readline config)
1813 # Or if libedit is used, load editrc.
1813 # Or if libedit is used, load editrc.
1814 inputrc_name = os.environ.get('INPUTRC')
1814 inputrc_name = os.environ.get('INPUTRC')
1815 if inputrc_name is None:
1815 if inputrc_name is None:
1816 inputrc_name = '.inputrc'
1816 inputrc_name = '.inputrc'
1817 if readline.uses_libedit:
1817 if readline.uses_libedit:
1818 inputrc_name = '.editrc'
1818 inputrc_name = '.editrc'
1819 inputrc_name = os.path.join(self.home_dir, inputrc_name)
1819 inputrc_name = os.path.join(self.home_dir, inputrc_name)
1820 if os.path.isfile(inputrc_name):
1820 if os.path.isfile(inputrc_name):
1821 try:
1821 try:
1822 readline.read_init_file(inputrc_name)
1822 readline.read_init_file(inputrc_name)
1823 except:
1823 except:
1824 warn('Problems reading readline initialization file <%s>'
1824 warn('Problems reading readline initialization file <%s>'
1825 % inputrc_name)
1825 % inputrc_name)
1826
1826
1827 # Configure readline according to user's prefs
1827 # Configure readline according to user's prefs
1828 # This is only done if GNU readline is being used. If libedit
1828 # This is only done if GNU readline is being used. If libedit
1829 # is being used (as on Leopard) the readline config is
1829 # is being used (as on Leopard) the readline config is
1830 # not run as the syntax for libedit is different.
1830 # not run as the syntax for libedit is different.
1831 if not readline.uses_libedit:
1831 if not readline.uses_libedit:
1832 for rlcommand in self.readline_parse_and_bind:
1832 for rlcommand in self.readline_parse_and_bind:
1833 #print "loading rl:",rlcommand # dbg
1833 #print "loading rl:",rlcommand # dbg
1834 readline.parse_and_bind(rlcommand)
1834 readline.parse_and_bind(rlcommand)
1835
1835
1836 # Remove some chars from the delimiters list. If we encounter
1836 # Remove some chars from the delimiters list. If we encounter
1837 # unicode chars, discard them.
1837 # unicode chars, discard them.
1838 delims = readline.get_completer_delims()
1838 delims = readline.get_completer_delims()
1839 if not py3compat.PY3:
1839 if not py3compat.PY3:
1840 delims = delims.encode("ascii", "ignore")
1840 delims = delims.encode("ascii", "ignore")
1841 for d in self.readline_remove_delims:
1841 for d in self.readline_remove_delims:
1842 delims = delims.replace(d, "")
1842 delims = delims.replace(d, "")
1843 delims = delims.replace(ESC_MAGIC, '')
1843 delims = delims.replace(ESC_MAGIC, '')
1844 readline.set_completer_delims(delims)
1844 readline.set_completer_delims(delims)
1845 # otherwise we end up with a monster history after a while:
1845 # otherwise we end up with a monster history after a while:
1846 readline.set_history_length(self.history_length)
1846 readline.set_history_length(self.history_length)
1847
1847
1848 self.refill_readline_hist()
1848 self.refill_readline_hist()
1849 self.readline_no_record = ReadlineNoRecord(self)
1849 self.readline_no_record = ReadlineNoRecord(self)
1850
1850
1851 # Configure auto-indent for all platforms
1851 # Configure auto-indent for all platforms
1852 self.set_autoindent(self.autoindent)
1852 self.set_autoindent(self.autoindent)
1853
1853
1854 def refill_readline_hist(self):
1854 def refill_readline_hist(self):
1855 # Load the last 1000 lines from history
1855 # Load the last 1000 lines from history
1856 self.readline.clear_history()
1856 self.readline.clear_history()
1857 stdin_encoding = sys.stdin.encoding or "utf-8"
1857 stdin_encoding = sys.stdin.encoding or "utf-8"
1858 last_cell = u""
1858 last_cell = u""
1859 for _, _, cell in self.history_manager.get_tail(1000,
1859 for _, _, cell in self.history_manager.get_tail(1000,
1860 include_latest=True):
1860 include_latest=True):
1861 # Ignore blank lines and consecutive duplicates
1861 # Ignore blank lines and consecutive duplicates
1862 cell = cell.rstrip()
1862 cell = cell.rstrip()
1863 if cell and (cell != last_cell):
1863 if cell and (cell != last_cell):
1864 if self.multiline_history:
1864 if self.multiline_history:
1865 self.readline.add_history(py3compat.unicode_to_str(cell,
1865 self.readline.add_history(py3compat.unicode_to_str(cell,
1866 stdin_encoding))
1866 stdin_encoding))
1867 else:
1867 else:
1868 for line in cell.splitlines():
1868 for line in cell.splitlines():
1869 self.readline.add_history(py3compat.unicode_to_str(line,
1869 self.readline.add_history(py3compat.unicode_to_str(line,
1870 stdin_encoding))
1870 stdin_encoding))
1871 last_cell = cell
1871 last_cell = cell
1872
1872
1873 def set_next_input(self, s):
1873 def set_next_input(self, s):
1874 """ Sets the 'default' input string for the next command line.
1874 """ Sets the 'default' input string for the next command line.
1875
1875
1876 Requires readline.
1876 Requires readline.
1877
1877
1878 Example:
1878 Example:
1879
1879
1880 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1880 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1881 [D:\ipython]|2> Hello Word_ # cursor is here
1881 [D:\ipython]|2> Hello Word_ # cursor is here
1882 """
1882 """
1883 self.rl_next_input = py3compat.cast_bytes_py2(s)
1883 self.rl_next_input = py3compat.cast_bytes_py2(s)
1884
1884
1885 # Maybe move this to the terminal subclass?
1885 # Maybe move this to the terminal subclass?
1886 def pre_readline(self):
1886 def pre_readline(self):
1887 """readline hook to be used at the start of each line.
1887 """readline hook to be used at the start of each line.
1888
1888
1889 Currently it handles auto-indent only."""
1889 Currently it handles auto-indent only."""
1890
1890
1891 if self.rl_do_indent:
1891 if self.rl_do_indent:
1892 self.readline.insert_text(self._indent_current_str())
1892 self.readline.insert_text(self._indent_current_str())
1893 if self.rl_next_input is not None:
1893 if self.rl_next_input is not None:
1894 self.readline.insert_text(self.rl_next_input)
1894 self.readline.insert_text(self.rl_next_input)
1895 self.rl_next_input = None
1895 self.rl_next_input = None
1896
1896
1897 def _indent_current_str(self):
1897 def _indent_current_str(self):
1898 """return the current level of indentation as a string"""
1898 """return the current level of indentation as a string"""
1899 return self.input_splitter.indent_spaces * ' '
1899 return self.input_splitter.indent_spaces * ' '
1900
1900
1901 #-------------------------------------------------------------------------
1901 #-------------------------------------------------------------------------
1902 # Things related to text completion
1902 # Things related to text completion
1903 #-------------------------------------------------------------------------
1903 #-------------------------------------------------------------------------
1904
1904
1905 def init_completer(self):
1905 def init_completer(self):
1906 """Initialize the completion machinery.
1906 """Initialize the completion machinery.
1907
1907
1908 This creates completion machinery that can be used by client code,
1908 This creates completion machinery that can be used by client code,
1909 either interactively in-process (typically triggered by the readline
1909 either interactively in-process (typically triggered by the readline
1910 library), programatically (such as in test suites) or out-of-prcess
1910 library), programatically (such as in test suites) or out-of-prcess
1911 (typically over the network by remote frontends).
1911 (typically over the network by remote frontends).
1912 """
1912 """
1913 from IPython.core.completer import IPCompleter
1913 from IPython.core.completer import IPCompleter
1914 from IPython.core.completerlib import (module_completer,
1914 from IPython.core.completerlib import (module_completer,
1915 magic_run_completer, cd_completer, reset_completer)
1915 magic_run_completer, cd_completer, reset_completer)
1916
1916
1917 self.Completer = IPCompleter(shell=self,
1917 self.Completer = IPCompleter(shell=self,
1918 namespace=self.user_ns,
1918 namespace=self.user_ns,
1919 global_namespace=self.user_global_ns,
1919 global_namespace=self.user_global_ns,
1920 alias_table=self.alias_manager.alias_table,
1920 alias_table=self.alias_manager.alias_table,
1921 use_readline=self.has_readline,
1921 use_readline=self.has_readline,
1922 config=self.config,
1922 config=self.config,
1923 )
1923 )
1924 self.configurables.append(self.Completer)
1924 self.configurables.append(self.Completer)
1925
1925
1926 # Add custom completers to the basic ones built into IPCompleter
1926 # Add custom completers to the basic ones built into IPCompleter
1927 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1927 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1928 self.strdispatchers['complete_command'] = sdisp
1928 self.strdispatchers['complete_command'] = sdisp
1929 self.Completer.custom_completers = sdisp
1929 self.Completer.custom_completers = sdisp
1930
1930
1931 self.set_hook('complete_command', module_completer, str_key = 'import')
1931 self.set_hook('complete_command', module_completer, str_key = 'import')
1932 self.set_hook('complete_command', module_completer, str_key = 'from')
1932 self.set_hook('complete_command', module_completer, str_key = 'from')
1933 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1933 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1934 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1934 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1935 self.set_hook('complete_command', reset_completer, str_key = '%reset')
1935 self.set_hook('complete_command', reset_completer, str_key = '%reset')
1936
1936
1937 # Only configure readline if we truly are using readline. IPython can
1937 # Only configure readline if we truly are using readline. IPython can
1938 # do tab-completion over the network, in GUIs, etc, where readline
1938 # do tab-completion over the network, in GUIs, etc, where readline
1939 # itself may be absent
1939 # itself may be absent
1940 if self.has_readline:
1940 if self.has_readline:
1941 self.set_readline_completer()
1941 self.set_readline_completer()
1942
1942
1943 def complete(self, text, line=None, cursor_pos=None):
1943 def complete(self, text, line=None, cursor_pos=None):
1944 """Return the completed text and a list of completions.
1944 """Return the completed text and a list of completions.
1945
1945
1946 Parameters
1946 Parameters
1947 ----------
1947 ----------
1948
1948
1949 text : string
1949 text : string
1950 A string of text to be completed on. It can be given as empty and
1950 A string of text to be completed on. It can be given as empty and
1951 instead a line/position pair are given. In this case, the
1951 instead a line/position pair are given. In this case, the
1952 completer itself will split the line like readline does.
1952 completer itself will split the line like readline does.
1953
1953
1954 line : string, optional
1954 line : string, optional
1955 The complete line that text is part of.
1955 The complete line that text is part of.
1956
1956
1957 cursor_pos : int, optional
1957 cursor_pos : int, optional
1958 The position of the cursor on the input line.
1958 The position of the cursor on the input line.
1959
1959
1960 Returns
1960 Returns
1961 -------
1961 -------
1962 text : string
1962 text : string
1963 The actual text that was completed.
1963 The actual text that was completed.
1964
1964
1965 matches : list
1965 matches : list
1966 A sorted list with all possible completions.
1966 A sorted list with all possible completions.
1967
1967
1968 The optional arguments allow the completion to take more context into
1968 The optional arguments allow the completion to take more context into
1969 account, and are part of the low-level completion API.
1969 account, and are part of the low-level completion API.
1970
1970
1971 This is a wrapper around the completion mechanism, similar to what
1971 This is a wrapper around the completion mechanism, similar to what
1972 readline does at the command line when the TAB key is hit. By
1972 readline does at the command line when the TAB key is hit. By
1973 exposing it as a method, it can be used by other non-readline
1973 exposing it as a method, it can be used by other non-readline
1974 environments (such as GUIs) for text completion.
1974 environments (such as GUIs) for text completion.
1975
1975
1976 Simple usage example:
1976 Simple usage example:
1977
1977
1978 In [1]: x = 'hello'
1978 In [1]: x = 'hello'
1979
1979
1980 In [2]: _ip.complete('x.l')
1980 In [2]: _ip.complete('x.l')
1981 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1981 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1982 """
1982 """
1983
1983
1984 # Inject names into __builtin__ so we can complete on the added names.
1984 # Inject names into __builtin__ so we can complete on the added names.
1985 with self.builtin_trap:
1985 with self.builtin_trap:
1986 return self.Completer.complete(text, line, cursor_pos)
1986 return self.Completer.complete(text, line, cursor_pos)
1987
1987
1988 def set_custom_completer(self, completer, pos=0):
1988 def set_custom_completer(self, completer, pos=0):
1989 """Adds a new custom completer function.
1989 """Adds a new custom completer function.
1990
1990
1991 The position argument (defaults to 0) is the index in the completers
1991 The position argument (defaults to 0) is the index in the completers
1992 list where you want the completer to be inserted."""
1992 list where you want the completer to be inserted."""
1993
1993
1994 newcomp = types.MethodType(completer,self.Completer)
1994 newcomp = types.MethodType(completer,self.Completer)
1995 self.Completer.matchers.insert(pos,newcomp)
1995 self.Completer.matchers.insert(pos,newcomp)
1996
1996
1997 def set_readline_completer(self):
1997 def set_readline_completer(self):
1998 """Reset readline's completer to be our own."""
1998 """Reset readline's completer to be our own."""
1999 self.readline.set_completer(self.Completer.rlcomplete)
1999 self.readline.set_completer(self.Completer.rlcomplete)
2000
2000
2001 def set_completer_frame(self, frame=None):
2001 def set_completer_frame(self, frame=None):
2002 """Set the frame of the completer."""
2002 """Set the frame of the completer."""
2003 if frame:
2003 if frame:
2004 self.Completer.namespace = frame.f_locals
2004 self.Completer.namespace = frame.f_locals
2005 self.Completer.global_namespace = frame.f_globals
2005 self.Completer.global_namespace = frame.f_globals
2006 else:
2006 else:
2007 self.Completer.namespace = self.user_ns
2007 self.Completer.namespace = self.user_ns
2008 self.Completer.global_namespace = self.user_global_ns
2008 self.Completer.global_namespace = self.user_global_ns
2009
2009
2010 #-------------------------------------------------------------------------
2010 #-------------------------------------------------------------------------
2011 # Things related to magics
2011 # Things related to magics
2012 #-------------------------------------------------------------------------
2012 #-------------------------------------------------------------------------
2013
2013
2014 def init_magics(self):
2014 def init_magics(self):
2015 from IPython.core import magics as m
2015 from IPython.core import magics as m
2016 self.magics_manager = magic.MagicsManager(shell=self,
2016 self.magics_manager = magic.MagicsManager(shell=self,
2017 confg=self.config,
2017 confg=self.config,
2018 user_magics=m.UserMagics(self))
2018 user_magics=m.UserMagics(self))
2019 self.configurables.append(self.magics_manager)
2019 self.configurables.append(self.magics_manager)
2020
2020
2021 # Expose as public API from the magics manager
2021 # Expose as public API from the magics manager
2022 self.register_magics = self.magics_manager.register
2022 self.register_magics = self.magics_manager.register
2023 self.register_magic_function = self.magics_manager.register_function
2023 self.register_magic_function = self.magics_manager.register_function
2024 self.define_magic = self.magics_manager.define_magic
2024 self.define_magic = self.magics_manager.define_magic
2025
2025
2026 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2026 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2027 m.ConfigMagics, m.DeprecatedMagics, m.ExecutionMagics,
2027 m.ConfigMagics, m.DeprecatedMagics, m.ExecutionMagics,
2028 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2028 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2029 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2029 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2030 )
2030 )
2031
2031
2032 # FIXME: Move the color initialization to the DisplayHook, which
2032 # FIXME: Move the color initialization to the DisplayHook, which
2033 # should be split into a prompt manager and displayhook. We probably
2033 # should be split into a prompt manager and displayhook. We probably
2034 # even need a centralize colors management object.
2034 # even need a centralize colors management object.
2035 self.magic('colors %s' % self.colors)
2035 self.magic('colors %s' % self.colors)
2036
2036
2037 def run_line_magic(self, magic_name, line):
2037 def run_line_magic(self, magic_name, line):
2038 """Execute the given line magic.
2038 """Execute the given line magic.
2039
2039
2040 Parameters
2040 Parameters
2041 ----------
2041 ----------
2042 magic_name : str
2042 magic_name : str
2043 Name of the desired magic function, without '%' prefix.
2043 Name of the desired magic function, without '%' prefix.
2044
2044
2045 line : str
2045 line : str
2046 The rest of the input line as a single string.
2046 The rest of the input line as a single string.
2047 """
2047 """
2048 fn = self.find_line_magic(magic_name)
2048 fn = self.find_line_magic(magic_name)
2049 if fn is None:
2049 if fn is None:
2050 cm = self.find_cell_magic(magic_name)
2050 cm = self.find_cell_magic(magic_name)
2051 etpl = "Line magic function `%%%s` not found%s."
2051 etpl = "Line magic function `%%%s` not found%s."
2052 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2052 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2053 'did you mean that instead?)' % magic_name )
2053 'did you mean that instead?)' % magic_name )
2054 error(etpl % (magic_name, extra))
2054 error(etpl % (magic_name, extra))
2055 else:
2055 else:
2056 # Note: this is the distance in the stack to the user's frame.
2056 # Note: this is the distance in the stack to the user's frame.
2057 # This will need to be updated if the internal calling logic gets
2057 # This will need to be updated if the internal calling logic gets
2058 # refactored, or else we'll be expanding the wrong variables.
2058 # refactored, or else we'll be expanding the wrong variables.
2059 stack_depth = 2
2059 stack_depth = 2
2060 magic_arg_s = self.var_expand(line, stack_depth)
2060 magic_arg_s = self.var_expand(line, stack_depth)
2061 # Put magic args in a list so we can call with f(*a) syntax
2061 # Put magic args in a list so we can call with f(*a) syntax
2062 args = [magic_arg_s]
2062 args = [magic_arg_s]
2063 # Grab local namespace if we need it:
2063 # Grab local namespace if we need it:
2064 if getattr(fn, "needs_local_scope", False):
2064 if getattr(fn, "needs_local_scope", False):
2065 args.append(sys._getframe(stack_depth).f_locals)
2065 args.append(sys._getframe(stack_depth).f_locals)
2066 with self.builtin_trap:
2066 with self.builtin_trap:
2067 result = fn(*args)
2067 result = fn(*args)
2068 return result
2068 return result
2069
2069
2070 def run_cell_magic(self, magic_name, line, cell):
2070 def run_cell_magic(self, magic_name, line, cell):
2071 """Execute the given cell magic.
2071 """Execute the given cell magic.
2072
2072
2073 Parameters
2073 Parameters
2074 ----------
2074 ----------
2075 magic_name : str
2075 magic_name : str
2076 Name of the desired magic function, without '%' prefix.
2076 Name of the desired magic function, without '%' prefix.
2077
2077
2078 line : str
2078 line : str
2079 The rest of the first input line as a single string.
2079 The rest of the first input line as a single string.
2080
2080
2081 cell : str
2081 cell : str
2082 The body of the cell as a (possibly multiline) string.
2082 The body of the cell as a (possibly multiline) string.
2083 """
2083 """
2084 fn = self.find_cell_magic(magic_name)
2084 fn = self.find_cell_magic(magic_name)
2085 if fn is None:
2085 if fn is None:
2086 lm = self.find_line_magic(magic_name)
2086 lm = self.find_line_magic(magic_name)
2087 etpl = "Cell magic function `%%%%%s` not found%s."
2087 etpl = "Cell magic function `%%%%%s` not found%s."
2088 extra = '' if lm is None else (' (But line magic `%%%s` exists, '
2088 extra = '' if lm is None else (' (But line magic `%%%s` exists, '
2089 'did you mean that instead?)' % magic_name )
2089 'did you mean that instead?)' % magic_name )
2090 error(etpl % (magic_name, extra))
2090 error(etpl % (magic_name, extra))
2091 else:
2091 else:
2092 # Note: this is the distance in the stack to the user's frame.
2092 # Note: this is the distance in the stack to the user's frame.
2093 # This will need to be updated if the internal calling logic gets
2093 # This will need to be updated if the internal calling logic gets
2094 # refactored, or else we'll be expanding the wrong variables.
2094 # refactored, or else we'll be expanding the wrong variables.
2095 stack_depth = 2
2095 stack_depth = 2
2096 magic_arg_s = self.var_expand(line, stack_depth)
2096 magic_arg_s = self.var_expand(line, stack_depth)
2097 with self.builtin_trap:
2097 with self.builtin_trap:
2098 result = fn(line, cell)
2098 result = fn(line, cell)
2099 return result
2099 return result
2100
2100
2101 def find_line_magic(self, magic_name):
2101 def find_line_magic(self, magic_name):
2102 """Find and return a line magic by name.
2102 """Find and return a line magic by name.
2103
2103
2104 Returns None if the magic isn't found."""
2104 Returns None if the magic isn't found."""
2105 return self.magics_manager.magics['line'].get(magic_name)
2105 return self.magics_manager.magics['line'].get(magic_name)
2106
2106
2107 def find_cell_magic(self, magic_name):
2107 def find_cell_magic(self, magic_name):
2108 """Find and return a cell magic by name.
2108 """Find and return a cell magic by name.
2109
2109
2110 Returns None if the magic isn't found."""
2110 Returns None if the magic isn't found."""
2111 return self.magics_manager.magics['cell'].get(magic_name)
2111 return self.magics_manager.magics['cell'].get(magic_name)
2112
2112
2113 def find_magic(self, magic_name, magic_kind='line'):
2113 def find_magic(self, magic_name, magic_kind='line'):
2114 """Find and return a magic of the given type by name.
2114 """Find and return a magic of the given type by name.
2115
2115
2116 Returns None if the magic isn't found."""
2116 Returns None if the magic isn't found."""
2117 return self.magics_manager.magics[magic_kind].get(magic_name)
2117 return self.magics_manager.magics[magic_kind].get(magic_name)
2118
2118
2119 def magic(self, arg_s):
2119 def magic(self, arg_s):
2120 """DEPRECATED. Use run_line_magic() instead.
2120 """DEPRECATED. Use run_line_magic() instead.
2121
2121
2122 Call a magic function by name.
2122 Call a magic function by name.
2123
2123
2124 Input: a string containing the name of the magic function to call and
2124 Input: a string containing the name of the magic function to call and
2125 any additional arguments to be passed to the magic.
2125 any additional arguments to be passed to the magic.
2126
2126
2127 magic('name -opt foo bar') is equivalent to typing at the ipython
2127 magic('name -opt foo bar') is equivalent to typing at the ipython
2128 prompt:
2128 prompt:
2129
2129
2130 In[1]: %name -opt foo bar
2130 In[1]: %name -opt foo bar
2131
2131
2132 To call a magic without arguments, simply use magic('name').
2132 To call a magic without arguments, simply use magic('name').
2133
2133
2134 This provides a proper Python function to call IPython's magics in any
2134 This provides a proper Python function to call IPython's magics in any
2135 valid Python code you can type at the interpreter, including loops and
2135 valid Python code you can type at the interpreter, including loops and
2136 compound statements.
2136 compound statements.
2137 """
2137 """
2138 # TODO: should we issue a loud deprecation warning here?
2138 # TODO: should we issue a loud deprecation warning here?
2139 magic_name, _, magic_arg_s = arg_s.partition(' ')
2139 magic_name, _, magic_arg_s = arg_s.partition(' ')
2140 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2140 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2141 return self.run_line_magic(magic_name, magic_arg_s)
2141 return self.run_line_magic(magic_name, magic_arg_s)
2142
2142
2143 #-------------------------------------------------------------------------
2143 #-------------------------------------------------------------------------
2144 # Things related to macros
2144 # Things related to macros
2145 #-------------------------------------------------------------------------
2145 #-------------------------------------------------------------------------
2146
2146
2147 def define_macro(self, name, themacro):
2147 def define_macro(self, name, themacro):
2148 """Define a new macro
2148 """Define a new macro
2149
2149
2150 Parameters
2150 Parameters
2151 ----------
2151 ----------
2152 name : str
2152 name : str
2153 The name of the macro.
2153 The name of the macro.
2154 themacro : str or Macro
2154 themacro : str or Macro
2155 The action to do upon invoking the macro. If a string, a new
2155 The action to do upon invoking the macro. If a string, a new
2156 Macro object is created by passing the string to it.
2156 Macro object is created by passing the string to it.
2157 """
2157 """
2158
2158
2159 from IPython.core import macro
2159 from IPython.core import macro
2160
2160
2161 if isinstance(themacro, basestring):
2161 if isinstance(themacro, basestring):
2162 themacro = macro.Macro(themacro)
2162 themacro = macro.Macro(themacro)
2163 if not isinstance(themacro, macro.Macro):
2163 if not isinstance(themacro, macro.Macro):
2164 raise ValueError('A macro must be a string or a Macro instance.')
2164 raise ValueError('A macro must be a string or a Macro instance.')
2165 self.user_ns[name] = themacro
2165 self.user_ns[name] = themacro
2166
2166
2167 #-------------------------------------------------------------------------
2167 #-------------------------------------------------------------------------
2168 # Things related to the running of system commands
2168 # Things related to the running of system commands
2169 #-------------------------------------------------------------------------
2169 #-------------------------------------------------------------------------
2170
2170
2171 def system_piped(self, cmd):
2171 def system_piped(self, cmd):
2172 """Call the given cmd in a subprocess, piping stdout/err
2172 """Call the given cmd in a subprocess, piping stdout/err
2173
2173
2174 Parameters
2174 Parameters
2175 ----------
2175 ----------
2176 cmd : str
2176 cmd : str
2177 Command to execute (can not end in '&', as background processes are
2177 Command to execute (can not end in '&', as background processes are
2178 not supported. Should not be a command that expects input
2178 not supported. Should not be a command that expects input
2179 other than simple text.
2179 other than simple text.
2180 """
2180 """
2181 if cmd.rstrip().endswith('&'):
2181 if cmd.rstrip().endswith('&'):
2182 # this is *far* from a rigorous test
2182 # this is *far* from a rigorous test
2183 # We do not support backgrounding processes because we either use
2183 # We do not support backgrounding processes because we either use
2184 # pexpect or pipes to read from. Users can always just call
2184 # pexpect or pipes to read from. Users can always just call
2185 # os.system() or use ip.system=ip.system_raw
2185 # os.system() or use ip.system=ip.system_raw
2186 # if they really want a background process.
2186 # if they really want a background process.
2187 raise OSError("Background processes not supported.")
2187 raise OSError("Background processes not supported.")
2188
2188
2189 # we explicitly do NOT return the subprocess status code, because
2189 # we explicitly do NOT return the subprocess status code, because
2190 # a non-None value would trigger :func:`sys.displayhook` calls.
2190 # a non-None value would trigger :func:`sys.displayhook` calls.
2191 # Instead, we store the exit_code in user_ns.
2191 # Instead, we store the exit_code in user_ns.
2192 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2192 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2193
2193
2194 def system_raw(self, cmd):
2194 def system_raw(self, cmd):
2195 """Call the given cmd in a subprocess using os.system
2195 """Call the given cmd in a subprocess using os.system
2196
2196
2197 Parameters
2197 Parameters
2198 ----------
2198 ----------
2199 cmd : str
2199 cmd : str
2200 Command to execute.
2200 Command to execute.
2201 """
2201 """
2202 cmd = self.var_expand(cmd, depth=1)
2202 cmd = self.var_expand(cmd, depth=1)
2203 # protect os.system from UNC paths on Windows, which it can't handle:
2203 # protect os.system from UNC paths on Windows, which it can't handle:
2204 if sys.platform == 'win32':
2204 if sys.platform == 'win32':
2205 from IPython.utils._process_win32 import AvoidUNCPath
2205 from IPython.utils._process_win32 import AvoidUNCPath
2206 with AvoidUNCPath() as path:
2206 with AvoidUNCPath() as path:
2207 if path is not None:
2207 if path is not None:
2208 cmd = '"pushd %s &&"%s' % (path, cmd)
2208 cmd = '"pushd %s &&"%s' % (path, cmd)
2209 cmd = py3compat.unicode_to_str(cmd)
2209 cmd = py3compat.unicode_to_str(cmd)
2210 ec = os.system(cmd)
2210 ec = os.system(cmd)
2211 else:
2211 else:
2212 cmd = py3compat.unicode_to_str(cmd)
2212 cmd = py3compat.unicode_to_str(cmd)
2213 ec = os.system(cmd)
2213 ec = os.system(cmd)
2214
2214
2215 # We explicitly do NOT return the subprocess status code, because
2215 # We explicitly do NOT return the subprocess status code, because
2216 # a non-None value would trigger :func:`sys.displayhook` calls.
2216 # a non-None value would trigger :func:`sys.displayhook` calls.
2217 # Instead, we store the exit_code in user_ns.
2217 # Instead, we store the exit_code in user_ns.
2218 self.user_ns['_exit_code'] = ec
2218 self.user_ns['_exit_code'] = ec
2219
2219
2220 # use piped system by default, because it is better behaved
2220 # use piped system by default, because it is better behaved
2221 system = system_piped
2221 system = system_piped
2222
2222
2223 def getoutput(self, cmd, split=True, depth=0):
2223 def getoutput(self, cmd, split=True, depth=0):
2224 """Get output (possibly including stderr) from a subprocess.
2224 """Get output (possibly including stderr) from a subprocess.
2225
2225
2226 Parameters
2226 Parameters
2227 ----------
2227 ----------
2228 cmd : str
2228 cmd : str
2229 Command to execute (can not end in '&', as background processes are
2229 Command to execute (can not end in '&', as background processes are
2230 not supported.
2230 not supported.
2231 split : bool, optional
2231 split : bool, optional
2232 If True, split the output into an IPython SList. Otherwise, an
2232 If True, split the output into an IPython SList. Otherwise, an
2233 IPython LSString is returned. These are objects similar to normal
2233 IPython LSString is returned. These are objects similar to normal
2234 lists and strings, with a few convenience attributes for easier
2234 lists and strings, with a few convenience attributes for easier
2235 manipulation of line-based output. You can use '?' on them for
2235 manipulation of line-based output. You can use '?' on them for
2236 details.
2236 details.
2237 depth : int, optional
2237 depth : int, optional
2238 How many frames above the caller are the local variables which should
2238 How many frames above the caller are the local variables which should
2239 be expanded in the command string? The default (0) assumes that the
2239 be expanded in the command string? The default (0) assumes that the
2240 expansion variables are in the stack frame calling this function.
2240 expansion variables are in the stack frame calling this function.
2241 """
2241 """
2242 if cmd.rstrip().endswith('&'):
2242 if cmd.rstrip().endswith('&'):
2243 # this is *far* from a rigorous test
2243 # this is *far* from a rigorous test
2244 raise OSError("Background processes not supported.")
2244 raise OSError("Background processes not supported.")
2245 out = getoutput(self.var_expand(cmd, depth=depth+1))
2245 out = getoutput(self.var_expand(cmd, depth=depth+1))
2246 if split:
2246 if split:
2247 out = SList(out.splitlines())
2247 out = SList(out.splitlines())
2248 else:
2248 else:
2249 out = LSString(out)
2249 out = LSString(out)
2250 return out
2250 return out
2251
2251
2252 #-------------------------------------------------------------------------
2252 #-------------------------------------------------------------------------
2253 # Things related to aliases
2253 # Things related to aliases
2254 #-------------------------------------------------------------------------
2254 #-------------------------------------------------------------------------
2255
2255
2256 def init_alias(self):
2256 def init_alias(self):
2257 self.alias_manager = AliasManager(shell=self, config=self.config)
2257 self.alias_manager = AliasManager(shell=self, config=self.config)
2258 self.configurables.append(self.alias_manager)
2258 self.configurables.append(self.alias_manager)
2259 self.ns_table['alias'] = self.alias_manager.alias_table,
2259 self.ns_table['alias'] = self.alias_manager.alias_table,
2260
2260
2261 #-------------------------------------------------------------------------
2261 #-------------------------------------------------------------------------
2262 # Things related to extensions and plugins
2262 # Things related to extensions and plugins
2263 #-------------------------------------------------------------------------
2263 #-------------------------------------------------------------------------
2264
2264
2265 def init_extension_manager(self):
2265 def init_extension_manager(self):
2266 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2266 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2267 self.configurables.append(self.extension_manager)
2267 self.configurables.append(self.extension_manager)
2268
2268
2269 def init_plugin_manager(self):
2269 def init_plugin_manager(self):
2270 self.plugin_manager = PluginManager(config=self.config)
2270 self.plugin_manager = PluginManager(config=self.config)
2271 self.configurables.append(self.plugin_manager)
2271 self.configurables.append(self.plugin_manager)
2272
2272
2273
2273
2274 #-------------------------------------------------------------------------
2274 #-------------------------------------------------------------------------
2275 # Things related to payloads
2275 # Things related to payloads
2276 #-------------------------------------------------------------------------
2276 #-------------------------------------------------------------------------
2277
2277
2278 def init_payload(self):
2278 def init_payload(self):
2279 self.payload_manager = PayloadManager(config=self.config)
2279 self.payload_manager = PayloadManager(config=self.config)
2280 self.configurables.append(self.payload_manager)
2280 self.configurables.append(self.payload_manager)
2281
2281
2282 #-------------------------------------------------------------------------
2282 #-------------------------------------------------------------------------
2283 # Things related to the prefilter
2283 # Things related to the prefilter
2284 #-------------------------------------------------------------------------
2284 #-------------------------------------------------------------------------
2285
2285
2286 def init_prefilter(self):
2286 def init_prefilter(self):
2287 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2287 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2288 self.configurables.append(self.prefilter_manager)
2288 self.configurables.append(self.prefilter_manager)
2289 # Ultimately this will be refactored in the new interpreter code, but
2289 # Ultimately this will be refactored in the new interpreter code, but
2290 # for now, we should expose the main prefilter method (there's legacy
2290 # for now, we should expose the main prefilter method (there's legacy
2291 # code out there that may rely on this).
2291 # code out there that may rely on this).
2292 self.prefilter = self.prefilter_manager.prefilter_lines
2292 self.prefilter = self.prefilter_manager.prefilter_lines
2293
2293
2294 def auto_rewrite_input(self, cmd):
2294 def auto_rewrite_input(self, cmd):
2295 """Print to the screen the rewritten form of the user's command.
2295 """Print to the screen the rewritten form of the user's command.
2296
2296
2297 This shows visual feedback by rewriting input lines that cause
2297 This shows visual feedback by rewriting input lines that cause
2298 automatic calling to kick in, like::
2298 automatic calling to kick in, like::
2299
2299
2300 /f x
2300 /f x
2301
2301
2302 into::
2302 into::
2303
2303
2304 ------> f(x)
2304 ------> f(x)
2305
2305
2306 after the user's input prompt. This helps the user understand that the
2306 after the user's input prompt. This helps the user understand that the
2307 input line was transformed automatically by IPython.
2307 input line was transformed automatically by IPython.
2308 """
2308 """
2309 if not self.show_rewritten_input:
2309 if not self.show_rewritten_input:
2310 return
2310 return
2311
2311
2312 rw = self.prompt_manager.render('rewrite') + cmd
2312 rw = self.prompt_manager.render('rewrite') + cmd
2313
2313
2314 try:
2314 try:
2315 # plain ascii works better w/ pyreadline, on some machines, so
2315 # plain ascii works better w/ pyreadline, on some machines, so
2316 # we use it and only print uncolored rewrite if we have unicode
2316 # we use it and only print uncolored rewrite if we have unicode
2317 rw = str(rw)
2317 rw = str(rw)
2318 print >> io.stdout, rw
2318 print >> io.stdout, rw
2319 except UnicodeEncodeError:
2319 except UnicodeEncodeError:
2320 print "------> " + cmd
2320 print "------> " + cmd
2321
2321
2322 #-------------------------------------------------------------------------
2322 #-------------------------------------------------------------------------
2323 # Things related to extracting values/expressions from kernel and user_ns
2323 # Things related to extracting values/expressions from kernel and user_ns
2324 #-------------------------------------------------------------------------
2324 #-------------------------------------------------------------------------
2325
2325
2326 def _simple_error(self):
2326 def _simple_error(self):
2327 etype, value = sys.exc_info()[:2]
2327 etype, value = sys.exc_info()[:2]
2328 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2328 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2329
2329
2330 def user_variables(self, names):
2330 def user_variables(self, names):
2331 """Get a list of variable names from the user's namespace.
2331 """Get a list of variable names from the user's namespace.
2332
2332
2333 Parameters
2333 Parameters
2334 ----------
2334 ----------
2335 names : list of strings
2335 names : list of strings
2336 A list of names of variables to be read from the user namespace.
2336 A list of names of variables to be read from the user namespace.
2337
2337
2338 Returns
2338 Returns
2339 -------
2339 -------
2340 A dict, keyed by the input names and with the repr() of each value.
2340 A dict, keyed by the input names and with the repr() of each value.
2341 """
2341 """
2342 out = {}
2342 out = {}
2343 user_ns = self.user_ns
2343 user_ns = self.user_ns
2344 for varname in names:
2344 for varname in names:
2345 try:
2345 try:
2346 value = repr(user_ns[varname])
2346 value = repr(user_ns[varname])
2347 except:
2347 except:
2348 value = self._simple_error()
2348 value = self._simple_error()
2349 out[varname] = value
2349 out[varname] = value
2350 return out
2350 return out
2351
2351
2352 def user_expressions(self, expressions):
2352 def user_expressions(self, expressions):
2353 """Evaluate a dict of expressions in the user's namespace.
2353 """Evaluate a dict of expressions in the user's namespace.
2354
2354
2355 Parameters
2355 Parameters
2356 ----------
2356 ----------
2357 expressions : dict
2357 expressions : dict
2358 A dict with string keys and string values. The expression values
2358 A dict with string keys and string values. The expression values
2359 should be valid Python expressions, each of which will be evaluated
2359 should be valid Python expressions, each of which will be evaluated
2360 in the user namespace.
2360 in the user namespace.
2361
2361
2362 Returns
2362 Returns
2363 -------
2363 -------
2364 A dict, keyed like the input expressions dict, with the repr() of each
2364 A dict, keyed like the input expressions dict, with the repr() of each
2365 value.
2365 value.
2366 """
2366 """
2367 out = {}
2367 out = {}
2368 user_ns = self.user_ns
2368 user_ns = self.user_ns
2369 global_ns = self.user_global_ns
2369 global_ns = self.user_global_ns
2370 for key, expr in expressions.iteritems():
2370 for key, expr in expressions.iteritems():
2371 try:
2371 try:
2372 value = repr(eval(expr, global_ns, user_ns))
2372 value = repr(eval(expr, global_ns, user_ns))
2373 except:
2373 except:
2374 value = self._simple_error()
2374 value = self._simple_error()
2375 out[key] = value
2375 out[key] = value
2376 return out
2376 return out
2377
2377
2378 #-------------------------------------------------------------------------
2378 #-------------------------------------------------------------------------
2379 # Things related to the running of code
2379 # Things related to the running of code
2380 #-------------------------------------------------------------------------
2380 #-------------------------------------------------------------------------
2381
2381
2382 def ex(self, cmd):
2382 def ex(self, cmd):
2383 """Execute a normal python statement in user namespace."""
2383 """Execute a normal python statement in user namespace."""
2384 with self.builtin_trap:
2384 with self.builtin_trap:
2385 exec cmd in self.user_global_ns, self.user_ns
2385 exec cmd in self.user_global_ns, self.user_ns
2386
2386
2387 def ev(self, expr):
2387 def ev(self, expr):
2388 """Evaluate python expression expr in user namespace.
2388 """Evaluate python expression expr in user namespace.
2389
2389
2390 Returns the result of evaluation
2390 Returns the result of evaluation
2391 """
2391 """
2392 with self.builtin_trap:
2392 with self.builtin_trap:
2393 return eval(expr, self.user_global_ns, self.user_ns)
2393 return eval(expr, self.user_global_ns, self.user_ns)
2394
2394
2395 def safe_execfile(self, fname, *where, **kw):
2395 def safe_execfile(self, fname, *where, **kw):
2396 """A safe version of the builtin execfile().
2396 """A safe version of the builtin execfile().
2397
2397
2398 This version will never throw an exception, but instead print
2398 This version will never throw an exception, but instead print
2399 helpful error messages to the screen. This only works on pure
2399 helpful error messages to the screen. This only works on pure
2400 Python files with the .py extension.
2400 Python files with the .py extension.
2401
2401
2402 Parameters
2402 Parameters
2403 ----------
2403 ----------
2404 fname : string
2404 fname : string
2405 The name of the file to be executed.
2405 The name of the file to be executed.
2406 where : tuple
2406 where : tuple
2407 One or two namespaces, passed to execfile() as (globals,locals).
2407 One or two namespaces, passed to execfile() as (globals,locals).
2408 If only one is given, it is passed as both.
2408 If only one is given, it is passed as both.
2409 exit_ignore : bool (False)
2409 exit_ignore : bool (False)
2410 If True, then silence SystemExit for non-zero status (it is always
2410 If True, then silence SystemExit for non-zero status (it is always
2411 silenced for zero status, as it is so common).
2411 silenced for zero status, as it is so common).
2412 raise_exceptions : bool (False)
2412 raise_exceptions : bool (False)
2413 If True raise exceptions everywhere. Meant for testing.
2413 If True raise exceptions everywhere. Meant for testing.
2414
2414
2415 """
2415 """
2416 kw.setdefault('exit_ignore', False)
2416 kw.setdefault('exit_ignore', False)
2417 kw.setdefault('raise_exceptions', False)
2417 kw.setdefault('raise_exceptions', False)
2418
2418
2419 fname = os.path.abspath(os.path.expanduser(fname))
2419 fname = os.path.abspath(os.path.expanduser(fname))
2420
2420
2421 # Make sure we can open the file
2421 # Make sure we can open the file
2422 try:
2422 try:
2423 with open(fname) as thefile:
2423 with open(fname) as thefile:
2424 pass
2424 pass
2425 except:
2425 except:
2426 warn('Could not open file <%s> for safe execution.' % fname)
2426 warn('Could not open file <%s> for safe execution.' % fname)
2427 return
2427 return
2428
2428
2429 # Find things also in current directory. This is needed to mimic the
2429 # Find things also in current directory. This is needed to mimic the
2430 # behavior of running a script from the system command line, where
2430 # behavior of running a script from the system command line, where
2431 # Python inserts the script's directory into sys.path
2431 # Python inserts the script's directory into sys.path
2432 dname = os.path.dirname(fname)
2432 dname = os.path.dirname(fname)
2433
2433
2434 with prepended_to_syspath(dname):
2434 with prepended_to_syspath(dname):
2435 try:
2435 try:
2436 py3compat.execfile(fname,*where)
2436 py3compat.execfile(fname,*where)
2437 except SystemExit, status:
2437 except SystemExit, status:
2438 # If the call was made with 0 or None exit status (sys.exit(0)
2438 # If the call was made with 0 or None exit status (sys.exit(0)
2439 # or sys.exit() ), don't bother showing a traceback, as both of
2439 # or sys.exit() ), don't bother showing a traceback, as both of
2440 # these are considered normal by the OS:
2440 # these are considered normal by the OS:
2441 # > python -c'import sys;sys.exit(0)'; echo $?
2441 # > python -c'import sys;sys.exit(0)'; echo $?
2442 # 0
2442 # 0
2443 # > python -c'import sys;sys.exit()'; echo $?
2443 # > python -c'import sys;sys.exit()'; echo $?
2444 # 0
2444 # 0
2445 # For other exit status, we show the exception unless
2445 # For other exit status, we show the exception unless
2446 # explicitly silenced, but only in short form.
2446 # explicitly silenced, but only in short form.
2447 if kw['raise_exceptions']:
2447 if kw['raise_exceptions']:
2448 raise
2448 raise
2449 if status.code not in (0, None) and not kw['exit_ignore']:
2449 if status.code not in (0, None) and not kw['exit_ignore']:
2450 self.showtraceback(exception_only=True)
2450 self.showtraceback(exception_only=True)
2451 except:
2451 except:
2452 if kw['raise_exceptions']:
2452 if kw['raise_exceptions']:
2453 raise
2453 raise
2454 self.showtraceback()
2454 self.showtraceback()
2455
2455
2456 def safe_execfile_ipy(self, fname):
2456 def safe_execfile_ipy(self, fname):
2457 """Like safe_execfile, but for .ipy files with IPython syntax.
2457 """Like safe_execfile, but for .ipy files with IPython syntax.
2458
2458
2459 Parameters
2459 Parameters
2460 ----------
2460 ----------
2461 fname : str
2461 fname : str
2462 The name of the file to execute. The filename must have a
2462 The name of the file to execute. The filename must have a
2463 .ipy extension.
2463 .ipy extension.
2464 """
2464 """
2465 fname = os.path.abspath(os.path.expanduser(fname))
2465 fname = os.path.abspath(os.path.expanduser(fname))
2466
2466
2467 # Make sure we can open the file
2467 # Make sure we can open the file
2468 try:
2468 try:
2469 with open(fname) as thefile:
2469 with open(fname) as thefile:
2470 pass
2470 pass
2471 except:
2471 except:
2472 warn('Could not open file <%s> for safe execution.' % fname)
2472 warn('Could not open file <%s> for safe execution.' % fname)
2473 return
2473 return
2474
2474
2475 # Find things also in current directory. This is needed to mimic the
2475 # Find things also in current directory. This is needed to mimic the
2476 # behavior of running a script from the system command line, where
2476 # behavior of running a script from the system command line, where
2477 # Python inserts the script's directory into sys.path
2477 # Python inserts the script's directory into sys.path
2478 dname = os.path.dirname(fname)
2478 dname = os.path.dirname(fname)
2479
2479
2480 with prepended_to_syspath(dname):
2480 with prepended_to_syspath(dname):
2481 try:
2481 try:
2482 with open(fname) as thefile:
2482 with open(fname) as thefile:
2483 # self.run_cell currently captures all exceptions
2483 # self.run_cell currently captures all exceptions
2484 # raised in user code. It would be nice if there were
2484 # raised in user code. It would be nice if there were
2485 # versions of runlines, execfile that did raise, so
2485 # versions of runlines, execfile that did raise, so
2486 # we could catch the errors.
2486 # we could catch the errors.
2487 self.run_cell(thefile.read(), store_history=False)
2487 self.run_cell(thefile.read(), store_history=False)
2488 except:
2488 except:
2489 self.showtraceback()
2489 self.showtraceback()
2490 warn('Unknown failure executing file: <%s>' % fname)
2490 warn('Unknown failure executing file: <%s>' % fname)
2491
2491
2492 def safe_run_module(self, mod_name, where):
2492 def safe_run_module(self, mod_name, where):
2493 """A safe version of runpy.run_module().
2493 """A safe version of runpy.run_module().
2494
2494
2495 This version will never throw an exception, but instead print
2495 This version will never throw an exception, but instead print
2496 helpful error messages to the screen.
2496 helpful error messages to the screen.
2497
2497
2498 Parameters
2498 Parameters
2499 ----------
2499 ----------
2500 mod_name : string
2500 mod_name : string
2501 The name of the module to be executed.
2501 The name of the module to be executed.
2502 where : dict
2502 where : dict
2503 The globals namespace.
2503 The globals namespace.
2504 """
2504 """
2505 try:
2505 try:
2506 where.update(
2506 where.update(
2507 runpy.run_module(str(mod_name), run_name="__main__",
2507 runpy.run_module(str(mod_name), run_name="__main__",
2508 alter_sys=True)
2508 alter_sys=True)
2509 )
2509 )
2510 except:
2510 except:
2511 self.showtraceback()
2511 self.showtraceback()
2512 warn('Unknown failure executing module: <%s>' % mod_name)
2512 warn('Unknown failure executing module: <%s>' % mod_name)
2513
2513
2514 def _run_cached_cell_magic(self, magic_name, line):
2514 def _run_cached_cell_magic(self, magic_name, line):
2515 """Special method to call a cell magic with the data stored in self.
2515 """Special method to call a cell magic with the data stored in self.
2516 """
2516 """
2517 cell = self._current_cell_magic_body
2517 cell = self._current_cell_magic_body
2518 self._current_cell_magic_body = None
2518 self._current_cell_magic_body = None
2519 return self.run_cell_magic(magic_name, line, cell)
2519 return self.run_cell_magic(magic_name, line, cell)
2520
2520
2521 def run_cell(self, raw_cell, store_history=False, silent=False):
2521 def run_cell(self, raw_cell, store_history=False, silent=False):
2522 """Run a complete IPython cell.
2522 """Run a complete IPython cell.
2523
2523
2524 Parameters
2524 Parameters
2525 ----------
2525 ----------
2526 raw_cell : str
2526 raw_cell : str
2527 The code (including IPython code such as %magic functions) to run.
2527 The code (including IPython code such as %magic functions) to run.
2528 store_history : bool
2528 store_history : bool
2529 If True, the raw and translated cell will be stored in IPython's
2529 If True, the raw and translated cell will be stored in IPython's
2530 history. For user code calling back into IPython's machinery, this
2530 history. For user code calling back into IPython's machinery, this
2531 should be set to False.
2531 should be set to False.
2532 silent : bool
2532 silent : bool
2533 If True, avoid side-effets, such as implicit displayhooks, history,
2533 If True, avoid side-effets, such as implicit displayhooks, history,
2534 and logging. silent=True forces store_history=False.
2534 and logging. silent=True forces store_history=False.
2535 """
2535 """
2536 if (not raw_cell) or raw_cell.isspace():
2536 if (not raw_cell) or raw_cell.isspace():
2537 return
2537 return
2538
2538
2539 if silent:
2539 if silent:
2540 store_history = False
2540 store_history = False
2541
2541
2542 self.input_splitter.push(raw_cell)
2542 self.input_splitter.push(raw_cell)
2543
2543
2544 # Check for cell magics, which leave state behind. This interface is
2544 # Check for cell magics, which leave state behind. This interface is
2545 # ugly, we need to do something cleaner later... Now the logic is
2545 # ugly, we need to do something cleaner later... Now the logic is
2546 # simply that the input_splitter remembers if there was a cell magic,
2546 # simply that the input_splitter remembers if there was a cell magic,
2547 # and in that case we grab the cell body.
2547 # and in that case we grab the cell body.
2548 if self.input_splitter.cell_magic_parts:
2548 if self.input_splitter.cell_magic_parts:
2549 self._current_cell_magic_body = \
2549 self._current_cell_magic_body = \
2550 ''.join(self.input_splitter.cell_magic_parts)
2550 ''.join(self.input_splitter.cell_magic_parts)
2551 cell = self.input_splitter.source_reset()
2551 cell = self.input_splitter.source_reset()
2552
2552
2553 with self.builtin_trap:
2553 with self.builtin_trap:
2554 prefilter_failed = False
2554 prefilter_failed = False
2555 if len(cell.splitlines()) == 1:
2555 if len(cell.splitlines()) == 1:
2556 try:
2556 try:
2557 # use prefilter_lines to handle trailing newlines
2557 # use prefilter_lines to handle trailing newlines
2558 # restore trailing newline for ast.parse
2558 # restore trailing newline for ast.parse
2559 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2559 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2560 except AliasError as e:
2560 except AliasError as e:
2561 error(e)
2561 error(e)
2562 prefilter_failed = True
2562 prefilter_failed = True
2563 except Exception:
2563 except Exception:
2564 # don't allow prefilter errors to crash IPython
2564 # don't allow prefilter errors to crash IPython
2565 self.showtraceback()
2565 self.showtraceback()
2566 prefilter_failed = True
2566 prefilter_failed = True
2567
2567
2568 # Store raw and processed history
2568 # Store raw and processed history
2569 if store_history:
2569 if store_history:
2570 self.history_manager.store_inputs(self.execution_count,
2570 self.history_manager.store_inputs(self.execution_count,
2571 cell, raw_cell)
2571 cell, raw_cell)
2572 if not silent:
2572 if not silent:
2573 self.logger.log(cell, raw_cell)
2573 self.logger.log(cell, raw_cell)
2574
2574
2575 if not prefilter_failed:
2575 if not prefilter_failed:
2576 # don't run if prefilter failed
2576 # don't run if prefilter failed
2577 cell_name = self.compile.cache(cell, self.execution_count)
2577 cell_name = self.compile.cache(cell, self.execution_count)
2578
2578
2579 with self.display_trap:
2579 with self.display_trap:
2580 try:
2580 try:
2581 code_ast = self.compile.ast_parse(cell,
2581 code_ast = self.compile.ast_parse(cell,
2582 filename=cell_name)
2582 filename=cell_name)
2583 except IndentationError:
2583 except IndentationError:
2584 self.showindentationerror()
2584 self.showindentationerror()
2585 if store_history:
2585 if store_history:
2586 self.execution_count += 1
2586 self.execution_count += 1
2587 return None
2587 return None
2588 except (OverflowError, SyntaxError, ValueError, TypeError,
2588 except (OverflowError, SyntaxError, ValueError, TypeError,
2589 MemoryError):
2589 MemoryError):
2590 self.showsyntaxerror()
2590 self.showsyntaxerror()
2591 if store_history:
2591 if store_history:
2592 self.execution_count += 1
2592 self.execution_count += 1
2593 return None
2593 return None
2594
2594
2595 interactivity = "none" if silent else self.ast_node_interactivity
2595 interactivity = "none" if silent else self.ast_node_interactivity
2596 self.run_ast_nodes(code_ast.body, cell_name,
2596 self.run_ast_nodes(code_ast.body, cell_name,
2597 interactivity=interactivity)
2597 interactivity=interactivity)
2598
2598
2599 # Execute any registered post-execution functions.
2599 # Execute any registered post-execution functions.
2600 # unless we are silent
2600 # unless we are silent
2601 post_exec = [] if silent else self._post_execute.iteritems()
2601 post_exec = [] if silent else self._post_execute.iteritems()
2602
2602
2603 for func, status in post_exec:
2603 for func, status in post_exec:
2604 if self.disable_failing_post_execute and not status:
2604 if self.disable_failing_post_execute and not status:
2605 continue
2605 continue
2606 try:
2606 try:
2607 func()
2607 func()
2608 except KeyboardInterrupt:
2608 except KeyboardInterrupt:
2609 print >> io.stderr, "\nKeyboardInterrupt"
2609 print >> io.stderr, "\nKeyboardInterrupt"
2610 except Exception:
2610 except Exception:
2611 # register as failing:
2611 # register as failing:
2612 self._post_execute[func] = False
2612 self._post_execute[func] = False
2613 self.showtraceback()
2613 self.showtraceback()
2614 print >> io.stderr, '\n'.join([
2614 print >> io.stderr, '\n'.join([
2615 "post-execution function %r produced an error." % func,
2615 "post-execution function %r produced an error." % func,
2616 "If this problem persists, you can disable failing post-exec functions with:",
2616 "If this problem persists, you can disable failing post-exec functions with:",
2617 "",
2617 "",
2618 " get_ipython().disable_failing_post_execute = True"
2618 " get_ipython().disable_failing_post_execute = True"
2619 ])
2619 ])
2620
2620
2621 if store_history:
2621 if store_history:
2622 # Write output to the database. Does nothing unless
2622 # Write output to the database. Does nothing unless
2623 # history output logging is enabled.
2623 # history output logging is enabled.
2624 self.history_manager.store_output(self.execution_count)
2624 self.history_manager.store_output(self.execution_count)
2625 # Each cell is a *single* input, regardless of how many lines it has
2625 # Each cell is a *single* input, regardless of how many lines it has
2626 self.execution_count += 1
2626 self.execution_count += 1
2627
2627
2628 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2628 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2629 """Run a sequence of AST nodes. The execution mode depends on the
2629 """Run a sequence of AST nodes. The execution mode depends on the
2630 interactivity parameter.
2630 interactivity parameter.
2631
2631
2632 Parameters
2632 Parameters
2633 ----------
2633 ----------
2634 nodelist : list
2634 nodelist : list
2635 A sequence of AST nodes to run.
2635 A sequence of AST nodes to run.
2636 cell_name : str
2636 cell_name : str
2637 Will be passed to the compiler as the filename of the cell. Typically
2637 Will be passed to the compiler as the filename of the cell. Typically
2638 the value returned by ip.compile.cache(cell).
2638 the value returned by ip.compile.cache(cell).
2639 interactivity : str
2639 interactivity : str
2640 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2640 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2641 run interactively (displaying output from expressions). 'last_expr'
2641 run interactively (displaying output from expressions). 'last_expr'
2642 will run the last node interactively only if it is an expression (i.e.
2642 will run the last node interactively only if it is an expression (i.e.
2643 expressions in loops or other blocks are not displayed. Other values
2643 expressions in loops or other blocks are not displayed. Other values
2644 for this parameter will raise a ValueError.
2644 for this parameter will raise a ValueError.
2645 """
2645 """
2646 if not nodelist:
2646 if not nodelist:
2647 return
2647 return
2648
2648
2649 if interactivity == 'last_expr':
2649 if interactivity == 'last_expr':
2650 if isinstance(nodelist[-1], ast.Expr):
2650 if isinstance(nodelist[-1], ast.Expr):
2651 interactivity = "last"
2651 interactivity = "last"
2652 else:
2652 else:
2653 interactivity = "none"
2653 interactivity = "none"
2654
2654
2655 if interactivity == 'none':
2655 if interactivity == 'none':
2656 to_run_exec, to_run_interactive = nodelist, []
2656 to_run_exec, to_run_interactive = nodelist, []
2657 elif interactivity == 'last':
2657 elif interactivity == 'last':
2658 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2658 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2659 elif interactivity == 'all':
2659 elif interactivity == 'all':
2660 to_run_exec, to_run_interactive = [], nodelist
2660 to_run_exec, to_run_interactive = [], nodelist
2661 else:
2661 else:
2662 raise ValueError("Interactivity was %r" % interactivity)
2662 raise ValueError("Interactivity was %r" % interactivity)
2663
2663
2664 exec_count = self.execution_count
2664 exec_count = self.execution_count
2665
2665
2666 try:
2666 try:
2667 for i, node in enumerate(to_run_exec):
2667 for i, node in enumerate(to_run_exec):
2668 mod = ast.Module([node])
2668 mod = ast.Module([node])
2669 code = self.compile(mod, cell_name, "exec")
2669 code = self.compile(mod, cell_name, "exec")
2670 if self.run_code(code):
2670 if self.run_code(code):
2671 return True
2671 return True
2672
2672
2673 for i, node in enumerate(to_run_interactive):
2673 for i, node in enumerate(to_run_interactive):
2674 mod = ast.Interactive([node])
2674 mod = ast.Interactive([node])
2675 code = self.compile(mod, cell_name, "single")
2675 code = self.compile(mod, cell_name, "single")
2676 if self.run_code(code):
2676 if self.run_code(code):
2677 return True
2677 return True
2678
2678
2679 # Flush softspace
2679 # Flush softspace
2680 if softspace(sys.stdout, 0):
2680 if softspace(sys.stdout, 0):
2681 print
2681 print
2682
2682
2683 except:
2683 except:
2684 # It's possible to have exceptions raised here, typically by
2684 # It's possible to have exceptions raised here, typically by
2685 # compilation of odd code (such as a naked 'return' outside a
2685 # compilation of odd code (such as a naked 'return' outside a
2686 # function) that did parse but isn't valid. Typically the exception
2686 # function) that did parse but isn't valid. Typically the exception
2687 # is a SyntaxError, but it's safest just to catch anything and show
2687 # is a SyntaxError, but it's safest just to catch anything and show
2688 # the user a traceback.
2688 # the user a traceback.
2689
2689
2690 # We do only one try/except outside the loop to minimize the impact
2690 # We do only one try/except outside the loop to minimize the impact
2691 # on runtime, and also because if any node in the node list is
2691 # on runtime, and also because if any node in the node list is
2692 # broken, we should stop execution completely.
2692 # broken, we should stop execution completely.
2693 self.showtraceback()
2693 self.showtraceback()
2694
2694
2695 return False
2695 return False
2696
2696
2697 def run_code(self, code_obj):
2697 def run_code(self, code_obj):
2698 """Execute a code object.
2698 """Execute a code object.
2699
2699
2700 When an exception occurs, self.showtraceback() is called to display a
2700 When an exception occurs, self.showtraceback() is called to display a
2701 traceback.
2701 traceback.
2702
2702
2703 Parameters
2703 Parameters
2704 ----------
2704 ----------
2705 code_obj : code object
2705 code_obj : code object
2706 A compiled code object, to be executed
2706 A compiled code object, to be executed
2707
2707
2708 Returns
2708 Returns
2709 -------
2709 -------
2710 False : successful execution.
2710 False : successful execution.
2711 True : an error occurred.
2711 True : an error occurred.
2712 """
2712 """
2713
2713
2714 # Set our own excepthook in case the user code tries to call it
2714 # Set our own excepthook in case the user code tries to call it
2715 # directly, so that the IPython crash handler doesn't get triggered
2715 # directly, so that the IPython crash handler doesn't get triggered
2716 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2716 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2717
2717
2718 # we save the original sys.excepthook in the instance, in case config
2718 # we save the original sys.excepthook in the instance, in case config
2719 # code (such as magics) needs access to it.
2719 # code (such as magics) needs access to it.
2720 self.sys_excepthook = old_excepthook
2720 self.sys_excepthook = old_excepthook
2721 outflag = 1 # happens in more places, so it's easier as default
2721 outflag = 1 # happens in more places, so it's easier as default
2722 try:
2722 try:
2723 try:
2723 try:
2724 self.hooks.pre_run_code_hook()
2724 self.hooks.pre_run_code_hook()
2725 #rprint('Running code', repr(code_obj)) # dbg
2725 #rprint('Running code', repr(code_obj)) # dbg
2726 exec code_obj in self.user_global_ns, self.user_ns
2726 exec code_obj in self.user_global_ns, self.user_ns
2727 finally:
2727 finally:
2728 # Reset our crash handler in place
2728 # Reset our crash handler in place
2729 sys.excepthook = old_excepthook
2729 sys.excepthook = old_excepthook
2730 except SystemExit:
2730 except SystemExit:
2731 self.showtraceback(exception_only=True)
2731 self.showtraceback(exception_only=True)
2732 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2732 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2733 except self.custom_exceptions:
2733 except self.custom_exceptions:
2734 etype,value,tb = sys.exc_info()
2734 etype,value,tb = sys.exc_info()
2735 self.CustomTB(etype,value,tb)
2735 self.CustomTB(etype,value,tb)
2736 except:
2736 except:
2737 self.showtraceback()
2737 self.showtraceback()
2738 else:
2738 else:
2739 outflag = 0
2739 outflag = 0
2740 return outflag
2740 return outflag
2741
2741
2742 # For backwards compatibility
2742 # For backwards compatibility
2743 runcode = run_code
2743 runcode = run_code
2744
2744
2745 #-------------------------------------------------------------------------
2745 #-------------------------------------------------------------------------
2746 # Things related to GUI support and pylab
2746 # Things related to GUI support and pylab
2747 #-------------------------------------------------------------------------
2747 #-------------------------------------------------------------------------
2748
2748
2749 def enable_gui(self, gui=None):
2749 def enable_gui(self, gui=None):
2750 raise NotImplementedError('Implement enable_gui in a subclass')
2750 raise NotImplementedError('Implement enable_gui in a subclass')
2751
2751
2752 def enable_pylab(self, gui=None, import_all=True):
2752 def enable_pylab(self, gui=None, import_all=True):
2753 """Activate pylab support at runtime.
2753 """Activate pylab support at runtime.
2754
2754
2755 This turns on support for matplotlib, preloads into the interactive
2755 This turns on support for matplotlib, preloads into the interactive
2756 namespace all of numpy and pylab, and configures IPython to correctly
2756 namespace all of numpy and pylab, and configures IPython to correctly
2757 interact with the GUI event loop. The GUI backend to be used can be
2757 interact with the GUI event loop. The GUI backend to be used can be
2758 optionally selected with the optional :param:`gui` argument.
2758 optionally selected with the optional :param:`gui` argument.
2759
2759
2760 Parameters
2760 Parameters
2761 ----------
2761 ----------
2762 gui : optional, string
2762 gui : optional, string
2763
2763
2764 If given, dictates the choice of matplotlib GUI backend to use
2764 If given, dictates the choice of matplotlib GUI backend to use
2765 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2765 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2766 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2766 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2767 matplotlib (as dictated by the matplotlib build-time options plus the
2767 matplotlib (as dictated by the matplotlib build-time options plus the
2768 user's matplotlibrc configuration file). Note that not all backends
2768 user's matplotlibrc configuration file). Note that not all backends
2769 make sense in all contexts, for example a terminal ipython can't
2769 make sense in all contexts, for example a terminal ipython can't
2770 display figures inline.
2770 display figures inline.
2771 """
2771 """
2772 from IPython.core.pylabtools import mpl_runner
2772 from IPython.core.pylabtools import mpl_runner
2773 # We want to prevent the loading of pylab to pollute the user's
2773 # We want to prevent the loading of pylab to pollute the user's
2774 # namespace as shown by the %who* magics, so we execute the activation
2774 # namespace as shown by the %who* magics, so we execute the activation
2775 # code in an empty namespace, and we update *both* user_ns and
2775 # code in an empty namespace, and we update *both* user_ns and
2776 # user_ns_hidden with this information.
2776 # user_ns_hidden with this information.
2777 ns = {}
2777 ns = {}
2778 try:
2778 try:
2779 gui = pylab_activate(ns, gui, import_all, self)
2779 gui = pylab_activate(ns, gui, import_all, self)
2780 except KeyError:
2780 except KeyError:
2781 error("Backend %r not supported" % gui)
2781 error("Backend %r not supported" % gui)
2782 return
2782 return
2783 self.user_ns.update(ns)
2783 self.user_ns.update(ns)
2784 self.user_ns_hidden.update(ns)
2784 self.user_ns_hidden.update(ns)
2785 # Now we must activate the gui pylab wants to use, and fix %run to take
2785 # Now we must activate the gui pylab wants to use, and fix %run to take
2786 # plot updates into account
2786 # plot updates into account
2787 self.enable_gui(gui)
2787 self.enable_gui(gui)
2788 self.magics_manager.registry['ExecutionMagics'].default_runner = \
2788 self.magics_manager.registry['ExecutionMagics'].default_runner = \
2789 mpl_runner(self.safe_execfile)
2789 mpl_runner(self.safe_execfile)
2790
2790
2791 #-------------------------------------------------------------------------
2791 #-------------------------------------------------------------------------
2792 # Utilities
2792 # Utilities
2793 #-------------------------------------------------------------------------
2793 #-------------------------------------------------------------------------
2794
2794
2795 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2795 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2796 """Expand python variables in a string.
2796 """Expand python variables in a string.
2797
2797
2798 The depth argument indicates how many frames above the caller should
2798 The depth argument indicates how many frames above the caller should
2799 be walked to look for the local namespace where to expand variables.
2799 be walked to look for the local namespace where to expand variables.
2800
2800
2801 The global namespace for expansion is always the user's interactive
2801 The global namespace for expansion is always the user's interactive
2802 namespace.
2802 namespace.
2803 """
2803 """
2804 ns = self.user_ns.copy()
2804 ns = self.user_ns.copy()
2805 ns.update(sys._getframe(depth+1).f_locals)
2805 ns.update(sys._getframe(depth+1).f_locals)
2806 ns.pop('self', None)
2806 ns.pop('self', None)
2807 try:
2807 try:
2808 cmd = formatter.format(cmd, **ns)
2808 cmd = formatter.format(cmd, **ns)
2809 except Exception:
2809 except Exception:
2810 # if formatter couldn't format, just let it go untransformed
2810 # if formatter couldn't format, just let it go untransformed
2811 pass
2811 pass
2812 return cmd
2812 return cmd
2813
2813
2814 def mktempfile(self, data=None, prefix='ipython_edit_'):
2814 def mktempfile(self, data=None, prefix='ipython_edit_'):
2815 """Make a new tempfile and return its filename.
2815 """Make a new tempfile and return its filename.
2816
2816
2817 This makes a call to tempfile.mktemp, but it registers the created
2817 This makes a call to tempfile.mktemp, but it registers the created
2818 filename internally so ipython cleans it up at exit time.
2818 filename internally so ipython cleans it up at exit time.
2819
2819
2820 Optional inputs:
2820 Optional inputs:
2821
2821
2822 - data(None): if data is given, it gets written out to the temp file
2822 - data(None): if data is given, it gets written out to the temp file
2823 immediately, and the file is closed again."""
2823 immediately, and the file is closed again."""
2824
2824
2825 filename = tempfile.mktemp('.py', prefix)
2825 filename = tempfile.mktemp('.py', prefix)
2826 self.tempfiles.append(filename)
2826 self.tempfiles.append(filename)
2827
2827
2828 if data:
2828 if data:
2829 tmp_file = open(filename,'w')
2829 tmp_file = open(filename,'w')
2830 tmp_file.write(data)
2830 tmp_file.write(data)
2831 tmp_file.close()
2831 tmp_file.close()
2832 return filename
2832 return filename
2833
2833
2834 # TODO: This should be removed when Term is refactored.
2834 # TODO: This should be removed when Term is refactored.
2835 def write(self,data):
2835 def write(self,data):
2836 """Write a string to the default output"""
2836 """Write a string to the default output"""
2837 io.stdout.write(data)
2837 io.stdout.write(data)
2838
2838
2839 # TODO: This should be removed when Term is refactored.
2839 # TODO: This should be removed when Term is refactored.
2840 def write_err(self,data):
2840 def write_err(self,data):
2841 """Write a string to the default error output"""
2841 """Write a string to the default error output"""
2842 io.stderr.write(data)
2842 io.stderr.write(data)
2843
2843
2844 def ask_yes_no(self, prompt, default=None):
2844 def ask_yes_no(self, prompt, default=None):
2845 if self.quiet:
2845 if self.quiet:
2846 return True
2846 return True
2847 return ask_yes_no(prompt,default)
2847 return ask_yes_no(prompt,default)
2848
2848
2849 def show_usage(self):
2849 def show_usage(self):
2850 """Show a usage message"""
2850 """Show a usage message"""
2851 page.page(IPython.core.usage.interactive_usage)
2851 page.page(IPython.core.usage.interactive_usage)
2852
2852
2853 def extract_input_lines(self, range_str, raw=False):
2853 def extract_input_lines(self, range_str, raw=False):
2854 """Return as a string a set of input history slices.
2854 """Return as a string a set of input history slices.
2855
2855
2856 Parameters
2856 Parameters
2857 ----------
2857 ----------
2858 range_str : string
2858 range_str : string
2859 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
2859 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
2860 since this function is for use by magic functions which get their
2860 since this function is for use by magic functions which get their
2861 arguments as strings. The number before the / is the session
2861 arguments as strings. The number before the / is the session
2862 number: ~n goes n back from the current session.
2862 number: ~n goes n back from the current session.
2863
2863
2864 Optional Parameters:
2864 Optional Parameters:
2865 - raw(False): by default, the processed input is used. If this is
2865 - raw(False): by default, the processed input is used. If this is
2866 true, the raw input history is used instead.
2866 true, the raw input history is used instead.
2867
2867
2868 Note that slices can be called with two notations:
2868 Note that slices can be called with two notations:
2869
2869
2870 N:M -> standard python form, means including items N...(M-1).
2870 N:M -> standard python form, means including items N...(M-1).
2871
2871
2872 N-M -> include items N..M (closed endpoint)."""
2872 N-M -> include items N..M (closed endpoint)."""
2873 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
2873 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
2874 return "\n".join(x for _, _, x in lines)
2874 return "\n".join(x for _, _, x in lines)
2875
2875
2876 def find_user_code(self, target, raw=True, py_only=False):
2876 def find_user_code(self, target, raw=True, py_only=False):
2877 """Get a code string from history, file, url, or a string or macro.
2877 """Get a code string from history, file, url, or a string or macro.
2878
2878
2879 This is mainly used by magic functions.
2879 This is mainly used by magic functions.
2880
2880
2881 Parameters
2881 Parameters
2882 ----------
2882 ----------
2883
2883
2884 target : str
2884 target : str
2885
2885
2886 A string specifying code to retrieve. This will be tried respectively
2886 A string specifying code to retrieve. This will be tried respectively
2887 as: ranges of input history (see %history for syntax), url,
2887 as: ranges of input history (see %history for syntax), url,
2888 correspnding .py file, filename, or an expression evaluating to a
2888 correspnding .py file, filename, or an expression evaluating to a
2889 string or Macro in the user namespace.
2889 string or Macro in the user namespace.
2890
2890
2891 raw : bool
2891 raw : bool
2892 If true (default), retrieve raw history. Has no effect on the other
2892 If true (default), retrieve raw history. Has no effect on the other
2893 retrieval mechanisms.
2893 retrieval mechanisms.
2894
2894
2895 py_only : bool (default False)
2895 py_only : bool (default False)
2896 Only try to fetch python code, do not try alternative methods to decode file
2896 Only try to fetch python code, do not try alternative methods to decode file
2897 if unicode fails.
2897 if unicode fails.
2898
2898
2899 Returns
2899 Returns
2900 -------
2900 -------
2901 A string of code.
2901 A string of code.
2902
2902
2903 ValueError is raised if nothing is found, and TypeError if it evaluates
2903 ValueError is raised if nothing is found, and TypeError if it evaluates
2904 to an object of another type. In each case, .args[0] is a printable
2904 to an object of another type. In each case, .args[0] is a printable
2905 message.
2905 message.
2906 """
2906 """
2907 code = self.extract_input_lines(target, raw=raw) # Grab history
2907 code = self.extract_input_lines(target, raw=raw) # Grab history
2908 if code:
2908 if code:
2909 return code
2909 return code
2910 utarget = unquote_filename(target)
2910 utarget = unquote_filename(target)
2911 try:
2911 try:
2912 if utarget.startswith(('http://', 'https://')):
2912 if utarget.startswith(('http://', 'https://')):
2913 return openpy.read_py_url(utarget, skip_encoding_cookie=True)
2913 return openpy.read_py_url(utarget, skip_encoding_cookie=True)
2914 except UnicodeDecodeError:
2914 except UnicodeDecodeError:
2915 if not py_only :
2915 if not py_only :
2916 response = urllib.urlopen(target)
2916 response = urllib.urlopen(target)
2917 return response.read().decode('latin1')
2917 return response.read().decode('latin1')
2918 raise ValueError(("'%s' seem to be unreadable.") % utarget)
2918 raise ValueError(("'%s' seem to be unreadable.") % utarget)
2919
2919
2920 potential_target = [target]
2920 potential_target = [target]
2921 try :
2921 try :
2922 potential_target.insert(0,get_py_filename(target))
2922 potential_target.insert(0,get_py_filename(target))
2923 except IOError:
2923 except IOError:
2924 pass
2924 pass
2925
2925
2926 for tgt in potential_target :
2926 for tgt in potential_target :
2927 if os.path.isfile(tgt): # Read file
2927 if os.path.isfile(tgt): # Read file
2928 try :
2928 try :
2929 return openpy.read_py_file(tgt, skip_encoding_cookie=True)
2929 return openpy.read_py_file(tgt, skip_encoding_cookie=True)
2930 except UnicodeDecodeError :
2930 except UnicodeDecodeError :
2931 if not py_only :
2931 if not py_only :
2932 with io_open(tgt,'r', encoding='latin1') as f :
2932 with io_open(tgt,'r', encoding='latin1') as f :
2933 return f.read()
2933 return f.read()
2934 raise ValueError(("'%s' seem to be unreadable.") % target)
2934 raise ValueError(("'%s' seem to be unreadable.") % target)
2935
2935
2936 try: # User namespace
2936 try: # User namespace
2937 codeobj = eval(target, self.user_ns)
2937 codeobj = eval(target, self.user_ns)
2938 except Exception:
2938 except Exception:
2939 raise ValueError(("'%s' was not found in history, as a file, url, "
2939 raise ValueError(("'%s' was not found in history, as a file, url, "
2940 "nor in the user namespace.") % target)
2940 "nor in the user namespace.") % target)
2941 if isinstance(codeobj, basestring):
2941 if isinstance(codeobj, basestring):
2942 return codeobj
2942 return codeobj
2943 elif isinstance(codeobj, Macro):
2943 elif isinstance(codeobj, Macro):
2944 return codeobj.value
2944 return codeobj.value
2945
2945
2946 raise TypeError("%s is neither a string nor a macro." % target,
2946 raise TypeError("%s is neither a string nor a macro." % target,
2947 codeobj)
2947 codeobj)
2948
2948
2949 #-------------------------------------------------------------------------
2949 #-------------------------------------------------------------------------
2950 # Things related to IPython exiting
2950 # Things related to IPython exiting
2951 #-------------------------------------------------------------------------
2951 #-------------------------------------------------------------------------
2952 def atexit_operations(self):
2952 def atexit_operations(self):
2953 """This will be executed at the time of exit.
2953 """This will be executed at the time of exit.
2954
2954
2955 Cleanup operations and saving of persistent data that is done
2955 Cleanup operations and saving of persistent data that is done
2956 unconditionally by IPython should be performed here.
2956 unconditionally by IPython should be performed here.
2957
2957
2958 For things that may depend on startup flags or platform specifics (such
2958 For things that may depend on startup flags or platform specifics (such
2959 as having readline or not), register a separate atexit function in the
2959 as having readline or not), register a separate atexit function in the
2960 code that has the appropriate information, rather than trying to
2960 code that has the appropriate information, rather than trying to
2961 clutter
2961 clutter
2962 """
2962 """
2963 # Close the history session (this stores the end time and line count)
2963 # Close the history session (this stores the end time and line count)
2964 # this must be *before* the tempfile cleanup, in case of temporary
2964 # this must be *before* the tempfile cleanup, in case of temporary
2965 # history db
2965 # history db
2966 self.history_manager.end_session()
2966 self.history_manager.end_session()
2967
2967
2968 # Cleanup all tempfiles left around
2968 # Cleanup all tempfiles left around
2969 for tfile in self.tempfiles:
2969 for tfile in self.tempfiles:
2970 try:
2970 try:
2971 os.unlink(tfile)
2971 os.unlink(tfile)
2972 except OSError:
2972 except OSError:
2973 pass
2973 pass
2974
2974
2975 # Clear all user namespaces to release all references cleanly.
2975 # Clear all user namespaces to release all references cleanly.
2976 self.reset(new_session=False)
2976 self.reset(new_session=False)
2977
2977
2978 # Run user hooks
2978 # Run user hooks
2979 self.hooks.shutdown_hook()
2979 self.hooks.shutdown_hook()
2980
2980
2981 def cleanup(self):
2981 def cleanup(self):
2982 self.restore_sys_module_state()
2982 self.restore_sys_module_state()
2983
2983
2984
2984
2985 class InteractiveShellABC(object):
2985 class InteractiveShellABC(object):
2986 """An abstract base class for InteractiveShell."""
2986 """An abstract base class for InteractiveShell."""
2987 __metaclass__ = abc.ABCMeta
2987 __metaclass__ = abc.ABCMeta
2988
2988
2989 InteractiveShellABC.register(InteractiveShell)
2989 InteractiveShellABC.register(InteractiveShell)
@@ -1,586 +1,586 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3 """
3 """
4
4
5 #-----------------------------------------------------------------------------
5 #-----------------------------------------------------------------------------
6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2001 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2008 The IPython Development Team
8 # Copyright (C) 2008 The IPython Development Team
9
9
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13
13
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15 # Imports
15 # Imports
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17 # Stdlib
17 # Stdlib
18 import os
18 import os
19 import re
19 import re
20 import sys
20 import sys
21 import types
21 import types
22 from getopt import getopt, GetoptError
22 from getopt import getopt, GetoptError
23
23
24 # Our own
24 # Our own
25 from IPython.config.configurable import Configurable
25 from IPython.config.configurable import Configurable
26 from IPython.core import oinspect
26 from IPython.core import oinspect
27 from IPython.core.error import UsageError
27 from IPython.core.error import UsageError
28 from IPython.core.prefilter import ESC_MAGIC
28 from IPython.core.inputsplitter import ESC_MAGIC
29 from IPython.external.decorator import decorator
29 from IPython.external.decorator import decorator
30 from IPython.utils.ipstruct import Struct
30 from IPython.utils.ipstruct import Struct
31 from IPython.utils.process import arg_split
31 from IPython.utils.process import arg_split
32 from IPython.utils.text import dedent
32 from IPython.utils.text import dedent
33 from IPython.utils.traitlets import Bool, Dict, Instance, MetaHasTraits
33 from IPython.utils.traitlets import Bool, Dict, Instance, MetaHasTraits
34 from IPython.utils.warn import error, warn
34 from IPython.utils.warn import error, warn
35
35
36 #-----------------------------------------------------------------------------
36 #-----------------------------------------------------------------------------
37 # Globals
37 # Globals
38 #-----------------------------------------------------------------------------
38 #-----------------------------------------------------------------------------
39
39
40 # A dict we'll use for each class that has magics, used as temporary storage to
40 # A dict we'll use for each class that has magics, used as temporary storage to
41 # pass information between the @line/cell_magic method decorators and the
41 # pass information between the @line/cell_magic method decorators and the
42 # @magics_class class decorator, because the method decorators have no
42 # @magics_class class decorator, because the method decorators have no
43 # access to the class when they run. See for more details:
43 # access to the class when they run. See for more details:
44 # http://stackoverflow.com/questions/2366713/can-a-python-decorator-of-an-instance-method-access-the-class
44 # http://stackoverflow.com/questions/2366713/can-a-python-decorator-of-an-instance-method-access-the-class
45
45
46 magics = dict(line={}, cell={})
46 magics = dict(line={}, cell={})
47
47
48 magic_kinds = ('line', 'cell')
48 magic_kinds = ('line', 'cell')
49 magic_spec = ('line', 'cell', 'line_cell')
49 magic_spec = ('line', 'cell', 'line_cell')
50
50
51 #-----------------------------------------------------------------------------
51 #-----------------------------------------------------------------------------
52 # Utility classes and functions
52 # Utility classes and functions
53 #-----------------------------------------------------------------------------
53 #-----------------------------------------------------------------------------
54
54
55 class Bunch: pass
55 class Bunch: pass
56
56
57
57
58 def on_off(tag):
58 def on_off(tag):
59 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
60 return ['OFF','ON'][tag]
60 return ['OFF','ON'][tag]
61
61
62
62
63 def compress_dhist(dh):
63 def compress_dhist(dh):
64 """Compress a directory history into a new one with at most 20 entries.
64 """Compress a directory history into a new one with at most 20 entries.
65
65
66 Return a new list made from the first and last 10 elements of dhist after
66 Return a new list made from the first and last 10 elements of dhist after
67 removal of duplicates.
67 removal of duplicates.
68 """
68 """
69 head, tail = dh[:-10], dh[-10:]
69 head, tail = dh[:-10], dh[-10:]
70
70
71 newhead = []
71 newhead = []
72 done = set()
72 done = set()
73 for h in head:
73 for h in head:
74 if h in done:
74 if h in done:
75 continue
75 continue
76 newhead.append(h)
76 newhead.append(h)
77 done.add(h)
77 done.add(h)
78
78
79 return newhead + tail
79 return newhead + tail
80
80
81
81
82 def needs_local_scope(func):
82 def needs_local_scope(func):
83 """Decorator to mark magic functions which need to local scope to run."""
83 """Decorator to mark magic functions which need to local scope to run."""
84 func.needs_local_scope = True
84 func.needs_local_scope = True
85 return func
85 return func
86
86
87 #-----------------------------------------------------------------------------
87 #-----------------------------------------------------------------------------
88 # Class and method decorators for registering magics
88 # Class and method decorators for registering magics
89 #-----------------------------------------------------------------------------
89 #-----------------------------------------------------------------------------
90
90
91 def magics_class(cls):
91 def magics_class(cls):
92 """Class decorator for all subclasses of the main Magics class.
92 """Class decorator for all subclasses of the main Magics class.
93
93
94 Any class that subclasses Magics *must* also apply this decorator, to
94 Any class that subclasses Magics *must* also apply this decorator, to
95 ensure that all the methods that have been decorated as line/cell magics
95 ensure that all the methods that have been decorated as line/cell magics
96 get correctly registered in the class instance. This is necessary because
96 get correctly registered in the class instance. This is necessary because
97 when method decorators run, the class does not exist yet, so they
97 when method decorators run, the class does not exist yet, so they
98 temporarily store their information into a module global. Application of
98 temporarily store their information into a module global. Application of
99 this class decorator copies that global data to the class instance and
99 this class decorator copies that global data to the class instance and
100 clears the global.
100 clears the global.
101
101
102 Obviously, this mechanism is not thread-safe, which means that the
102 Obviously, this mechanism is not thread-safe, which means that the
103 *creation* of subclasses of Magic should only be done in a single-thread
103 *creation* of subclasses of Magic should only be done in a single-thread
104 context. Instantiation of the classes has no restrictions. Given that
104 context. Instantiation of the classes has no restrictions. Given that
105 these classes are typically created at IPython startup time and before user
105 these classes are typically created at IPython startup time and before user
106 application code becomes active, in practice this should not pose any
106 application code becomes active, in practice this should not pose any
107 problems.
107 problems.
108 """
108 """
109 cls.registered = True
109 cls.registered = True
110 cls.magics = dict(line = magics['line'],
110 cls.magics = dict(line = magics['line'],
111 cell = magics['cell'])
111 cell = magics['cell'])
112 magics['line'] = {}
112 magics['line'] = {}
113 magics['cell'] = {}
113 magics['cell'] = {}
114 return cls
114 return cls
115
115
116
116
117 def record_magic(dct, magic_kind, magic_name, func):
117 def record_magic(dct, magic_kind, magic_name, func):
118 """Utility function to store a function as a magic of a specific kind.
118 """Utility function to store a function as a magic of a specific kind.
119
119
120 Parameters
120 Parameters
121 ----------
121 ----------
122 dct : dict
122 dct : dict
123 A dictionary with 'line' and 'cell' subdicts.
123 A dictionary with 'line' and 'cell' subdicts.
124
124
125 magic_kind : str
125 magic_kind : str
126 Kind of magic to be stored.
126 Kind of magic to be stored.
127
127
128 magic_name : str
128 magic_name : str
129 Key to store the magic as.
129 Key to store the magic as.
130
130
131 func : function
131 func : function
132 Callable object to store.
132 Callable object to store.
133 """
133 """
134 if magic_kind == 'line_cell':
134 if magic_kind == 'line_cell':
135 dct['line'][magic_name] = dct['cell'][magic_name] = func
135 dct['line'][magic_name] = dct['cell'][magic_name] = func
136 else:
136 else:
137 dct[magic_kind][magic_name] = func
137 dct[magic_kind][magic_name] = func
138
138
139
139
140 def validate_type(magic_kind):
140 def validate_type(magic_kind):
141 """Ensure that the given magic_kind is valid.
141 """Ensure that the given magic_kind is valid.
142
142
143 Check that the given magic_kind is one of the accepted spec types (stored
143 Check that the given magic_kind is one of the accepted spec types (stored
144 in the global `magic_spec`), raise ValueError otherwise.
144 in the global `magic_spec`), raise ValueError otherwise.
145 """
145 """
146 if magic_kind not in magic_spec:
146 if magic_kind not in magic_spec:
147 raise ValueError('magic_kind must be one of %s, %s given' %
147 raise ValueError('magic_kind must be one of %s, %s given' %
148 magic_kinds, magic_kind)
148 magic_kinds, magic_kind)
149
149
150
150
151 # The docstrings for the decorator below will be fairly similar for the two
151 # The docstrings for the decorator below will be fairly similar for the two
152 # types (method and function), so we generate them here once and reuse the
152 # types (method and function), so we generate them here once and reuse the
153 # templates below.
153 # templates below.
154 _docstring_template = \
154 _docstring_template = \
155 """Decorate the given {0} as {1} magic.
155 """Decorate the given {0} as {1} magic.
156
156
157 The decorator can be used with or without arguments, as follows.
157 The decorator can be used with or without arguments, as follows.
158
158
159 i) without arguments: it will create a {1} magic named as the {0} being
159 i) without arguments: it will create a {1} magic named as the {0} being
160 decorated::
160 decorated::
161
161
162 @deco
162 @deco
163 def foo(...)
163 def foo(...)
164
164
165 will create a {1} magic named `foo`.
165 will create a {1} magic named `foo`.
166
166
167 ii) with one string argument: which will be used as the actual name of the
167 ii) with one string argument: which will be used as the actual name of the
168 resulting magic::
168 resulting magic::
169
169
170 @deco('bar')
170 @deco('bar')
171 def foo(...)
171 def foo(...)
172
172
173 will create a {1} magic named `bar`.
173 will create a {1} magic named `bar`.
174 """
174 """
175
175
176 # These two are decorator factories. While they are conceptually very similar,
176 # These two are decorator factories. While they are conceptually very similar,
177 # there are enough differences in the details that it's simpler to have them
177 # there are enough differences in the details that it's simpler to have them
178 # written as completely standalone functions rather than trying to share code
178 # written as completely standalone functions rather than trying to share code
179 # and make a single one with convoluted logic.
179 # and make a single one with convoluted logic.
180
180
181 def _method_magic_marker(magic_kind):
181 def _method_magic_marker(magic_kind):
182 """Decorator factory for methods in Magics subclasses.
182 """Decorator factory for methods in Magics subclasses.
183 """
183 """
184
184
185 validate_type(magic_kind)
185 validate_type(magic_kind)
186
186
187 # This is a closure to capture the magic_kind. We could also use a class,
187 # This is a closure to capture the magic_kind. We could also use a class,
188 # but it's overkill for just that one bit of state.
188 # but it's overkill for just that one bit of state.
189 def magic_deco(arg):
189 def magic_deco(arg):
190 call = lambda f, *a, **k: f(*a, **k)
190 call = lambda f, *a, **k: f(*a, **k)
191
191
192 if callable(arg):
192 if callable(arg):
193 # "Naked" decorator call (just @foo, no args)
193 # "Naked" decorator call (just @foo, no args)
194 func = arg
194 func = arg
195 name = func.func_name
195 name = func.func_name
196 retval = decorator(call, func)
196 retval = decorator(call, func)
197 record_magic(magics, magic_kind, name, name)
197 record_magic(magics, magic_kind, name, name)
198 elif isinstance(arg, basestring):
198 elif isinstance(arg, basestring):
199 # Decorator called with arguments (@foo('bar'))
199 # Decorator called with arguments (@foo('bar'))
200 name = arg
200 name = arg
201 def mark(func, *a, **kw):
201 def mark(func, *a, **kw):
202 record_magic(magics, magic_kind, name, func.func_name)
202 record_magic(magics, magic_kind, name, func.func_name)
203 return decorator(call, func)
203 return decorator(call, func)
204 retval = mark
204 retval = mark
205 else:
205 else:
206 raise TypeError("Decorator can only be called with "
206 raise TypeError("Decorator can only be called with "
207 "string or function")
207 "string or function")
208 return retval
208 return retval
209
209
210 # Ensure the resulting decorator has a usable docstring
210 # Ensure the resulting decorator has a usable docstring
211 magic_deco.__doc__ = _docstring_template.format('method', magic_kind)
211 magic_deco.__doc__ = _docstring_template.format('method', magic_kind)
212 return magic_deco
212 return magic_deco
213
213
214
214
215 def _function_magic_marker(magic_kind):
215 def _function_magic_marker(magic_kind):
216 """Decorator factory for standalone functions.
216 """Decorator factory for standalone functions.
217 """
217 """
218 validate_type(magic_kind)
218 validate_type(magic_kind)
219
219
220 # This is a closure to capture the magic_kind. We could also use a class,
220 # This is a closure to capture the magic_kind. We could also use a class,
221 # but it's overkill for just that one bit of state.
221 # but it's overkill for just that one bit of state.
222 def magic_deco(arg):
222 def magic_deco(arg):
223 call = lambda f, *a, **k: f(*a, **k)
223 call = lambda f, *a, **k: f(*a, **k)
224
224
225 # Find get_ipython() in the caller's namespace
225 # Find get_ipython() in the caller's namespace
226 caller = sys._getframe(1)
226 caller = sys._getframe(1)
227 for ns in ['f_locals', 'f_globals', 'f_builtins']:
227 for ns in ['f_locals', 'f_globals', 'f_builtins']:
228 get_ipython = getattr(caller, ns).get('get_ipython')
228 get_ipython = getattr(caller, ns).get('get_ipython')
229 if get_ipython is not None:
229 if get_ipython is not None:
230 break
230 break
231 else:
231 else:
232 raise NameError('Decorator can only run in context where '
232 raise NameError('Decorator can only run in context where '
233 '`get_ipython` exists')
233 '`get_ipython` exists')
234
234
235 ip = get_ipython()
235 ip = get_ipython()
236
236
237 if callable(arg):
237 if callable(arg):
238 # "Naked" decorator call (just @foo, no args)
238 # "Naked" decorator call (just @foo, no args)
239 func = arg
239 func = arg
240 name = func.func_name
240 name = func.func_name
241 ip.register_magic_function(func, magic_kind, name)
241 ip.register_magic_function(func, magic_kind, name)
242 retval = decorator(call, func)
242 retval = decorator(call, func)
243 elif isinstance(arg, basestring):
243 elif isinstance(arg, basestring):
244 # Decorator called with arguments (@foo('bar'))
244 # Decorator called with arguments (@foo('bar'))
245 name = arg
245 name = arg
246 def mark(func, *a, **kw):
246 def mark(func, *a, **kw):
247 ip.register_magic_function(func, magic_kind, name)
247 ip.register_magic_function(func, magic_kind, name)
248 return decorator(call, func)
248 return decorator(call, func)
249 retval = mark
249 retval = mark
250 else:
250 else:
251 raise TypeError("Decorator can only be called with "
251 raise TypeError("Decorator can only be called with "
252 "string or function")
252 "string or function")
253 return retval
253 return retval
254
254
255 # Ensure the resulting decorator has a usable docstring
255 # Ensure the resulting decorator has a usable docstring
256 ds = _docstring_template.format('function', magic_kind)
256 ds = _docstring_template.format('function', magic_kind)
257
257
258 ds += dedent("""
258 ds += dedent("""
259 Note: this decorator can only be used in a context where IPython is already
259 Note: this decorator can only be used in a context where IPython is already
260 active, so that the `get_ipython()` call succeeds. You can therefore use
260 active, so that the `get_ipython()` call succeeds. You can therefore use
261 it in your startup files loaded after IPython initializes, but *not* in the
261 it in your startup files loaded after IPython initializes, but *not* in the
262 IPython configuration file itself, which is executed before IPython is
262 IPython configuration file itself, which is executed before IPython is
263 fully up and running. Any file located in the `startup` subdirectory of
263 fully up and running. Any file located in the `startup` subdirectory of
264 your configuration profile will be OK in this sense.
264 your configuration profile will be OK in this sense.
265 """)
265 """)
266
266
267 magic_deco.__doc__ = ds
267 magic_deco.__doc__ = ds
268 return magic_deco
268 return magic_deco
269
269
270
270
271 # Create the actual decorators for public use
271 # Create the actual decorators for public use
272
272
273 # These three are used to decorate methods in class definitions
273 # These three are used to decorate methods in class definitions
274 line_magic = _method_magic_marker('line')
274 line_magic = _method_magic_marker('line')
275 cell_magic = _method_magic_marker('cell')
275 cell_magic = _method_magic_marker('cell')
276 line_cell_magic = _method_magic_marker('line_cell')
276 line_cell_magic = _method_magic_marker('line_cell')
277
277
278 # These three decorate standalone functions and perform the decoration
278 # These three decorate standalone functions and perform the decoration
279 # immediately. They can only run where get_ipython() works
279 # immediately. They can only run where get_ipython() works
280 register_line_magic = _function_magic_marker('line')
280 register_line_magic = _function_magic_marker('line')
281 register_cell_magic = _function_magic_marker('cell')
281 register_cell_magic = _function_magic_marker('cell')
282 register_line_cell_magic = _function_magic_marker('line_cell')
282 register_line_cell_magic = _function_magic_marker('line_cell')
283
283
284 #-----------------------------------------------------------------------------
284 #-----------------------------------------------------------------------------
285 # Core Magic classes
285 # Core Magic classes
286 #-----------------------------------------------------------------------------
286 #-----------------------------------------------------------------------------
287
287
288 class MagicsManager(Configurable):
288 class MagicsManager(Configurable):
289 """Object that handles all magic-related functionality for IPython.
289 """Object that handles all magic-related functionality for IPython.
290 """
290 """
291 # Non-configurable class attributes
291 # Non-configurable class attributes
292
292
293 # A two-level dict, first keyed by magic type, then by magic function, and
293 # A two-level dict, first keyed by magic type, then by magic function, and
294 # holding the actual callable object as value. This is the dict used for
294 # holding the actual callable object as value. This is the dict used for
295 # magic function dispatch
295 # magic function dispatch
296 magics = Dict
296 magics = Dict
297
297
298 # A registry of the original objects that we've been given holding magics.
298 # A registry of the original objects that we've been given holding magics.
299 registry = Dict
299 registry = Dict
300
300
301 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
301 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
302
302
303 auto_magic = Bool(True, config=True, help=
303 auto_magic = Bool(True, config=True, help=
304 "Automatically call line magics without requiring explicit % prefix")
304 "Automatically call line magics without requiring explicit % prefix")
305
305
306 _auto_status = [
306 _auto_status = [
307 'Automagic is OFF, % prefix IS needed for line magics.',
307 'Automagic is OFF, % prefix IS needed for line magics.',
308 'Automagic is ON, % prefix IS NOT needed for line magics.']
308 'Automagic is ON, % prefix IS NOT needed for line magics.']
309
309
310 user_magics = Instance('IPython.core.magics.UserMagics')
310 user_magics = Instance('IPython.core.magics.UserMagics')
311
311
312 def __init__(self, shell=None, config=None, user_magics=None, **traits):
312 def __init__(self, shell=None, config=None, user_magics=None, **traits):
313
313
314 super(MagicsManager, self).__init__(shell=shell, config=config,
314 super(MagicsManager, self).__init__(shell=shell, config=config,
315 user_magics=user_magics, **traits)
315 user_magics=user_magics, **traits)
316 self.magics = dict(line={}, cell={})
316 self.magics = dict(line={}, cell={})
317 # Let's add the user_magics to the registry for uniformity, so *all*
317 # Let's add the user_magics to the registry for uniformity, so *all*
318 # registered magic containers can be found there.
318 # registered magic containers can be found there.
319 self.registry[user_magics.__class__.__name__] = user_magics
319 self.registry[user_magics.__class__.__name__] = user_magics
320
320
321 def auto_status(self):
321 def auto_status(self):
322 """Return descriptive string with automagic status."""
322 """Return descriptive string with automagic status."""
323 return self._auto_status[self.auto_magic]
323 return self._auto_status[self.auto_magic]
324
324
325 def lsmagic_info(self):
325 def lsmagic_info(self):
326 magic_list = []
326 magic_list = []
327 for m_type in self.magics :
327 for m_type in self.magics :
328 for m_name,mgc in self.magics[m_type].items():
328 for m_name,mgc in self.magics[m_type].items():
329 try :
329 try :
330 magic_list.append({'name':m_name,'type':m_type,'class':mgc.im_class.__name__})
330 magic_list.append({'name':m_name,'type':m_type,'class':mgc.im_class.__name__})
331 except AttributeError :
331 except AttributeError :
332 magic_list.append({'name':m_name,'type':m_type,'class':'Other'})
332 magic_list.append({'name':m_name,'type':m_type,'class':'Other'})
333 return magic_list
333 return magic_list
334
334
335 def lsmagic(self):
335 def lsmagic(self):
336 """Return a dict of currently available magic functions.
336 """Return a dict of currently available magic functions.
337
337
338 The return dict has the keys 'line' and 'cell', corresponding to the
338 The return dict has the keys 'line' and 'cell', corresponding to the
339 two types of magics we support. Each value is a list of names.
339 two types of magics we support. Each value is a list of names.
340 """
340 """
341 return self.magics
341 return self.magics
342
342
343 def register(self, *magic_objects):
343 def register(self, *magic_objects):
344 """Register one or more instances of Magics.
344 """Register one or more instances of Magics.
345
345
346 Take one or more classes or instances of classes that subclass the main
346 Take one or more classes or instances of classes that subclass the main
347 `core.Magic` class, and register them with IPython to use the magic
347 `core.Magic` class, and register them with IPython to use the magic
348 functions they provide. The registration process will then ensure that
348 functions they provide. The registration process will then ensure that
349 any methods that have decorated to provide line and/or cell magics will
349 any methods that have decorated to provide line and/or cell magics will
350 be recognized with the `%x`/`%%x` syntax as a line/cell magic
350 be recognized with the `%x`/`%%x` syntax as a line/cell magic
351 respectively.
351 respectively.
352
352
353 If classes are given, they will be instantiated with the default
353 If classes are given, they will be instantiated with the default
354 constructor. If your classes need a custom constructor, you should
354 constructor. If your classes need a custom constructor, you should
355 instanitate them first and pass the instance.
355 instanitate them first and pass the instance.
356
356
357 The provided arguments can be an arbitrary mix of classes and instances.
357 The provided arguments can be an arbitrary mix of classes and instances.
358
358
359 Parameters
359 Parameters
360 ----------
360 ----------
361 magic_objects : one or more classes or instances
361 magic_objects : one or more classes or instances
362 """
362 """
363 # Start by validating them to ensure they have all had their magic
363 # Start by validating them to ensure they have all had their magic
364 # methods registered at the instance level
364 # methods registered at the instance level
365 for m in magic_objects:
365 for m in magic_objects:
366 if not m.registered:
366 if not m.registered:
367 raise ValueError("Class of magics %r was constructed without "
367 raise ValueError("Class of magics %r was constructed without "
368 "the @register_magics class decorator")
368 "the @register_magics class decorator")
369 if type(m) in (type, MetaHasTraits):
369 if type(m) in (type, MetaHasTraits):
370 # If we're given an uninstantiated class
370 # If we're given an uninstantiated class
371 m = m(shell=self.shell)
371 m = m(shell=self.shell)
372
372
373 # Now that we have an instance, we can register it and update the
373 # Now that we have an instance, we can register it and update the
374 # table of callables
374 # table of callables
375 self.registry[m.__class__.__name__] = m
375 self.registry[m.__class__.__name__] = m
376 for mtype in magic_kinds:
376 for mtype in magic_kinds:
377 self.magics[mtype].update(m.magics[mtype])
377 self.magics[mtype].update(m.magics[mtype])
378
378
379 def register_function(self, func, magic_kind='line', magic_name=None):
379 def register_function(self, func, magic_kind='line', magic_name=None):
380 """Expose a standalone function as magic function for IPython.
380 """Expose a standalone function as magic function for IPython.
381
381
382 This will create an IPython magic (line, cell or both) from a
382 This will create an IPython magic (line, cell or both) from a
383 standalone function. The functions should have the following
383 standalone function. The functions should have the following
384 signatures:
384 signatures:
385
385
386 * For line magics: `def f(line)`
386 * For line magics: `def f(line)`
387 * For cell magics: `def f(line, cell)`
387 * For cell magics: `def f(line, cell)`
388 * For a function that does both: `def f(line, cell=None)`
388 * For a function that does both: `def f(line, cell=None)`
389
389
390 In the latter case, the function will be called with `cell==None` when
390 In the latter case, the function will be called with `cell==None` when
391 invoked as `%f`, and with cell as a string when invoked as `%%f`.
391 invoked as `%f`, and with cell as a string when invoked as `%%f`.
392
392
393 Parameters
393 Parameters
394 ----------
394 ----------
395 func : callable
395 func : callable
396 Function to be registered as a magic.
396 Function to be registered as a magic.
397
397
398 magic_kind : str
398 magic_kind : str
399 Kind of magic, one of 'line', 'cell' or 'line_cell'
399 Kind of magic, one of 'line', 'cell' or 'line_cell'
400
400
401 magic_name : optional str
401 magic_name : optional str
402 If given, the name the magic will have in the IPython namespace. By
402 If given, the name the magic will have in the IPython namespace. By
403 default, the name of the function itself is used.
403 default, the name of the function itself is used.
404 """
404 """
405
405
406 # Create the new method in the user_magics and register it in the
406 # Create the new method in the user_magics and register it in the
407 # global table
407 # global table
408 validate_type(magic_kind)
408 validate_type(magic_kind)
409 magic_name = func.func_name if magic_name is None else magic_name
409 magic_name = func.func_name if magic_name is None else magic_name
410 setattr(self.user_magics, magic_name, func)
410 setattr(self.user_magics, magic_name, func)
411 record_magic(self.magics, magic_kind, magic_name, func)
411 record_magic(self.magics, magic_kind, magic_name, func)
412
412
413 def define_magic(self, name, func):
413 def define_magic(self, name, func):
414 """[Deprecated] Expose own function as magic function for IPython.
414 """[Deprecated] Expose own function as magic function for IPython.
415
415
416 Example::
416 Example::
417
417
418 def foo_impl(self, parameter_s=''):
418 def foo_impl(self, parameter_s=''):
419 'My very own magic!. (Use docstrings, IPython reads them).'
419 'My very own magic!. (Use docstrings, IPython reads them).'
420 print 'Magic function. Passed parameter is between < >:'
420 print 'Magic function. Passed parameter is between < >:'
421 print '<%s>' % parameter_s
421 print '<%s>' % parameter_s
422 print 'The self object is:', self
422 print 'The self object is:', self
423
423
424 ip.define_magic('foo',foo_impl)
424 ip.define_magic('foo',foo_impl)
425 """
425 """
426 meth = types.MethodType(func, self.user_magics)
426 meth = types.MethodType(func, self.user_magics)
427 setattr(self.user_magics, name, meth)
427 setattr(self.user_magics, name, meth)
428 record_magic(self.magics, 'line', name, meth)
428 record_magic(self.magics, 'line', name, meth)
429
429
430 # Key base class that provides the central functionality for magics.
430 # Key base class that provides the central functionality for magics.
431
431
432 class Magics(object):
432 class Magics(object):
433 """Base class for implementing magic functions.
433 """Base class for implementing magic functions.
434
434
435 Shell functions which can be reached as %function_name. All magic
435 Shell functions which can be reached as %function_name. All magic
436 functions should accept a string, which they can parse for their own
436 functions should accept a string, which they can parse for their own
437 needs. This can make some functions easier to type, eg `%cd ../`
437 needs. This can make some functions easier to type, eg `%cd ../`
438 vs. `%cd("../")`
438 vs. `%cd("../")`
439
439
440 Classes providing magic functions need to subclass this class, and they
440 Classes providing magic functions need to subclass this class, and they
441 MUST:
441 MUST:
442
442
443 - Use the method decorators `@line_magic` and `@cell_magic` to decorate
443 - Use the method decorators `@line_magic` and `@cell_magic` to decorate
444 individual methods as magic functions, AND
444 individual methods as magic functions, AND
445
445
446 - Use the class decorator `@magics_class` to ensure that the magic
446 - Use the class decorator `@magics_class` to ensure that the magic
447 methods are properly registered at the instance level upon instance
447 methods are properly registered at the instance level upon instance
448 initialization.
448 initialization.
449
449
450 See :mod:`magic_functions` for examples of actual implementation classes.
450 See :mod:`magic_functions` for examples of actual implementation classes.
451 """
451 """
452 # Dict holding all command-line options for each magic.
452 # Dict holding all command-line options for each magic.
453 options_table = None
453 options_table = None
454 # Dict for the mapping of magic names to methods, set by class decorator
454 # Dict for the mapping of magic names to methods, set by class decorator
455 magics = None
455 magics = None
456 # Flag to check that the class decorator was properly applied
456 # Flag to check that the class decorator was properly applied
457 registered = False
457 registered = False
458 # Instance of IPython shell
458 # Instance of IPython shell
459 shell = None
459 shell = None
460
460
461 def __init__(self, shell):
461 def __init__(self, shell):
462 if not(self.__class__.registered):
462 if not(self.__class__.registered):
463 raise ValueError('Magics subclass without registration - '
463 raise ValueError('Magics subclass without registration - '
464 'did you forget to apply @magics_class?')
464 'did you forget to apply @magics_class?')
465 self.shell = shell
465 self.shell = shell
466 self.options_table = {}
466 self.options_table = {}
467 # The method decorators are run when the instance doesn't exist yet, so
467 # The method decorators are run when the instance doesn't exist yet, so
468 # they can only record the names of the methods they are supposed to
468 # they can only record the names of the methods they are supposed to
469 # grab. Only now, that the instance exists, can we create the proper
469 # grab. Only now, that the instance exists, can we create the proper
470 # mapping to bound methods. So we read the info off the original names
470 # mapping to bound methods. So we read the info off the original names
471 # table and replace each method name by the actual bound method.
471 # table and replace each method name by the actual bound method.
472 for mtype in magic_kinds:
472 for mtype in magic_kinds:
473 tab = self.magics[mtype]
473 tab = self.magics[mtype]
474 # must explicitly use keys, as we're mutating this puppy
474 # must explicitly use keys, as we're mutating this puppy
475 for magic_name in tab.keys():
475 for magic_name in tab.keys():
476 meth_name = tab[magic_name]
476 meth_name = tab[magic_name]
477 if isinstance(meth_name, basestring):
477 if isinstance(meth_name, basestring):
478 tab[magic_name] = getattr(self, meth_name)
478 tab[magic_name] = getattr(self, meth_name)
479
479
480 def arg_err(self,func):
480 def arg_err(self,func):
481 """Print docstring if incorrect arguments were passed"""
481 """Print docstring if incorrect arguments were passed"""
482 print 'Error in arguments:'
482 print 'Error in arguments:'
483 print oinspect.getdoc(func)
483 print oinspect.getdoc(func)
484
484
485 def format_latex(self, strng):
485 def format_latex(self, strng):
486 """Format a string for latex inclusion."""
486 """Format a string for latex inclusion."""
487
487
488 # Characters that need to be escaped for latex:
488 # Characters that need to be escaped for latex:
489 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
489 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
490 # Magic command names as headers:
490 # Magic command names as headers:
491 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
491 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
492 re.MULTILINE)
492 re.MULTILINE)
493 # Magic commands
493 # Magic commands
494 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
494 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
495 re.MULTILINE)
495 re.MULTILINE)
496 # Paragraph continue
496 # Paragraph continue
497 par_re = re.compile(r'\\$',re.MULTILINE)
497 par_re = re.compile(r'\\$',re.MULTILINE)
498
498
499 # The "\n" symbol
499 # The "\n" symbol
500 newline_re = re.compile(r'\\n')
500 newline_re = re.compile(r'\\n')
501
501
502 # Now build the string for output:
502 # Now build the string for output:
503 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
503 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
504 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
504 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
505 strng)
505 strng)
506 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
506 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
507 strng = par_re.sub(r'\\\\',strng)
507 strng = par_re.sub(r'\\\\',strng)
508 strng = escape_re.sub(r'\\\1',strng)
508 strng = escape_re.sub(r'\\\1',strng)
509 strng = newline_re.sub(r'\\textbackslash{}n',strng)
509 strng = newline_re.sub(r'\\textbackslash{}n',strng)
510 return strng
510 return strng
511
511
512 def parse_options(self, arg_str, opt_str, *long_opts, **kw):
512 def parse_options(self, arg_str, opt_str, *long_opts, **kw):
513 """Parse options passed to an argument string.
513 """Parse options passed to an argument string.
514
514
515 The interface is similar to that of getopt(), but it returns back a
515 The interface is similar to that of getopt(), but it returns back a
516 Struct with the options as keys and the stripped argument string still
516 Struct with the options as keys and the stripped argument string still
517 as a string.
517 as a string.
518
518
519 arg_str is quoted as a true sys.argv vector by using shlex.split.
519 arg_str is quoted as a true sys.argv vector by using shlex.split.
520 This allows us to easily expand variables, glob files, quote
520 This allows us to easily expand variables, glob files, quote
521 arguments, etc.
521 arguments, etc.
522
522
523 Options:
523 Options:
524 -mode: default 'string'. If given as 'list', the argument string is
524 -mode: default 'string'. If given as 'list', the argument string is
525 returned as a list (split on whitespace) instead of a string.
525 returned as a list (split on whitespace) instead of a string.
526
526
527 -list_all: put all option values in lists. Normally only options
527 -list_all: put all option values in lists. Normally only options
528 appearing more than once are put in a list.
528 appearing more than once are put in a list.
529
529
530 -posix (True): whether to split the input line in POSIX mode or not,
530 -posix (True): whether to split the input line in POSIX mode or not,
531 as per the conventions outlined in the shlex module from the
531 as per the conventions outlined in the shlex module from the
532 standard library."""
532 standard library."""
533
533
534 # inject default options at the beginning of the input line
534 # inject default options at the beginning of the input line
535 caller = sys._getframe(1).f_code.co_name
535 caller = sys._getframe(1).f_code.co_name
536 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
536 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
537
537
538 mode = kw.get('mode','string')
538 mode = kw.get('mode','string')
539 if mode not in ['string','list']:
539 if mode not in ['string','list']:
540 raise ValueError,'incorrect mode given: %s' % mode
540 raise ValueError,'incorrect mode given: %s' % mode
541 # Get options
541 # Get options
542 list_all = kw.get('list_all',0)
542 list_all = kw.get('list_all',0)
543 posix = kw.get('posix', os.name == 'posix')
543 posix = kw.get('posix', os.name == 'posix')
544 strict = kw.get('strict', True)
544 strict = kw.get('strict', True)
545
545
546 # Check if we have more than one argument to warrant extra processing:
546 # Check if we have more than one argument to warrant extra processing:
547 odict = {} # Dictionary with options
547 odict = {} # Dictionary with options
548 args = arg_str.split()
548 args = arg_str.split()
549 if len(args) >= 1:
549 if len(args) >= 1:
550 # If the list of inputs only has 0 or 1 thing in it, there's no
550 # If the list of inputs only has 0 or 1 thing in it, there's no
551 # need to look for options
551 # need to look for options
552 argv = arg_split(arg_str, posix, strict)
552 argv = arg_split(arg_str, posix, strict)
553 # Do regular option processing
553 # Do regular option processing
554 try:
554 try:
555 opts,args = getopt(argv, opt_str, long_opts)
555 opts,args = getopt(argv, opt_str, long_opts)
556 except GetoptError,e:
556 except GetoptError,e:
557 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
557 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
558 " ".join(long_opts)))
558 " ".join(long_opts)))
559 for o,a in opts:
559 for o,a in opts:
560 if o.startswith('--'):
560 if o.startswith('--'):
561 o = o[2:]
561 o = o[2:]
562 else:
562 else:
563 o = o[1:]
563 o = o[1:]
564 try:
564 try:
565 odict[o].append(a)
565 odict[o].append(a)
566 except AttributeError:
566 except AttributeError:
567 odict[o] = [odict[o],a]
567 odict[o] = [odict[o],a]
568 except KeyError:
568 except KeyError:
569 if list_all:
569 if list_all:
570 odict[o] = [a]
570 odict[o] = [a]
571 else:
571 else:
572 odict[o] = a
572 odict[o] = a
573
573
574 # Prepare opts,args for return
574 # Prepare opts,args for return
575 opts = Struct(odict)
575 opts = Struct(odict)
576 if mode == 'string':
576 if mode == 'string':
577 args = ' '.join(args)
577 args = ' '.join(args)
578
578
579 return opts,args
579 return opts,args
580
580
581 def default_option(self, fn, optstr):
581 def default_option(self, fn, optstr):
582 """Make an entry in the options_table for fn, with value optstr"""
582 """Make an entry in the options_table for fn, with value optstr"""
583
583
584 if fn not in self.lsmagic():
584 if fn not in self.lsmagic():
585 error("%s is not a magic function" % fn)
585 error("%s is not a magic function" % fn)
586 self.options_table[fn] = optstr
586 self.options_table[fn] = optstr
@@ -1,538 +1,538 b''
1 """Implementation of basic magic functions.
1 """Implementation of basic magic functions.
2 """
2 """
3 #-----------------------------------------------------------------------------
3 #-----------------------------------------------------------------------------
4 # Copyright (c) 2012 The IPython Development Team.
4 # Copyright (c) 2012 The IPython Development Team.
5 #
5 #
6 # Distributed under the terms of the Modified BSD License.
6 # Distributed under the terms of the Modified BSD License.
7 #
7 #
8 # The full license is in the file COPYING.txt, distributed with this software.
8 # The full license is in the file COPYING.txt, distributed with this software.
9 #-----------------------------------------------------------------------------
9 #-----------------------------------------------------------------------------
10
10
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12 # Imports
12 # Imports
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 from __future__ import print_function
14 from __future__ import print_function
15
15
16 # Stdlib
16 # Stdlib
17 import io
17 import io
18 import sys
18 import sys
19 from pprint import pformat
19 from pprint import pformat
20
20
21 # Our own packages
21 # Our own packages
22 from IPython.core.error import UsageError
22 from IPython.core.error import UsageError
23 from IPython.core.inputsplitter import ESC_MAGIC
23 from IPython.core.magic import Magics, magics_class, line_magic
24 from IPython.core.magic import Magics, magics_class, line_magic
24 from IPython.core.prefilter import ESC_MAGIC
25 from IPython.utils.text import format_screen
25 from IPython.utils.text import format_screen
26 from IPython.core import magic_arguments, page
26 from IPython.core import magic_arguments, page
27 from IPython.testing.skipdoctest import skip_doctest
27 from IPython.testing.skipdoctest import skip_doctest
28 from IPython.utils.ipstruct import Struct
28 from IPython.utils.ipstruct import Struct
29 from IPython.utils.path import unquote_filename
29 from IPython.utils.path import unquote_filename
30 from IPython.utils.warn import warn, error
30 from IPython.utils.warn import warn, error
31
31
32 #-----------------------------------------------------------------------------
32 #-----------------------------------------------------------------------------
33 # Magics class implementation
33 # Magics class implementation
34 #-----------------------------------------------------------------------------
34 #-----------------------------------------------------------------------------
35
35
36 @magics_class
36 @magics_class
37 class BasicMagics(Magics):
37 class BasicMagics(Magics):
38 """Magics that provide central IPython functionality.
38 """Magics that provide central IPython functionality.
39
39
40 These are various magics that don't fit into specific categories but that
40 These are various magics that don't fit into specific categories but that
41 are all part of the base 'IPython experience'."""
41 are all part of the base 'IPython experience'."""
42
42
43 def _lsmagic(self):
43 def _lsmagic(self):
44 mesc = ESC_MAGIC
44 mesc = ESC_MAGIC
45 cesc = mesc*2
45 cesc = mesc*2
46 mman = self.shell.magics_manager
46 mman = self.shell.magics_manager
47 magics = mman.lsmagic()
47 magics = mman.lsmagic()
48 out = ['Available line magics:',
48 out = ['Available line magics:',
49 mesc + (' '+mesc).join(sorted(magics['line'])),
49 mesc + (' '+mesc).join(sorted(magics['line'])),
50 '',
50 '',
51 'Available cell magics:',
51 'Available cell magics:',
52 cesc + (' '+cesc).join(sorted(magics['cell'])),
52 cesc + (' '+cesc).join(sorted(magics['cell'])),
53 '',
53 '',
54 mman.auto_status()]
54 mman.auto_status()]
55 return '\n'.join(out)
55 return '\n'.join(out)
56
56
57 @line_magic
57 @line_magic
58 def lsmagic(self, parameter_s=''):
58 def lsmagic(self, parameter_s=''):
59 """List currently available magic functions."""
59 """List currently available magic functions."""
60 print(self._lsmagic())
60 print(self._lsmagic())
61
61
62 @line_magic
62 @line_magic
63 def magic(self, parameter_s=''):
63 def magic(self, parameter_s=''):
64 """Print information about the magic function system.
64 """Print information about the magic function system.
65
65
66 Supported formats: -latex, -brief, -rest
66 Supported formats: -latex, -brief, -rest
67 """
67 """
68
68
69 mode = ''
69 mode = ''
70 try:
70 try:
71 mode = parameter_s.split()[0][1:]
71 mode = parameter_s.split()[0][1:]
72 if mode == 'rest':
72 if mode == 'rest':
73 rest_docs = []
73 rest_docs = []
74 except IndexError:
74 except IndexError:
75 pass
75 pass
76
76
77 magic_docs = []
77 magic_docs = []
78 escapes = dict(line=ESC_MAGIC, cell=ESC_MAGIC*2)
78 escapes = dict(line=ESC_MAGIC, cell=ESC_MAGIC*2)
79 magics = self.shell.magics_manager.magics
79 magics = self.shell.magics_manager.magics
80
80
81 for mtype in ('line', 'cell'):
81 for mtype in ('line', 'cell'):
82 escape = escapes[mtype]
82 escape = escapes[mtype]
83 for fname, fn in magics[mtype].iteritems():
83 for fname, fn in magics[mtype].iteritems():
84
84
85 if mode == 'brief':
85 if mode == 'brief':
86 # only first line
86 # only first line
87 if fn.__doc__:
87 if fn.__doc__:
88 fndoc = fn.__doc__.split('\n',1)[0]
88 fndoc = fn.__doc__.split('\n',1)[0]
89 else:
89 else:
90 fndoc = 'No documentation'
90 fndoc = 'No documentation'
91 else:
91 else:
92 if fn.__doc__:
92 if fn.__doc__:
93 fndoc = fn.__doc__.rstrip()
93 fndoc = fn.__doc__.rstrip()
94 else:
94 else:
95 fndoc = 'No documentation'
95 fndoc = 'No documentation'
96
96
97 if mode == 'rest':
97 if mode == 'rest':
98 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %
98 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %
99 (escape, fname, fndoc))
99 (escape, fname, fndoc))
100 else:
100 else:
101 magic_docs.append('%s%s:\n\t%s\n' %
101 magic_docs.append('%s%s:\n\t%s\n' %
102 (escape, fname, fndoc))
102 (escape, fname, fndoc))
103
103
104 magic_docs = ''.join(magic_docs)
104 magic_docs = ''.join(magic_docs)
105
105
106 if mode == 'rest':
106 if mode == 'rest':
107 return "".join(rest_docs)
107 return "".join(rest_docs)
108
108
109 if mode == 'latex':
109 if mode == 'latex':
110 print(self.format_latex(magic_docs))
110 print(self.format_latex(magic_docs))
111 return
111 return
112 else:
112 else:
113 magic_docs = format_screen(magic_docs)
113 magic_docs = format_screen(magic_docs)
114 if mode == 'brief':
114 if mode == 'brief':
115 return magic_docs
115 return magic_docs
116
116
117 out = ["""
117 out = ["""
118 IPython's 'magic' functions
118 IPython's 'magic' functions
119 ===========================
119 ===========================
120
120
121 The magic function system provides a series of functions which allow you to
121 The magic function system provides a series of functions which allow you to
122 control the behavior of IPython itself, plus a lot of system-type
122 control the behavior of IPython itself, plus a lot of system-type
123 features. There are two kinds of magics, line-oriented and cell-oriented.
123 features. There are two kinds of magics, line-oriented and cell-oriented.
124
124
125 Line magics are prefixed with the % character and work much like OS
125 Line magics are prefixed with the % character and work much like OS
126 command-line calls: they get as an argument the rest of the line, where
126 command-line calls: they get as an argument the rest of the line, where
127 arguments are passed without parentheses or quotes. For example, this will
127 arguments are passed without parentheses or quotes. For example, this will
128 time the given statement::
128 time the given statement::
129
129
130 %timeit range(1000)
130 %timeit range(1000)
131
131
132 Cell magics are prefixed with a double %%, and they are functions that get as
132 Cell magics are prefixed with a double %%, and they are functions that get as
133 an argument not only the rest of the line, but also the lines below it in a
133 an argument not only the rest of the line, but also the lines below it in a
134 separate argument. These magics are called with two arguments: the rest of the
134 separate argument. These magics are called with two arguments: the rest of the
135 call line and the body of the cell, consisting of the lines below the first.
135 call line and the body of the cell, consisting of the lines below the first.
136 For example::
136 For example::
137
137
138 %%timeit x = numpy.random.randn((100, 100))
138 %%timeit x = numpy.random.randn((100, 100))
139 numpy.linalg.svd(x)
139 numpy.linalg.svd(x)
140
140
141 will time the execution of the numpy svd routine, running the assignment of x
141 will time the execution of the numpy svd routine, running the assignment of x
142 as part of the setup phase, which is not timed.
142 as part of the setup phase, which is not timed.
143
143
144 In a line-oriented client (the terminal or Qt console IPython), starting a new
144 In a line-oriented client (the terminal or Qt console IPython), starting a new
145 input with %% will automatically enter cell mode, and IPython will continue
145 input with %% will automatically enter cell mode, and IPython will continue
146 reading input until a blank line is given. In the notebook, simply type the
146 reading input until a blank line is given. In the notebook, simply type the
147 whole cell as one entity, but keep in mind that the %% escape can only be at
147 whole cell as one entity, but keep in mind that the %% escape can only be at
148 the very start of the cell.
148 the very start of the cell.
149
149
150 NOTE: If you have 'automagic' enabled (via the command line option or with the
150 NOTE: If you have 'automagic' enabled (via the command line option or with the
151 %automagic function), you don't need to type in the % explicitly for line
151 %automagic function), you don't need to type in the % explicitly for line
152 magics; cell magics always require an explicit '%%' escape. By default,
152 magics; cell magics always require an explicit '%%' escape. By default,
153 IPython ships with automagic on, so you should only rarely need the % escape.
153 IPython ships with automagic on, so you should only rarely need the % escape.
154
154
155 Example: typing '%cd mydir' (without the quotes) changes you working directory
155 Example: typing '%cd mydir' (without the quotes) changes you working directory
156 to 'mydir', if it exists.
156 to 'mydir', if it exists.
157
157
158 For a list of the available magic functions, use %lsmagic. For a description
158 For a list of the available magic functions, use %lsmagic. For a description
159 of any of them, type %magic_name?, e.g. '%cd?'.
159 of any of them, type %magic_name?, e.g. '%cd?'.
160
160
161 Currently the magic system has the following functions:""",
161 Currently the magic system has the following functions:""",
162 magic_docs,
162 magic_docs,
163 "Summary of magic functions (from %slsmagic):",
163 "Summary of magic functions (from %slsmagic):",
164 self._lsmagic(),
164 self._lsmagic(),
165 ]
165 ]
166 page.page('\n'.join(out))
166 page.page('\n'.join(out))
167
167
168
168
169 @line_magic
169 @line_magic
170 def page(self, parameter_s=''):
170 def page(self, parameter_s=''):
171 """Pretty print the object and display it through a pager.
171 """Pretty print the object and display it through a pager.
172
172
173 %page [options] OBJECT
173 %page [options] OBJECT
174
174
175 If no object is given, use _ (last output).
175 If no object is given, use _ (last output).
176
176
177 Options:
177 Options:
178
178
179 -r: page str(object), don't pretty-print it."""
179 -r: page str(object), don't pretty-print it."""
180
180
181 # After a function contributed by Olivier Aubert, slightly modified.
181 # After a function contributed by Olivier Aubert, slightly modified.
182
182
183 # Process options/args
183 # Process options/args
184 opts, args = self.parse_options(parameter_s, 'r')
184 opts, args = self.parse_options(parameter_s, 'r')
185 raw = 'r' in opts
185 raw = 'r' in opts
186
186
187 oname = args and args or '_'
187 oname = args and args or '_'
188 info = self._ofind(oname)
188 info = self._ofind(oname)
189 if info['found']:
189 if info['found']:
190 txt = (raw and str or pformat)( info['obj'] )
190 txt = (raw and str or pformat)( info['obj'] )
191 page.page(txt)
191 page.page(txt)
192 else:
192 else:
193 print('Object `%s` not found' % oname)
193 print('Object `%s` not found' % oname)
194
194
195 @line_magic
195 @line_magic
196 def profile(self, parameter_s=''):
196 def profile(self, parameter_s=''):
197 """Print your currently active IPython profile."""
197 """Print your currently active IPython profile."""
198 from IPython.core.application import BaseIPythonApplication
198 from IPython.core.application import BaseIPythonApplication
199 if BaseIPythonApplication.initialized():
199 if BaseIPythonApplication.initialized():
200 print(BaseIPythonApplication.instance().profile)
200 print(BaseIPythonApplication.instance().profile)
201 else:
201 else:
202 error("profile is an application-level value, but you don't appear to be in an IPython application")
202 error("profile is an application-level value, but you don't appear to be in an IPython application")
203
203
204 @line_magic
204 @line_magic
205 def pprint(self, parameter_s=''):
205 def pprint(self, parameter_s=''):
206 """Toggle pretty printing on/off."""
206 """Toggle pretty printing on/off."""
207 ptformatter = self.shell.display_formatter.formatters['text/plain']
207 ptformatter = self.shell.display_formatter.formatters['text/plain']
208 ptformatter.pprint = bool(1 - ptformatter.pprint)
208 ptformatter.pprint = bool(1 - ptformatter.pprint)
209 print('Pretty printing has been turned',
209 print('Pretty printing has been turned',
210 ['OFF','ON'][ptformatter.pprint])
210 ['OFF','ON'][ptformatter.pprint])
211
211
212 @line_magic
212 @line_magic
213 def colors(self, parameter_s=''):
213 def colors(self, parameter_s=''):
214 """Switch color scheme for prompts, info system and exception handlers.
214 """Switch color scheme for prompts, info system and exception handlers.
215
215
216 Currently implemented schemes: NoColor, Linux, LightBG.
216 Currently implemented schemes: NoColor, Linux, LightBG.
217
217
218 Color scheme names are not case-sensitive.
218 Color scheme names are not case-sensitive.
219
219
220 Examples
220 Examples
221 --------
221 --------
222 To get a plain black and white terminal::
222 To get a plain black and white terminal::
223
223
224 %colors nocolor
224 %colors nocolor
225 """
225 """
226 def color_switch_err(name):
226 def color_switch_err(name):
227 warn('Error changing %s color schemes.\n%s' %
227 warn('Error changing %s color schemes.\n%s' %
228 (name, sys.exc_info()[1]))
228 (name, sys.exc_info()[1]))
229
229
230
230
231 new_scheme = parameter_s.strip()
231 new_scheme = parameter_s.strip()
232 if not new_scheme:
232 if not new_scheme:
233 raise UsageError(
233 raise UsageError(
234 "%colors: you must specify a color scheme. See '%colors?'")
234 "%colors: you must specify a color scheme. See '%colors?'")
235 return
235 return
236 # local shortcut
236 # local shortcut
237 shell = self.shell
237 shell = self.shell
238
238
239 import IPython.utils.rlineimpl as readline
239 import IPython.utils.rlineimpl as readline
240
240
241 if not shell.colors_force and \
241 if not shell.colors_force and \
242 not readline.have_readline and sys.platform == "win32":
242 not readline.have_readline and sys.platform == "win32":
243 msg = """\
243 msg = """\
244 Proper color support under MS Windows requires the pyreadline library.
244 Proper color support under MS Windows requires the pyreadline library.
245 You can find it at:
245 You can find it at:
246 http://ipython.org/pyreadline.html
246 http://ipython.org/pyreadline.html
247 Gary's readline needs the ctypes module, from:
247 Gary's readline needs the ctypes module, from:
248 http://starship.python.net/crew/theller/ctypes
248 http://starship.python.net/crew/theller/ctypes
249 (Note that ctypes is already part of Python versions 2.5 and newer).
249 (Note that ctypes is already part of Python versions 2.5 and newer).
250
250
251 Defaulting color scheme to 'NoColor'"""
251 Defaulting color scheme to 'NoColor'"""
252 new_scheme = 'NoColor'
252 new_scheme = 'NoColor'
253 warn(msg)
253 warn(msg)
254
254
255 # readline option is 0
255 # readline option is 0
256 if not shell.colors_force and not shell.has_readline:
256 if not shell.colors_force and not shell.has_readline:
257 new_scheme = 'NoColor'
257 new_scheme = 'NoColor'
258
258
259 # Set prompt colors
259 # Set prompt colors
260 try:
260 try:
261 shell.prompt_manager.color_scheme = new_scheme
261 shell.prompt_manager.color_scheme = new_scheme
262 except:
262 except:
263 color_switch_err('prompt')
263 color_switch_err('prompt')
264 else:
264 else:
265 shell.colors = \
265 shell.colors = \
266 shell.prompt_manager.color_scheme_table.active_scheme_name
266 shell.prompt_manager.color_scheme_table.active_scheme_name
267 # Set exception colors
267 # Set exception colors
268 try:
268 try:
269 shell.InteractiveTB.set_colors(scheme = new_scheme)
269 shell.InteractiveTB.set_colors(scheme = new_scheme)
270 shell.SyntaxTB.set_colors(scheme = new_scheme)
270 shell.SyntaxTB.set_colors(scheme = new_scheme)
271 except:
271 except:
272 color_switch_err('exception')
272 color_switch_err('exception')
273
273
274 # Set info (for 'object?') colors
274 # Set info (for 'object?') colors
275 if shell.color_info:
275 if shell.color_info:
276 try:
276 try:
277 shell.inspector.set_active_scheme(new_scheme)
277 shell.inspector.set_active_scheme(new_scheme)
278 except:
278 except:
279 color_switch_err('object inspector')
279 color_switch_err('object inspector')
280 else:
280 else:
281 shell.inspector.set_active_scheme('NoColor')
281 shell.inspector.set_active_scheme('NoColor')
282
282
283 @line_magic
283 @line_magic
284 def xmode(self, parameter_s=''):
284 def xmode(self, parameter_s=''):
285 """Switch modes for the exception handlers.
285 """Switch modes for the exception handlers.
286
286
287 Valid modes: Plain, Context and Verbose.
287 Valid modes: Plain, Context and Verbose.
288
288
289 If called without arguments, acts as a toggle."""
289 If called without arguments, acts as a toggle."""
290
290
291 def xmode_switch_err(name):
291 def xmode_switch_err(name):
292 warn('Error changing %s exception modes.\n%s' %
292 warn('Error changing %s exception modes.\n%s' %
293 (name,sys.exc_info()[1]))
293 (name,sys.exc_info()[1]))
294
294
295 shell = self.shell
295 shell = self.shell
296 new_mode = parameter_s.strip().capitalize()
296 new_mode = parameter_s.strip().capitalize()
297 try:
297 try:
298 shell.InteractiveTB.set_mode(mode=new_mode)
298 shell.InteractiveTB.set_mode(mode=new_mode)
299 print('Exception reporting mode:',shell.InteractiveTB.mode)
299 print('Exception reporting mode:',shell.InteractiveTB.mode)
300 except:
300 except:
301 xmode_switch_err('user')
301 xmode_switch_err('user')
302
302
303 @line_magic
303 @line_magic
304 def quickref(self,arg):
304 def quickref(self,arg):
305 """ Show a quick reference sheet """
305 """ Show a quick reference sheet """
306 from IPython.core.usage import quick_reference
306 from IPython.core.usage import quick_reference
307 qr = quick_reference + self.magic('-brief')
307 qr = quick_reference + self.magic('-brief')
308 page.page(qr)
308 page.page(qr)
309
309
310 @line_magic
310 @line_magic
311 def doctest_mode(self, parameter_s=''):
311 def doctest_mode(self, parameter_s=''):
312 """Toggle doctest mode on and off.
312 """Toggle doctest mode on and off.
313
313
314 This mode is intended to make IPython behave as much as possible like a
314 This mode is intended to make IPython behave as much as possible like a
315 plain Python shell, from the perspective of how its prompts, exceptions
315 plain Python shell, from the perspective of how its prompts, exceptions
316 and output look. This makes it easy to copy and paste parts of a
316 and output look. This makes it easy to copy and paste parts of a
317 session into doctests. It does so by:
317 session into doctests. It does so by:
318
318
319 - Changing the prompts to the classic ``>>>`` ones.
319 - Changing the prompts to the classic ``>>>`` ones.
320 - Changing the exception reporting mode to 'Plain'.
320 - Changing the exception reporting mode to 'Plain'.
321 - Disabling pretty-printing of output.
321 - Disabling pretty-printing of output.
322
322
323 Note that IPython also supports the pasting of code snippets that have
323 Note that IPython also supports the pasting of code snippets that have
324 leading '>>>' and '...' prompts in them. This means that you can paste
324 leading '>>>' and '...' prompts in them. This means that you can paste
325 doctests from files or docstrings (even if they have leading
325 doctests from files or docstrings (even if they have leading
326 whitespace), and the code will execute correctly. You can then use
326 whitespace), and the code will execute correctly. You can then use
327 '%history -t' to see the translated history; this will give you the
327 '%history -t' to see the translated history; this will give you the
328 input after removal of all the leading prompts and whitespace, which
328 input after removal of all the leading prompts and whitespace, which
329 can be pasted back into an editor.
329 can be pasted back into an editor.
330
330
331 With these features, you can switch into this mode easily whenever you
331 With these features, you can switch into this mode easily whenever you
332 need to do testing and changes to doctests, without having to leave
332 need to do testing and changes to doctests, without having to leave
333 your existing IPython session.
333 your existing IPython session.
334 """
334 """
335
335
336 # Shorthands
336 # Shorthands
337 shell = self.shell
337 shell = self.shell
338 pm = shell.prompt_manager
338 pm = shell.prompt_manager
339 meta = shell.meta
339 meta = shell.meta
340 disp_formatter = self.shell.display_formatter
340 disp_formatter = self.shell.display_formatter
341 ptformatter = disp_formatter.formatters['text/plain']
341 ptformatter = disp_formatter.formatters['text/plain']
342 # dstore is a data store kept in the instance metadata bag to track any
342 # dstore is a data store kept in the instance metadata bag to track any
343 # changes we make, so we can undo them later.
343 # changes we make, so we can undo them later.
344 dstore = meta.setdefault('doctest_mode',Struct())
344 dstore = meta.setdefault('doctest_mode',Struct())
345 save_dstore = dstore.setdefault
345 save_dstore = dstore.setdefault
346
346
347 # save a few values we'll need to recover later
347 # save a few values we'll need to recover later
348 mode = save_dstore('mode',False)
348 mode = save_dstore('mode',False)
349 save_dstore('rc_pprint',ptformatter.pprint)
349 save_dstore('rc_pprint',ptformatter.pprint)
350 save_dstore('xmode',shell.InteractiveTB.mode)
350 save_dstore('xmode',shell.InteractiveTB.mode)
351 save_dstore('rc_separate_out',shell.separate_out)
351 save_dstore('rc_separate_out',shell.separate_out)
352 save_dstore('rc_separate_out2',shell.separate_out2)
352 save_dstore('rc_separate_out2',shell.separate_out2)
353 save_dstore('rc_prompts_pad_left',pm.justify)
353 save_dstore('rc_prompts_pad_left',pm.justify)
354 save_dstore('rc_separate_in',shell.separate_in)
354 save_dstore('rc_separate_in',shell.separate_in)
355 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
355 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
356 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
356 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
357
357
358 if mode == False:
358 if mode == False:
359 # turn on
359 # turn on
360 pm.in_template = '>>> '
360 pm.in_template = '>>> '
361 pm.in2_template = '... '
361 pm.in2_template = '... '
362 pm.out_template = ''
362 pm.out_template = ''
363
363
364 # Prompt separators like plain python
364 # Prompt separators like plain python
365 shell.separate_in = ''
365 shell.separate_in = ''
366 shell.separate_out = ''
366 shell.separate_out = ''
367 shell.separate_out2 = ''
367 shell.separate_out2 = ''
368
368
369 pm.justify = False
369 pm.justify = False
370
370
371 ptformatter.pprint = False
371 ptformatter.pprint = False
372 disp_formatter.plain_text_only = True
372 disp_formatter.plain_text_only = True
373
373
374 shell.magic('xmode Plain')
374 shell.magic('xmode Plain')
375 else:
375 else:
376 # turn off
376 # turn off
377 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
377 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
378
378
379 shell.separate_in = dstore.rc_separate_in
379 shell.separate_in = dstore.rc_separate_in
380
380
381 shell.separate_out = dstore.rc_separate_out
381 shell.separate_out = dstore.rc_separate_out
382 shell.separate_out2 = dstore.rc_separate_out2
382 shell.separate_out2 = dstore.rc_separate_out2
383
383
384 pm.justify = dstore.rc_prompts_pad_left
384 pm.justify = dstore.rc_prompts_pad_left
385
385
386 ptformatter.pprint = dstore.rc_pprint
386 ptformatter.pprint = dstore.rc_pprint
387 disp_formatter.plain_text_only = dstore.rc_plain_text_only
387 disp_formatter.plain_text_only = dstore.rc_plain_text_only
388
388
389 shell.magic('xmode ' + dstore.xmode)
389 shell.magic('xmode ' + dstore.xmode)
390
390
391 # Store new mode and inform
391 # Store new mode and inform
392 dstore.mode = bool(1-int(mode))
392 dstore.mode = bool(1-int(mode))
393 mode_label = ['OFF','ON'][dstore.mode]
393 mode_label = ['OFF','ON'][dstore.mode]
394 print('Doctest mode is:', mode_label)
394 print('Doctest mode is:', mode_label)
395
395
396 @line_magic
396 @line_magic
397 def gui(self, parameter_s=''):
397 def gui(self, parameter_s=''):
398 """Enable or disable IPython GUI event loop integration.
398 """Enable or disable IPython GUI event loop integration.
399
399
400 %gui [GUINAME]
400 %gui [GUINAME]
401
401
402 This magic replaces IPython's threaded shells that were activated
402 This magic replaces IPython's threaded shells that were activated
403 using the (pylab/wthread/etc.) command line flags. GUI toolkits
403 using the (pylab/wthread/etc.) command line flags. GUI toolkits
404 can now be enabled at runtime and keyboard
404 can now be enabled at runtime and keyboard
405 interrupts should work without any problems. The following toolkits
405 interrupts should work without any problems. The following toolkits
406 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
406 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
407
407
408 %gui wx # enable wxPython event loop integration
408 %gui wx # enable wxPython event loop integration
409 %gui qt4|qt # enable PyQt4 event loop integration
409 %gui qt4|qt # enable PyQt4 event loop integration
410 %gui gtk # enable PyGTK event loop integration
410 %gui gtk # enable PyGTK event loop integration
411 %gui gtk3 # enable Gtk3 event loop integration
411 %gui gtk3 # enable Gtk3 event loop integration
412 %gui tk # enable Tk event loop integration
412 %gui tk # enable Tk event loop integration
413 %gui osx # enable Cocoa event loop integration
413 %gui osx # enable Cocoa event loop integration
414 # (requires %matplotlib 1.1)
414 # (requires %matplotlib 1.1)
415 %gui # disable all event loop integration
415 %gui # disable all event loop integration
416
416
417 WARNING: after any of these has been called you can simply create
417 WARNING: after any of these has been called you can simply create
418 an application object, but DO NOT start the event loop yourself, as
418 an application object, but DO NOT start the event loop yourself, as
419 we have already handled that.
419 we have already handled that.
420 """
420 """
421 opts, arg = self.parse_options(parameter_s, '')
421 opts, arg = self.parse_options(parameter_s, '')
422 if arg=='': arg = None
422 if arg=='': arg = None
423 try:
423 try:
424 return self.shell.enable_gui(arg)
424 return self.shell.enable_gui(arg)
425 except Exception as e:
425 except Exception as e:
426 # print simple error message, rather than traceback if we can't
426 # print simple error message, rather than traceback if we can't
427 # hook up the GUI
427 # hook up the GUI
428 error(str(e))
428 error(str(e))
429
429
430 @skip_doctest
430 @skip_doctest
431 @line_magic
431 @line_magic
432 def precision(self, s=''):
432 def precision(self, s=''):
433 """Set floating point precision for pretty printing.
433 """Set floating point precision for pretty printing.
434
434
435 Can set either integer precision or a format string.
435 Can set either integer precision or a format string.
436
436
437 If numpy has been imported and precision is an int,
437 If numpy has been imported and precision is an int,
438 numpy display precision will also be set, via ``numpy.set_printoptions``.
438 numpy display precision will also be set, via ``numpy.set_printoptions``.
439
439
440 If no argument is given, defaults will be restored.
440 If no argument is given, defaults will be restored.
441
441
442 Examples
442 Examples
443 --------
443 --------
444 ::
444 ::
445
445
446 In [1]: from math import pi
446 In [1]: from math import pi
447
447
448 In [2]: %precision 3
448 In [2]: %precision 3
449 Out[2]: u'%.3f'
449 Out[2]: u'%.3f'
450
450
451 In [3]: pi
451 In [3]: pi
452 Out[3]: 3.142
452 Out[3]: 3.142
453
453
454 In [4]: %precision %i
454 In [4]: %precision %i
455 Out[4]: u'%i'
455 Out[4]: u'%i'
456
456
457 In [5]: pi
457 In [5]: pi
458 Out[5]: 3
458 Out[5]: 3
459
459
460 In [6]: %precision %e
460 In [6]: %precision %e
461 Out[6]: u'%e'
461 Out[6]: u'%e'
462
462
463 In [7]: pi**10
463 In [7]: pi**10
464 Out[7]: 9.364805e+04
464 Out[7]: 9.364805e+04
465
465
466 In [8]: %precision
466 In [8]: %precision
467 Out[8]: u'%r'
467 Out[8]: u'%r'
468
468
469 In [9]: pi**10
469 In [9]: pi**10
470 Out[9]: 93648.047476082982
470 Out[9]: 93648.047476082982
471 """
471 """
472 ptformatter = self.shell.display_formatter.formatters['text/plain']
472 ptformatter = self.shell.display_formatter.formatters['text/plain']
473 ptformatter.float_precision = s
473 ptformatter.float_precision = s
474 return ptformatter.float_format
474 return ptformatter.float_format
475
475
476 @magic_arguments.magic_arguments()
476 @magic_arguments.magic_arguments()
477 @magic_arguments.argument(
477 @magic_arguments.argument(
478 '-e', '--export', action='store_true', default=False,
478 '-e', '--export', action='store_true', default=False,
479 help='Export IPython history as a notebook. The filename argument '
479 help='Export IPython history as a notebook. The filename argument '
480 'is used to specify the notebook name and format. For example '
480 'is used to specify the notebook name and format. For example '
481 'a filename of notebook.ipynb will result in a notebook name '
481 'a filename of notebook.ipynb will result in a notebook name '
482 'of "notebook" and a format of "xml". Likewise using a ".json" '
482 'of "notebook" and a format of "xml". Likewise using a ".json" '
483 'or ".py" file extension will write the notebook in the json '
483 'or ".py" file extension will write the notebook in the json '
484 'or py formats.'
484 'or py formats.'
485 )
485 )
486 @magic_arguments.argument(
486 @magic_arguments.argument(
487 '-f', '--format',
487 '-f', '--format',
488 help='Convert an existing IPython notebook to a new format. This option '
488 help='Convert an existing IPython notebook to a new format. This option '
489 'specifies the new format and can have the values: xml, json, py. '
489 'specifies the new format and can have the values: xml, json, py. '
490 'The target filename is chosen automatically based on the new '
490 'The target filename is chosen automatically based on the new '
491 'format. The filename argument gives the name of the source file.'
491 'format. The filename argument gives the name of the source file.'
492 )
492 )
493 @magic_arguments.argument(
493 @magic_arguments.argument(
494 'filename', type=unicode,
494 'filename', type=unicode,
495 help='Notebook name or filename'
495 help='Notebook name or filename'
496 )
496 )
497 @line_magic
497 @line_magic
498 def notebook(self, s):
498 def notebook(self, s):
499 """Export and convert IPython notebooks.
499 """Export and convert IPython notebooks.
500
500
501 This function can export the current IPython history to a notebook file
501 This function can export the current IPython history to a notebook file
502 or can convert an existing notebook file into a different format. For
502 or can convert an existing notebook file into a different format. For
503 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
503 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
504 To export the history to "foo.py" do "%notebook -e foo.py". To convert
504 To export the history to "foo.py" do "%notebook -e foo.py". To convert
505 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
505 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
506 formats include (json/ipynb, py).
506 formats include (json/ipynb, py).
507 """
507 """
508 args = magic_arguments.parse_argstring(self.notebook, s)
508 args = magic_arguments.parse_argstring(self.notebook, s)
509
509
510 from IPython.nbformat import current
510 from IPython.nbformat import current
511 args.filename = unquote_filename(args.filename)
511 args.filename = unquote_filename(args.filename)
512 if args.export:
512 if args.export:
513 fname, name, format = current.parse_filename(args.filename)
513 fname, name, format = current.parse_filename(args.filename)
514 cells = []
514 cells = []
515 hist = list(self.shell.history_manager.get_range())
515 hist = list(self.shell.history_manager.get_range())
516 for session, prompt_number, input in hist[:-1]:
516 for session, prompt_number, input in hist[:-1]:
517 cells.append(current.new_code_cell(prompt_number=prompt_number,
517 cells.append(current.new_code_cell(prompt_number=prompt_number,
518 input=input))
518 input=input))
519 worksheet = current.new_worksheet(cells=cells)
519 worksheet = current.new_worksheet(cells=cells)
520 nb = current.new_notebook(name=name,worksheets=[worksheet])
520 nb = current.new_notebook(name=name,worksheets=[worksheet])
521 with io.open(fname, 'w', encoding='utf-8') as f:
521 with io.open(fname, 'w', encoding='utf-8') as f:
522 current.write(nb, f, format);
522 current.write(nb, f, format);
523 elif args.format is not None:
523 elif args.format is not None:
524 old_fname, old_name, old_format = current.parse_filename(args.filename)
524 old_fname, old_name, old_format = current.parse_filename(args.filename)
525 new_format = args.format
525 new_format = args.format
526 if new_format == u'xml':
526 if new_format == u'xml':
527 raise ValueError('Notebooks cannot be written as xml.')
527 raise ValueError('Notebooks cannot be written as xml.')
528 elif new_format == u'ipynb' or new_format == u'json':
528 elif new_format == u'ipynb' or new_format == u'json':
529 new_fname = old_name + u'.ipynb'
529 new_fname = old_name + u'.ipynb'
530 new_format = u'json'
530 new_format = u'json'
531 elif new_format == u'py':
531 elif new_format == u'py':
532 new_fname = old_name + u'.py'
532 new_fname = old_name + u'.py'
533 else:
533 else:
534 raise ValueError('Invalid notebook format: %s' % new_format)
534 raise ValueError('Invalid notebook format: %s' % new_format)
535 with io.open(old_fname, 'r', encoding='utf-8') as f:
535 with io.open(old_fname, 'r', encoding='utf-8') as f:
536 nb = current.read(f, old_format)
536 nb = current.read(f, old_format)
537 with io.open(new_fname, 'w', encoding='utf-8') as f:
537 with io.open(new_fname, 'w', encoding='utf-8') as f:
538 current.write(nb, f, new_format)
538 current.write(nb, f, new_format)
@@ -1,957 +1,956 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """
2 """
3 Prefiltering components.
3 Prefiltering components.
4
4
5 Prefilters transform user input before it is exec'd by Python. These
5 Prefilters transform user input before it is exec'd by Python. These
6 transforms are used to implement additional syntax such as !ls and %magic.
6 transforms are used to implement additional syntax such as !ls and %magic.
7
7
8 Authors:
8 Authors:
9
9
10 * Brian Granger
10 * Brian Granger
11 * Fernando Perez
11 * Fernando Perez
12 * Dan Milstein
12 * Dan Milstein
13 * Ville Vainio
13 * Ville Vainio
14 """
14 """
15
15
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17 # Copyright (C) 2008-2011 The IPython Development Team
17 # Copyright (C) 2008-2011 The IPython Development Team
18 #
18 #
19 # Distributed under the terms of the BSD License. The full license is in
19 # Distributed under the terms of the BSD License. The full license is in
20 # the file COPYING, distributed as part of this software.
20 # the file COPYING, distributed as part of this software.
21 #-----------------------------------------------------------------------------
21 #-----------------------------------------------------------------------------
22
22
23 #-----------------------------------------------------------------------------
23 #-----------------------------------------------------------------------------
24 # Imports
24 # Imports
25 #-----------------------------------------------------------------------------
25 #-----------------------------------------------------------------------------
26
26
27 import __builtin__
27 import __builtin__
28 import codeop
28 import codeop
29 import re
29 import re
30
30
31 from IPython.core.alias import AliasManager
31 from IPython.core.alias import AliasManager
32 from IPython.core.autocall import IPyAutocall
32 from IPython.core.autocall import IPyAutocall
33 from IPython.config.configurable import Configurable
33 from IPython.config.configurable import Configurable
34 from IPython.core.inputsplitter import (
35 ESC_SHELL,
36 ESC_SH_CAP,
37 ESC_HELP,
38 ESC_MAGIC,
39 ESC_MAGIC2,
40 ESC_QUOTE,
41 ESC_QUOTE2,
42 ESC_PAREN,
43 )
34 from IPython.core.macro import Macro
44 from IPython.core.macro import Macro
35 from IPython.core.splitinput import split_user_input, LineInfo
45 from IPython.core.splitinput import split_user_input, LineInfo
36 from IPython.core import page
46 from IPython.core import page
37
47
38 from IPython.utils.traitlets import (
48 from IPython.utils.traitlets import (
39 List, Integer, Any, Unicode, CBool, Bool, Instance, CRegExp
49 List, Integer, Any, Unicode, CBool, Bool, Instance, CRegExp
40 )
50 )
41 from IPython.utils.autoattr import auto_attr
51 from IPython.utils.autoattr import auto_attr
42
52
43 #-----------------------------------------------------------------------------
53 #-----------------------------------------------------------------------------
44 # Global utilities, errors and constants
54 # Global utilities, errors and constants
45 #-----------------------------------------------------------------------------
55 #-----------------------------------------------------------------------------
46
56
47 # Warning, these cannot be changed unless various regular expressions
48 # are updated in a number of places. Not great, but at least we told you.
49 ESC_SHELL = '!'
50 ESC_SH_CAP = '!!'
51 ESC_HELP = '?'
52 ESC_MAGIC = '%'
53 ESC_CELL_MAGIC = ESC_MAGIC * 2
54 ESC_QUOTE = ','
55 ESC_QUOTE2 = ';'
56 ESC_PAREN = '/'
57
58
57
59 class PrefilterError(Exception):
58 class PrefilterError(Exception):
60 pass
59 pass
61
60
62
61
63 # RegExp to identify potential function names
62 # RegExp to identify potential function names
64 re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
63 re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
65
64
66 # RegExp to exclude strings with this start from autocalling. In
65 # RegExp to exclude strings with this start from autocalling. In
67 # particular, all binary operators should be excluded, so that if foo is
66 # particular, all binary operators should be excluded, so that if foo is
68 # callable, foo OP bar doesn't become foo(OP bar), which is invalid. The
67 # callable, foo OP bar doesn't become foo(OP bar), which is invalid. The
69 # characters '!=()' don't need to be checked for, as the checkPythonChars
68 # characters '!=()' don't need to be checked for, as the checkPythonChars
70 # routine explicitely does so, to catch direct calls and rebindings of
69 # routine explicitely does so, to catch direct calls and rebindings of
71 # existing names.
70 # existing names.
72
71
73 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
72 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
74 # it affects the rest of the group in square brackets.
73 # it affects the rest of the group in square brackets.
75 re_exclude_auto = re.compile(r'^[,&^\|\*/\+-]'
74 re_exclude_auto = re.compile(r'^[,&^\|\*/\+-]'
76 r'|^is |^not |^in |^and |^or ')
75 r'|^is |^not |^in |^and |^or ')
77
76
78 # try to catch also methods for stuff in lists/tuples/dicts: off
77 # try to catch also methods for stuff in lists/tuples/dicts: off
79 # (experimental). For this to work, the line_split regexp would need
78 # (experimental). For this to work, the line_split regexp would need
80 # to be modified so it wouldn't break things at '['. That line is
79 # to be modified so it wouldn't break things at '['. That line is
81 # nasty enough that I shouldn't change it until I can test it _well_.
80 # nasty enough that I shouldn't change it until I can test it _well_.
82 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
81 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
83
82
84
83
85 # Handler Check Utilities
84 # Handler Check Utilities
86 def is_shadowed(identifier, ip):
85 def is_shadowed(identifier, ip):
87 """Is the given identifier defined in one of the namespaces which shadow
86 """Is the given identifier defined in one of the namespaces which shadow
88 the alias and magic namespaces? Note that an identifier is different
87 the alias and magic namespaces? Note that an identifier is different
89 than ifun, because it can not contain a '.' character."""
88 than ifun, because it can not contain a '.' character."""
90 # This is much safer than calling ofind, which can change state
89 # This is much safer than calling ofind, which can change state
91 return (identifier in ip.user_ns \
90 return (identifier in ip.user_ns \
92 or identifier in ip.user_global_ns \
91 or identifier in ip.user_global_ns \
93 or identifier in ip.ns_table['builtin'])
92 or identifier in ip.ns_table['builtin'])
94
93
95
94
96 #-----------------------------------------------------------------------------
95 #-----------------------------------------------------------------------------
97 # Main Prefilter manager
96 # Main Prefilter manager
98 #-----------------------------------------------------------------------------
97 #-----------------------------------------------------------------------------
99
98
100
99
101 class PrefilterManager(Configurable):
100 class PrefilterManager(Configurable):
102 """Main prefilter component.
101 """Main prefilter component.
103
102
104 The IPython prefilter is run on all user input before it is run. The
103 The IPython prefilter is run on all user input before it is run. The
105 prefilter consumes lines of input and produces transformed lines of
104 prefilter consumes lines of input and produces transformed lines of
106 input.
105 input.
107
106
108 The iplementation consists of two phases:
107 The iplementation consists of two phases:
109
108
110 1. Transformers
109 1. Transformers
111 2. Checkers and handlers
110 2. Checkers and handlers
112
111
113 Over time, we plan on deprecating the checkers and handlers and doing
112 Over time, we plan on deprecating the checkers and handlers and doing
114 everything in the transformers.
113 everything in the transformers.
115
114
116 The transformers are instances of :class:`PrefilterTransformer` and have
115 The transformers are instances of :class:`PrefilterTransformer` and have
117 a single method :meth:`transform` that takes a line and returns a
116 a single method :meth:`transform` that takes a line and returns a
118 transformed line. The transformation can be accomplished using any
117 transformed line. The transformation can be accomplished using any
119 tool, but our current ones use regular expressions for speed.
118 tool, but our current ones use regular expressions for speed.
120
119
121 After all the transformers have been run, the line is fed to the checkers,
120 After all the transformers have been run, the line is fed to the checkers,
122 which are instances of :class:`PrefilterChecker`. The line is passed to
121 which are instances of :class:`PrefilterChecker`. The line is passed to
123 the :meth:`check` method, which either returns `None` or a
122 the :meth:`check` method, which either returns `None` or a
124 :class:`PrefilterHandler` instance. If `None` is returned, the other
123 :class:`PrefilterHandler` instance. If `None` is returned, the other
125 checkers are tried. If an :class:`PrefilterHandler` instance is returned,
124 checkers are tried. If an :class:`PrefilterHandler` instance is returned,
126 the line is passed to the :meth:`handle` method of the returned
125 the line is passed to the :meth:`handle` method of the returned
127 handler and no further checkers are tried.
126 handler and no further checkers are tried.
128
127
129 Both transformers and checkers have a `priority` attribute, that determines
128 Both transformers and checkers have a `priority` attribute, that determines
130 the order in which they are called. Smaller priorities are tried first.
129 the order in which they are called. Smaller priorities are tried first.
131
130
132 Both transformers and checkers also have `enabled` attribute, which is
131 Both transformers and checkers also have `enabled` attribute, which is
133 a boolean that determines if the instance is used.
132 a boolean that determines if the instance is used.
134
133
135 Users or developers can change the priority or enabled attribute of
134 Users or developers can change the priority or enabled attribute of
136 transformers or checkers, but they must call the :meth:`sort_checkers`
135 transformers or checkers, but they must call the :meth:`sort_checkers`
137 or :meth:`sort_transformers` method after changing the priority.
136 or :meth:`sort_transformers` method after changing the priority.
138 """
137 """
139
138
140 multi_line_specials = CBool(True, config=True)
139 multi_line_specials = CBool(True, config=True)
141 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
140 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
142
141
143 def __init__(self, shell=None, config=None):
142 def __init__(self, shell=None, config=None):
144 super(PrefilterManager, self).__init__(shell=shell, config=config)
143 super(PrefilterManager, self).__init__(shell=shell, config=config)
145 self.shell = shell
144 self.shell = shell
146 self.init_transformers()
145 self.init_transformers()
147 self.init_handlers()
146 self.init_handlers()
148 self.init_checkers()
147 self.init_checkers()
149
148
150 #-------------------------------------------------------------------------
149 #-------------------------------------------------------------------------
151 # API for managing transformers
150 # API for managing transformers
152 #-------------------------------------------------------------------------
151 #-------------------------------------------------------------------------
153
152
154 def init_transformers(self):
153 def init_transformers(self):
155 """Create the default transformers."""
154 """Create the default transformers."""
156 self._transformers = []
155 self._transformers = []
157 for transformer_cls in _default_transformers:
156 for transformer_cls in _default_transformers:
158 transformer_cls(
157 transformer_cls(
159 shell=self.shell, prefilter_manager=self, config=self.config
158 shell=self.shell, prefilter_manager=self, config=self.config
160 )
159 )
161
160
162 def sort_transformers(self):
161 def sort_transformers(self):
163 """Sort the transformers by priority.
162 """Sort the transformers by priority.
164
163
165 This must be called after the priority of a transformer is changed.
164 This must be called after the priority of a transformer is changed.
166 The :meth:`register_transformer` method calls this automatically.
165 The :meth:`register_transformer` method calls this automatically.
167 """
166 """
168 self._transformers.sort(key=lambda x: x.priority)
167 self._transformers.sort(key=lambda x: x.priority)
169
168
170 @property
169 @property
171 def transformers(self):
170 def transformers(self):
172 """Return a list of checkers, sorted by priority."""
171 """Return a list of checkers, sorted by priority."""
173 return self._transformers
172 return self._transformers
174
173
175 def register_transformer(self, transformer):
174 def register_transformer(self, transformer):
176 """Register a transformer instance."""
175 """Register a transformer instance."""
177 if transformer not in self._transformers:
176 if transformer not in self._transformers:
178 self._transformers.append(transformer)
177 self._transformers.append(transformer)
179 self.sort_transformers()
178 self.sort_transformers()
180
179
181 def unregister_transformer(self, transformer):
180 def unregister_transformer(self, transformer):
182 """Unregister a transformer instance."""
181 """Unregister a transformer instance."""
183 if transformer in self._transformers:
182 if transformer in self._transformers:
184 self._transformers.remove(transformer)
183 self._transformers.remove(transformer)
185
184
186 #-------------------------------------------------------------------------
185 #-------------------------------------------------------------------------
187 # API for managing checkers
186 # API for managing checkers
188 #-------------------------------------------------------------------------
187 #-------------------------------------------------------------------------
189
188
190 def init_checkers(self):
189 def init_checkers(self):
191 """Create the default checkers."""
190 """Create the default checkers."""
192 self._checkers = []
191 self._checkers = []
193 for checker in _default_checkers:
192 for checker in _default_checkers:
194 checker(
193 checker(
195 shell=self.shell, prefilter_manager=self, config=self.config
194 shell=self.shell, prefilter_manager=self, config=self.config
196 )
195 )
197
196
198 def sort_checkers(self):
197 def sort_checkers(self):
199 """Sort the checkers by priority.
198 """Sort the checkers by priority.
200
199
201 This must be called after the priority of a checker is changed.
200 This must be called after the priority of a checker is changed.
202 The :meth:`register_checker` method calls this automatically.
201 The :meth:`register_checker` method calls this automatically.
203 """
202 """
204 self._checkers.sort(key=lambda x: x.priority)
203 self._checkers.sort(key=lambda x: x.priority)
205
204
206 @property
205 @property
207 def checkers(self):
206 def checkers(self):
208 """Return a list of checkers, sorted by priority."""
207 """Return a list of checkers, sorted by priority."""
209 return self._checkers
208 return self._checkers
210
209
211 def register_checker(self, checker):
210 def register_checker(self, checker):
212 """Register a checker instance."""
211 """Register a checker instance."""
213 if checker not in self._checkers:
212 if checker not in self._checkers:
214 self._checkers.append(checker)
213 self._checkers.append(checker)
215 self.sort_checkers()
214 self.sort_checkers()
216
215
217 def unregister_checker(self, checker):
216 def unregister_checker(self, checker):
218 """Unregister a checker instance."""
217 """Unregister a checker instance."""
219 if checker in self._checkers:
218 if checker in self._checkers:
220 self._checkers.remove(checker)
219 self._checkers.remove(checker)
221
220
222 #-------------------------------------------------------------------------
221 #-------------------------------------------------------------------------
223 # API for managing checkers
222 # API for managing checkers
224 #-------------------------------------------------------------------------
223 #-------------------------------------------------------------------------
225
224
226 def init_handlers(self):
225 def init_handlers(self):
227 """Create the default handlers."""
226 """Create the default handlers."""
228 self._handlers = {}
227 self._handlers = {}
229 self._esc_handlers = {}
228 self._esc_handlers = {}
230 for handler in _default_handlers:
229 for handler in _default_handlers:
231 handler(
230 handler(
232 shell=self.shell, prefilter_manager=self, config=self.config
231 shell=self.shell, prefilter_manager=self, config=self.config
233 )
232 )
234
233
235 @property
234 @property
236 def handlers(self):
235 def handlers(self):
237 """Return a dict of all the handlers."""
236 """Return a dict of all the handlers."""
238 return self._handlers
237 return self._handlers
239
238
240 def register_handler(self, name, handler, esc_strings):
239 def register_handler(self, name, handler, esc_strings):
241 """Register a handler instance by name with esc_strings."""
240 """Register a handler instance by name with esc_strings."""
242 self._handlers[name] = handler
241 self._handlers[name] = handler
243 for esc_str in esc_strings:
242 for esc_str in esc_strings:
244 self._esc_handlers[esc_str] = handler
243 self._esc_handlers[esc_str] = handler
245
244
246 def unregister_handler(self, name, handler, esc_strings):
245 def unregister_handler(self, name, handler, esc_strings):
247 """Unregister a handler instance by name with esc_strings."""
246 """Unregister a handler instance by name with esc_strings."""
248 try:
247 try:
249 del self._handlers[name]
248 del self._handlers[name]
250 except KeyError:
249 except KeyError:
251 pass
250 pass
252 for esc_str in esc_strings:
251 for esc_str in esc_strings:
253 h = self._esc_handlers.get(esc_str)
252 h = self._esc_handlers.get(esc_str)
254 if h is handler:
253 if h is handler:
255 del self._esc_handlers[esc_str]
254 del self._esc_handlers[esc_str]
256
255
257 def get_handler_by_name(self, name):
256 def get_handler_by_name(self, name):
258 """Get a handler by its name."""
257 """Get a handler by its name."""
259 return self._handlers.get(name)
258 return self._handlers.get(name)
260
259
261 def get_handler_by_esc(self, esc_str):
260 def get_handler_by_esc(self, esc_str):
262 """Get a handler by its escape string."""
261 """Get a handler by its escape string."""
263 return self._esc_handlers.get(esc_str)
262 return self._esc_handlers.get(esc_str)
264
263
265 #-------------------------------------------------------------------------
264 #-------------------------------------------------------------------------
266 # Main prefiltering API
265 # Main prefiltering API
267 #-------------------------------------------------------------------------
266 #-------------------------------------------------------------------------
268
267
269 def prefilter_line_info(self, line_info):
268 def prefilter_line_info(self, line_info):
270 """Prefilter a line that has been converted to a LineInfo object.
269 """Prefilter a line that has been converted to a LineInfo object.
271
270
272 This implements the checker/handler part of the prefilter pipe.
271 This implements the checker/handler part of the prefilter pipe.
273 """
272 """
274 # print "prefilter_line_info: ", line_info
273 # print "prefilter_line_info: ", line_info
275 handler = self.find_handler(line_info)
274 handler = self.find_handler(line_info)
276 return handler.handle(line_info)
275 return handler.handle(line_info)
277
276
278 def find_handler(self, line_info):
277 def find_handler(self, line_info):
279 """Find a handler for the line_info by trying checkers."""
278 """Find a handler for the line_info by trying checkers."""
280 for checker in self.checkers:
279 for checker in self.checkers:
281 if checker.enabled:
280 if checker.enabled:
282 handler = checker.check(line_info)
281 handler = checker.check(line_info)
283 if handler:
282 if handler:
284 return handler
283 return handler
285 return self.get_handler_by_name('normal')
284 return self.get_handler_by_name('normal')
286
285
287 def transform_line(self, line, continue_prompt):
286 def transform_line(self, line, continue_prompt):
288 """Calls the enabled transformers in order of increasing priority."""
287 """Calls the enabled transformers in order of increasing priority."""
289 for transformer in self.transformers:
288 for transformer in self.transformers:
290 if transformer.enabled:
289 if transformer.enabled:
291 line = transformer.transform(line, continue_prompt)
290 line = transformer.transform(line, continue_prompt)
292 return line
291 return line
293
292
294 def prefilter_line(self, line, continue_prompt=False):
293 def prefilter_line(self, line, continue_prompt=False):
295 """Prefilter a single input line as text.
294 """Prefilter a single input line as text.
296
295
297 This method prefilters a single line of text by calling the
296 This method prefilters a single line of text by calling the
298 transformers and then the checkers/handlers.
297 transformers and then the checkers/handlers.
299 """
298 """
300
299
301 # print "prefilter_line: ", line, continue_prompt
300 # print "prefilter_line: ", line, continue_prompt
302 # All handlers *must* return a value, even if it's blank ('').
301 # All handlers *must* return a value, even if it's blank ('').
303
302
304 # save the line away in case we crash, so the post-mortem handler can
303 # save the line away in case we crash, so the post-mortem handler can
305 # record it
304 # record it
306 self.shell._last_input_line = line
305 self.shell._last_input_line = line
307
306
308 if not line:
307 if not line:
309 # Return immediately on purely empty lines, so that if the user
308 # Return immediately on purely empty lines, so that if the user
310 # previously typed some whitespace that started a continuation
309 # previously typed some whitespace that started a continuation
311 # prompt, he can break out of that loop with just an empty line.
310 # prompt, he can break out of that loop with just an empty line.
312 # This is how the default python prompt works.
311 # This is how the default python prompt works.
313 return ''
312 return ''
314
313
315 # At this point, we invoke our transformers.
314 # At this point, we invoke our transformers.
316 if not continue_prompt or (continue_prompt and self.multi_line_specials):
315 if not continue_prompt or (continue_prompt and self.multi_line_specials):
317 line = self.transform_line(line, continue_prompt)
316 line = self.transform_line(line, continue_prompt)
318
317
319 # Now we compute line_info for the checkers and handlers
318 # Now we compute line_info for the checkers and handlers
320 line_info = LineInfo(line, continue_prompt)
319 line_info = LineInfo(line, continue_prompt)
321
320
322 # the input history needs to track even empty lines
321 # the input history needs to track even empty lines
323 stripped = line.strip()
322 stripped = line.strip()
324
323
325 normal_handler = self.get_handler_by_name('normal')
324 normal_handler = self.get_handler_by_name('normal')
326 if not stripped:
325 if not stripped:
327 if not continue_prompt:
326 if not continue_prompt:
328 self.shell.displayhook.prompt_count -= 1
327 self.shell.displayhook.prompt_count -= 1
329
328
330 return normal_handler.handle(line_info)
329 return normal_handler.handle(line_info)
331
330
332 # special handlers are only allowed for single line statements
331 # special handlers are only allowed for single line statements
333 if continue_prompt and not self.multi_line_specials:
332 if continue_prompt and not self.multi_line_specials:
334 return normal_handler.handle(line_info)
333 return normal_handler.handle(line_info)
335
334
336 prefiltered = self.prefilter_line_info(line_info)
335 prefiltered = self.prefilter_line_info(line_info)
337 # print "prefiltered line: %r" % prefiltered
336 # print "prefiltered line: %r" % prefiltered
338 return prefiltered
337 return prefiltered
339
338
340 def prefilter_lines(self, lines, continue_prompt=False):
339 def prefilter_lines(self, lines, continue_prompt=False):
341 """Prefilter multiple input lines of text.
340 """Prefilter multiple input lines of text.
342
341
343 This is the main entry point for prefiltering multiple lines of
342 This is the main entry point for prefiltering multiple lines of
344 input. This simply calls :meth:`prefilter_line` for each line of
343 input. This simply calls :meth:`prefilter_line` for each line of
345 input.
344 input.
346
345
347 This covers cases where there are multiple lines in the user entry,
346 This covers cases where there are multiple lines in the user entry,
348 which is the case when the user goes back to a multiline history
347 which is the case when the user goes back to a multiline history
349 entry and presses enter.
348 entry and presses enter.
350 """
349 """
351 llines = lines.rstrip('\n').split('\n')
350 llines = lines.rstrip('\n').split('\n')
352 # We can get multiple lines in one shot, where multiline input 'blends'
351 # We can get multiple lines in one shot, where multiline input 'blends'
353 # into one line, in cases like recalling from the readline history
352 # into one line, in cases like recalling from the readline history
354 # buffer. We need to make sure that in such cases, we correctly
353 # buffer. We need to make sure that in such cases, we correctly
355 # communicate downstream which line is first and which are continuation
354 # communicate downstream which line is first and which are continuation
356 # ones.
355 # ones.
357 if len(llines) > 1:
356 if len(llines) > 1:
358 out = '\n'.join([self.prefilter_line(line, lnum>0)
357 out = '\n'.join([self.prefilter_line(line, lnum>0)
359 for lnum, line in enumerate(llines) ])
358 for lnum, line in enumerate(llines) ])
360 else:
359 else:
361 out = self.prefilter_line(llines[0], continue_prompt)
360 out = self.prefilter_line(llines[0], continue_prompt)
362
361
363 return out
362 return out
364
363
365 #-----------------------------------------------------------------------------
364 #-----------------------------------------------------------------------------
366 # Prefilter transformers
365 # Prefilter transformers
367 #-----------------------------------------------------------------------------
366 #-----------------------------------------------------------------------------
368
367
369
368
370 class PrefilterTransformer(Configurable):
369 class PrefilterTransformer(Configurable):
371 """Transform a line of user input."""
370 """Transform a line of user input."""
372
371
373 priority = Integer(100, config=True)
372 priority = Integer(100, config=True)
374 # Transformers don't currently use shell or prefilter_manager, but as we
373 # Transformers don't currently use shell or prefilter_manager, but as we
375 # move away from checkers and handlers, they will need them.
374 # move away from checkers and handlers, they will need them.
376 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
375 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
377 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
376 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
378 enabled = Bool(True, config=True)
377 enabled = Bool(True, config=True)
379
378
380 def __init__(self, shell=None, prefilter_manager=None, config=None):
379 def __init__(self, shell=None, prefilter_manager=None, config=None):
381 super(PrefilterTransformer, self).__init__(
380 super(PrefilterTransformer, self).__init__(
382 shell=shell, prefilter_manager=prefilter_manager, config=config
381 shell=shell, prefilter_manager=prefilter_manager, config=config
383 )
382 )
384 self.prefilter_manager.register_transformer(self)
383 self.prefilter_manager.register_transformer(self)
385
384
386 def transform(self, line, continue_prompt):
385 def transform(self, line, continue_prompt):
387 """Transform a line, returning the new one."""
386 """Transform a line, returning the new one."""
388 return None
387 return None
389
388
390 def __repr__(self):
389 def __repr__(self):
391 return "<%s(priority=%r, enabled=%r)>" % (
390 return "<%s(priority=%r, enabled=%r)>" % (
392 self.__class__.__name__, self.priority, self.enabled)
391 self.__class__.__name__, self.priority, self.enabled)
393
392
394
393
395 _assign_system_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
394 _assign_system_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
396 r'\s*=\s*!(?P<cmd>.*)')
395 r'\s*=\s*!(?P<cmd>.*)')
397
396
398
397
399 class AssignSystemTransformer(PrefilterTransformer):
398 class AssignSystemTransformer(PrefilterTransformer):
400 """Handle the `files = !ls` syntax."""
399 """Handle the `files = !ls` syntax."""
401
400
402 priority = Integer(100, config=True)
401 priority = Integer(100, config=True)
403
402
404 def transform(self, line, continue_prompt):
403 def transform(self, line, continue_prompt):
405 m = _assign_system_re.match(line)
404 m = _assign_system_re.match(line)
406 if m is not None:
405 if m is not None:
407 cmd = m.group('cmd')
406 cmd = m.group('cmd')
408 lhs = m.group('lhs')
407 lhs = m.group('lhs')
409 expr = "sc =%s" % cmd
408 expr = "sc =%s" % cmd
410 new_line = '%s = get_ipython().magic(%r)' % (lhs, expr)
409 new_line = '%s = get_ipython().magic(%r)' % (lhs, expr)
411 return new_line
410 return new_line
412 return line
411 return line
413
412
414
413
415 _assign_magic_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
414 _assign_magic_re = re.compile(r'(?P<lhs>(\s*)([\w\.]+)((\s*,\s*[\w\.]+)*))'
416 r'\s*=\s*%(?P<cmd>.*)')
415 r'\s*=\s*%(?P<cmd>.*)')
417
416
418 class AssignMagicTransformer(PrefilterTransformer):
417 class AssignMagicTransformer(PrefilterTransformer):
419 """Handle the `a = %who` syntax."""
418 """Handle the `a = %who` syntax."""
420
419
421 priority = Integer(200, config=True)
420 priority = Integer(200, config=True)
422
421
423 def transform(self, line, continue_prompt):
422 def transform(self, line, continue_prompt):
424 m = _assign_magic_re.match(line)
423 m = _assign_magic_re.match(line)
425 if m is not None:
424 if m is not None:
426 cmd = m.group('cmd')
425 cmd = m.group('cmd')
427 lhs = m.group('lhs')
426 lhs = m.group('lhs')
428 new_line = '%s = get_ipython().magic(%r)' % (lhs, cmd)
427 new_line = '%s = get_ipython().magic(%r)' % (lhs, cmd)
429 return new_line
428 return new_line
430 return line
429 return line
431
430
432
431
433 _classic_prompt_re = re.compile(r'(^[ \t]*>>> |^[ \t]*\.\.\. )')
432 _classic_prompt_re = re.compile(r'(^[ \t]*>>> |^[ \t]*\.\.\. )')
434
433
435 class PyPromptTransformer(PrefilterTransformer):
434 class PyPromptTransformer(PrefilterTransformer):
436 """Handle inputs that start with '>>> ' syntax."""
435 """Handle inputs that start with '>>> ' syntax."""
437
436
438 priority = Integer(50, config=True)
437 priority = Integer(50, config=True)
439
438
440 def transform(self, line, continue_prompt):
439 def transform(self, line, continue_prompt):
441
440
442 if not line or line.isspace() or line.strip() == '...':
441 if not line or line.isspace() or line.strip() == '...':
443 # This allows us to recognize multiple input prompts separated by
442 # This allows us to recognize multiple input prompts separated by
444 # blank lines and pasted in a single chunk, very common when
443 # blank lines and pasted in a single chunk, very common when
445 # pasting doctests or long tutorial passages.
444 # pasting doctests or long tutorial passages.
446 return ''
445 return ''
447 m = _classic_prompt_re.match(line)
446 m = _classic_prompt_re.match(line)
448 if m:
447 if m:
449 return line[len(m.group(0)):]
448 return line[len(m.group(0)):]
450 else:
449 else:
451 return line
450 return line
452
451
453
452
454 _ipy_prompt_re = re.compile(r'(^[ \t]*In \[\d+\]: |^[ \t]*\ \ \ \.\.\.+: )')
453 _ipy_prompt_re = re.compile(r'(^[ \t]*In \[\d+\]: |^[ \t]*\ \ \ \.\.\.+: )')
455
454
456 class IPyPromptTransformer(PrefilterTransformer):
455 class IPyPromptTransformer(PrefilterTransformer):
457 """Handle inputs that start classic IPython prompt syntax."""
456 """Handle inputs that start classic IPython prompt syntax."""
458
457
459 priority = Integer(50, config=True)
458 priority = Integer(50, config=True)
460
459
461 def transform(self, line, continue_prompt):
460 def transform(self, line, continue_prompt):
462
461
463 if not line or line.isspace() or line.strip() == '...':
462 if not line or line.isspace() or line.strip() == '...':
464 # This allows us to recognize multiple input prompts separated by
463 # This allows us to recognize multiple input prompts separated by
465 # blank lines and pasted in a single chunk, very common when
464 # blank lines and pasted in a single chunk, very common when
466 # pasting doctests or long tutorial passages.
465 # pasting doctests or long tutorial passages.
467 return ''
466 return ''
468 m = _ipy_prompt_re.match(line)
467 m = _ipy_prompt_re.match(line)
469 if m:
468 if m:
470 return line[len(m.group(0)):]
469 return line[len(m.group(0)):]
471 else:
470 else:
472 return line
471 return line
473
472
474 #-----------------------------------------------------------------------------
473 #-----------------------------------------------------------------------------
475 # Prefilter checkers
474 # Prefilter checkers
476 #-----------------------------------------------------------------------------
475 #-----------------------------------------------------------------------------
477
476
478
477
479 class PrefilterChecker(Configurable):
478 class PrefilterChecker(Configurable):
480 """Inspect an input line and return a handler for that line."""
479 """Inspect an input line and return a handler for that line."""
481
480
482 priority = Integer(100, config=True)
481 priority = Integer(100, config=True)
483 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
482 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
484 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
483 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
485 enabled = Bool(True, config=True)
484 enabled = Bool(True, config=True)
486
485
487 def __init__(self, shell=None, prefilter_manager=None, config=None):
486 def __init__(self, shell=None, prefilter_manager=None, config=None):
488 super(PrefilterChecker, self).__init__(
487 super(PrefilterChecker, self).__init__(
489 shell=shell, prefilter_manager=prefilter_manager, config=config
488 shell=shell, prefilter_manager=prefilter_manager, config=config
490 )
489 )
491 self.prefilter_manager.register_checker(self)
490 self.prefilter_manager.register_checker(self)
492
491
493 def check(self, line_info):
492 def check(self, line_info):
494 """Inspect line_info and return a handler instance or None."""
493 """Inspect line_info and return a handler instance or None."""
495 return None
494 return None
496
495
497 def __repr__(self):
496 def __repr__(self):
498 return "<%s(priority=%r, enabled=%r)>" % (
497 return "<%s(priority=%r, enabled=%r)>" % (
499 self.__class__.__name__, self.priority, self.enabled)
498 self.__class__.__name__, self.priority, self.enabled)
500
499
501
500
502 class EmacsChecker(PrefilterChecker):
501 class EmacsChecker(PrefilterChecker):
503
502
504 priority = Integer(100, config=True)
503 priority = Integer(100, config=True)
505 enabled = Bool(False, config=True)
504 enabled = Bool(False, config=True)
506
505
507 def check(self, line_info):
506 def check(self, line_info):
508 "Emacs ipython-mode tags certain input lines."
507 "Emacs ipython-mode tags certain input lines."
509 if line_info.line.endswith('# PYTHON-MODE'):
508 if line_info.line.endswith('# PYTHON-MODE'):
510 return self.prefilter_manager.get_handler_by_name('emacs')
509 return self.prefilter_manager.get_handler_by_name('emacs')
511 else:
510 else:
512 return None
511 return None
513
512
514
513
515 class ShellEscapeChecker(PrefilterChecker):
514 class ShellEscapeChecker(PrefilterChecker):
516
515
517 priority = Integer(200, config=True)
516 priority = Integer(200, config=True)
518
517
519 def check(self, line_info):
518 def check(self, line_info):
520 if line_info.line.lstrip().startswith(ESC_SHELL):
519 if line_info.line.lstrip().startswith(ESC_SHELL):
521 return self.prefilter_manager.get_handler_by_name('shell')
520 return self.prefilter_manager.get_handler_by_name('shell')
522
521
523
522
524 class MacroChecker(PrefilterChecker):
523 class MacroChecker(PrefilterChecker):
525
524
526 priority = Integer(250, config=True)
525 priority = Integer(250, config=True)
527
526
528 def check(self, line_info):
527 def check(self, line_info):
529 obj = self.shell.user_ns.get(line_info.ifun)
528 obj = self.shell.user_ns.get(line_info.ifun)
530 if isinstance(obj, Macro):
529 if isinstance(obj, Macro):
531 return self.prefilter_manager.get_handler_by_name('macro')
530 return self.prefilter_manager.get_handler_by_name('macro')
532 else:
531 else:
533 return None
532 return None
534
533
535
534
536 class IPyAutocallChecker(PrefilterChecker):
535 class IPyAutocallChecker(PrefilterChecker):
537
536
538 priority = Integer(300, config=True)
537 priority = Integer(300, config=True)
539
538
540 def check(self, line_info):
539 def check(self, line_info):
541 "Instances of IPyAutocall in user_ns get autocalled immediately"
540 "Instances of IPyAutocall in user_ns get autocalled immediately"
542 obj = self.shell.user_ns.get(line_info.ifun, None)
541 obj = self.shell.user_ns.get(line_info.ifun, None)
543 if isinstance(obj, IPyAutocall):
542 if isinstance(obj, IPyAutocall):
544 obj.set_ip(self.shell)
543 obj.set_ip(self.shell)
545 return self.prefilter_manager.get_handler_by_name('auto')
544 return self.prefilter_manager.get_handler_by_name('auto')
546 else:
545 else:
547 return None
546 return None
548
547
549
548
550 class MultiLineMagicChecker(PrefilterChecker):
549 class MultiLineMagicChecker(PrefilterChecker):
551
550
552 priority = Integer(400, config=True)
551 priority = Integer(400, config=True)
553
552
554 def check(self, line_info):
553 def check(self, line_info):
555 "Allow ! and !! in multi-line statements if multi_line_specials is on"
554 "Allow ! and !! in multi-line statements if multi_line_specials is on"
556 # Note that this one of the only places we check the first character of
555 # Note that this one of the only places we check the first character of
557 # ifun and *not* the pre_char. Also note that the below test matches
556 # ifun and *not* the pre_char. Also note that the below test matches
558 # both ! and !!.
557 # both ! and !!.
559 if line_info.continue_prompt \
558 if line_info.continue_prompt \
560 and self.prefilter_manager.multi_line_specials:
559 and self.prefilter_manager.multi_line_specials:
561 if line_info.esc == ESC_MAGIC:
560 if line_info.esc == ESC_MAGIC:
562 return self.prefilter_manager.get_handler_by_name('magic')
561 return self.prefilter_manager.get_handler_by_name('magic')
563 else:
562 else:
564 return None
563 return None
565
564
566
565
567 class EscCharsChecker(PrefilterChecker):
566 class EscCharsChecker(PrefilterChecker):
568
567
569 priority = Integer(500, config=True)
568 priority = Integer(500, config=True)
570
569
571 def check(self, line_info):
570 def check(self, line_info):
572 """Check for escape character and return either a handler to handle it,
571 """Check for escape character and return either a handler to handle it,
573 or None if there is no escape char."""
572 or None if there is no escape char."""
574 if line_info.line[-1] == ESC_HELP \
573 if line_info.line[-1] == ESC_HELP \
575 and line_info.esc != ESC_SHELL \
574 and line_info.esc != ESC_SHELL \
576 and line_info.esc != ESC_SH_CAP:
575 and line_info.esc != ESC_SH_CAP:
577 # the ? can be at the end, but *not* for either kind of shell escape,
576 # the ? can be at the end, but *not* for either kind of shell escape,
578 # because a ? can be a vaild final char in a shell cmd
577 # because a ? can be a vaild final char in a shell cmd
579 return self.prefilter_manager.get_handler_by_name('help')
578 return self.prefilter_manager.get_handler_by_name('help')
580 else:
579 else:
581 if line_info.pre:
580 if line_info.pre:
582 return None
581 return None
583 # This returns None like it should if no handler exists
582 # This returns None like it should if no handler exists
584 return self.prefilter_manager.get_handler_by_esc(line_info.esc)
583 return self.prefilter_manager.get_handler_by_esc(line_info.esc)
585
584
586
585
587 class AssignmentChecker(PrefilterChecker):
586 class AssignmentChecker(PrefilterChecker):
588
587
589 priority = Integer(600, config=True)
588 priority = Integer(600, config=True)
590
589
591 def check(self, line_info):
590 def check(self, line_info):
592 """Check to see if user is assigning to a var for the first time, in
591 """Check to see if user is assigning to a var for the first time, in
593 which case we want to avoid any sort of automagic / autocall games.
592 which case we want to avoid any sort of automagic / autocall games.
594
593
595 This allows users to assign to either alias or magic names true python
594 This allows users to assign to either alias or magic names true python
596 variables (the magic/alias systems always take second seat to true
595 variables (the magic/alias systems always take second seat to true
597 python code). E.g. ls='hi', or ls,that=1,2"""
596 python code). E.g. ls='hi', or ls,that=1,2"""
598 if line_info.the_rest:
597 if line_info.the_rest:
599 if line_info.the_rest[0] in '=,':
598 if line_info.the_rest[0] in '=,':
600 return self.prefilter_manager.get_handler_by_name('normal')
599 return self.prefilter_manager.get_handler_by_name('normal')
601 else:
600 else:
602 return None
601 return None
603
602
604
603
605 class AutoMagicChecker(PrefilterChecker):
604 class AutoMagicChecker(PrefilterChecker):
606
605
607 priority = Integer(700, config=True)
606 priority = Integer(700, config=True)
608
607
609 def check(self, line_info):
608 def check(self, line_info):
610 """If the ifun is magic, and automagic is on, run it. Note: normal,
609 """If the ifun is magic, and automagic is on, run it. Note: normal,
611 non-auto magic would already have been triggered via '%' in
610 non-auto magic would already have been triggered via '%' in
612 check_esc_chars. This just checks for automagic. Also, before
611 check_esc_chars. This just checks for automagic. Also, before
613 triggering the magic handler, make sure that there is nothing in the
612 triggering the magic handler, make sure that there is nothing in the
614 user namespace which could shadow it."""
613 user namespace which could shadow it."""
615 if not self.shell.automagic or not self.shell.find_magic(line_info.ifun):
614 if not self.shell.automagic or not self.shell.find_magic(line_info.ifun):
616 return None
615 return None
617
616
618 # We have a likely magic method. Make sure we should actually call it.
617 # We have a likely magic method. Make sure we should actually call it.
619 if line_info.continue_prompt and not self.prefilter_manager.multi_line_specials:
618 if line_info.continue_prompt and not self.prefilter_manager.multi_line_specials:
620 return None
619 return None
621
620
622 head = line_info.ifun.split('.',1)[0]
621 head = line_info.ifun.split('.',1)[0]
623 if is_shadowed(head, self.shell):
622 if is_shadowed(head, self.shell):
624 return None
623 return None
625
624
626 return self.prefilter_manager.get_handler_by_name('magic')
625 return self.prefilter_manager.get_handler_by_name('magic')
627
626
628
627
629 class AliasChecker(PrefilterChecker):
628 class AliasChecker(PrefilterChecker):
630
629
631 priority = Integer(800, config=True)
630 priority = Integer(800, config=True)
632
631
633 def check(self, line_info):
632 def check(self, line_info):
634 "Check if the initital identifier on the line is an alias."
633 "Check if the initital identifier on the line is an alias."
635 # Note: aliases can not contain '.'
634 # Note: aliases can not contain '.'
636 head = line_info.ifun.split('.',1)[0]
635 head = line_info.ifun.split('.',1)[0]
637 if line_info.ifun not in self.shell.alias_manager \
636 if line_info.ifun not in self.shell.alias_manager \
638 or head not in self.shell.alias_manager \
637 or head not in self.shell.alias_manager \
639 or is_shadowed(head, self.shell):
638 or is_shadowed(head, self.shell):
640 return None
639 return None
641
640
642 return self.prefilter_manager.get_handler_by_name('alias')
641 return self.prefilter_manager.get_handler_by_name('alias')
643
642
644
643
645 class PythonOpsChecker(PrefilterChecker):
644 class PythonOpsChecker(PrefilterChecker):
646
645
647 priority = Integer(900, config=True)
646 priority = Integer(900, config=True)
648
647
649 def check(self, line_info):
648 def check(self, line_info):
650 """If the 'rest' of the line begins with a function call or pretty much
649 """If the 'rest' of the line begins with a function call or pretty much
651 any python operator, we should simply execute the line (regardless of
650 any python operator, we should simply execute the line (regardless of
652 whether or not there's a possible autocall expansion). This avoids
651 whether or not there's a possible autocall expansion). This avoids
653 spurious (and very confusing) geattr() accesses."""
652 spurious (and very confusing) geattr() accesses."""
654 if line_info.the_rest and line_info.the_rest[0] in '!=()<>,+*/%^&|':
653 if line_info.the_rest and line_info.the_rest[0] in '!=()<>,+*/%^&|':
655 return self.prefilter_manager.get_handler_by_name('normal')
654 return self.prefilter_manager.get_handler_by_name('normal')
656 else:
655 else:
657 return None
656 return None
658
657
659
658
660 class AutocallChecker(PrefilterChecker):
659 class AutocallChecker(PrefilterChecker):
661
660
662 priority = Integer(1000, config=True)
661 priority = Integer(1000, config=True)
663
662
664 function_name_regexp = CRegExp(re_fun_name, config=True,
663 function_name_regexp = CRegExp(re_fun_name, config=True,
665 help="RegExp to identify potential function names.")
664 help="RegExp to identify potential function names.")
666 exclude_regexp = CRegExp(re_exclude_auto, config=True,
665 exclude_regexp = CRegExp(re_exclude_auto, config=True,
667 help="RegExp to exclude strings with this start from autocalling.")
666 help="RegExp to exclude strings with this start from autocalling.")
668
667
669 def check(self, line_info):
668 def check(self, line_info):
670 "Check if the initial word/function is callable and autocall is on."
669 "Check if the initial word/function is callable and autocall is on."
671 if not self.shell.autocall:
670 if not self.shell.autocall:
672 return None
671 return None
673
672
674 oinfo = line_info.ofind(self.shell) # This can mutate state via getattr
673 oinfo = line_info.ofind(self.shell) # This can mutate state via getattr
675 if not oinfo['found']:
674 if not oinfo['found']:
676 return None
675 return None
677
676
678 if callable(oinfo['obj']) \
677 if callable(oinfo['obj']) \
679 and (not self.exclude_regexp.match(line_info.the_rest)) \
678 and (not self.exclude_regexp.match(line_info.the_rest)) \
680 and self.function_name_regexp.match(line_info.ifun):
679 and self.function_name_regexp.match(line_info.ifun):
681 return self.prefilter_manager.get_handler_by_name('auto')
680 return self.prefilter_manager.get_handler_by_name('auto')
682 else:
681 else:
683 return None
682 return None
684
683
685
684
686 #-----------------------------------------------------------------------------
685 #-----------------------------------------------------------------------------
687 # Prefilter handlers
686 # Prefilter handlers
688 #-----------------------------------------------------------------------------
687 #-----------------------------------------------------------------------------
689
688
690
689
691 class PrefilterHandler(Configurable):
690 class PrefilterHandler(Configurable):
692
691
693 handler_name = Unicode('normal')
692 handler_name = Unicode('normal')
694 esc_strings = List([])
693 esc_strings = List([])
695 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
694 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
696 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
695 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
697
696
698 def __init__(self, shell=None, prefilter_manager=None, config=None):
697 def __init__(self, shell=None, prefilter_manager=None, config=None):
699 super(PrefilterHandler, self).__init__(
698 super(PrefilterHandler, self).__init__(
700 shell=shell, prefilter_manager=prefilter_manager, config=config
699 shell=shell, prefilter_manager=prefilter_manager, config=config
701 )
700 )
702 self.prefilter_manager.register_handler(
701 self.prefilter_manager.register_handler(
703 self.handler_name,
702 self.handler_name,
704 self,
703 self,
705 self.esc_strings
704 self.esc_strings
706 )
705 )
707
706
708 def handle(self, line_info):
707 def handle(self, line_info):
709 # print "normal: ", line_info
708 # print "normal: ", line_info
710 """Handle normal input lines. Use as a template for handlers."""
709 """Handle normal input lines. Use as a template for handlers."""
711
710
712 # With autoindent on, we need some way to exit the input loop, and I
711 # With autoindent on, we need some way to exit the input loop, and I
713 # don't want to force the user to have to backspace all the way to
712 # don't want to force the user to have to backspace all the way to
714 # clear the line. The rule will be in this case, that either two
713 # clear the line. The rule will be in this case, that either two
715 # lines of pure whitespace in a row, or a line of pure whitespace but
714 # lines of pure whitespace in a row, or a line of pure whitespace but
716 # of a size different to the indent level, will exit the input loop.
715 # of a size different to the indent level, will exit the input loop.
717 line = line_info.line
716 line = line_info.line
718 continue_prompt = line_info.continue_prompt
717 continue_prompt = line_info.continue_prompt
719
718
720 if (continue_prompt and
719 if (continue_prompt and
721 self.shell.autoindent and
720 self.shell.autoindent and
722 line.isspace() and
721 line.isspace() and
723 0 < abs(len(line) - self.shell.indent_current_nsp) <= 2):
722 0 < abs(len(line) - self.shell.indent_current_nsp) <= 2):
724 line = ''
723 line = ''
725
724
726 return line
725 return line
727
726
728 def __str__(self):
727 def __str__(self):
729 return "<%s(name=%s)>" % (self.__class__.__name__, self.handler_name)
728 return "<%s(name=%s)>" % (self.__class__.__name__, self.handler_name)
730
729
731
730
732 class AliasHandler(PrefilterHandler):
731 class AliasHandler(PrefilterHandler):
733
732
734 handler_name = Unicode('alias')
733 handler_name = Unicode('alias')
735
734
736 def handle(self, line_info):
735 def handle(self, line_info):
737 """Handle alias input lines. """
736 """Handle alias input lines. """
738 transformed = self.shell.alias_manager.expand_aliases(line_info.ifun,line_info.the_rest)
737 transformed = self.shell.alias_manager.expand_aliases(line_info.ifun,line_info.the_rest)
739 # pre is needed, because it carries the leading whitespace. Otherwise
738 # pre is needed, because it carries the leading whitespace. Otherwise
740 # aliases won't work in indented sections.
739 # aliases won't work in indented sections.
741 line_out = '%sget_ipython().system(%r)' % (line_info.pre_whitespace, transformed)
740 line_out = '%sget_ipython().system(%r)' % (line_info.pre_whitespace, transformed)
742
741
743 return line_out
742 return line_out
744
743
745
744
746 class ShellEscapeHandler(PrefilterHandler):
745 class ShellEscapeHandler(PrefilterHandler):
747
746
748 handler_name = Unicode('shell')
747 handler_name = Unicode('shell')
749 esc_strings = List([ESC_SHELL, ESC_SH_CAP])
748 esc_strings = List([ESC_SHELL, ESC_SH_CAP])
750
749
751 def handle(self, line_info):
750 def handle(self, line_info):
752 """Execute the line in a shell, empty return value"""
751 """Execute the line in a shell, empty return value"""
753 magic_handler = self.prefilter_manager.get_handler_by_name('magic')
752 magic_handler = self.prefilter_manager.get_handler_by_name('magic')
754
753
755 line = line_info.line
754 line = line_info.line
756 if line.lstrip().startswith(ESC_SH_CAP):
755 if line.lstrip().startswith(ESC_SH_CAP):
757 # rewrite LineInfo's line, ifun and the_rest to properly hold the
756 # rewrite LineInfo's line, ifun and the_rest to properly hold the
758 # call to %sx and the actual command to be executed, so
757 # call to %sx and the actual command to be executed, so
759 # handle_magic can work correctly. Note that this works even if
758 # handle_magic can work correctly. Note that this works even if
760 # the line is indented, so it handles multi_line_specials
759 # the line is indented, so it handles multi_line_specials
761 # properly.
760 # properly.
762 new_rest = line.lstrip()[2:]
761 new_rest = line.lstrip()[2:]
763 line_info.line = '%ssx %s' % (ESC_MAGIC, new_rest)
762 line_info.line = '%ssx %s' % (ESC_MAGIC, new_rest)
764 line_info.ifun = 'sx'
763 line_info.ifun = 'sx'
765 line_info.the_rest = new_rest
764 line_info.the_rest = new_rest
766 return magic_handler.handle(line_info)
765 return magic_handler.handle(line_info)
767 else:
766 else:
768 cmd = line.lstrip().lstrip(ESC_SHELL)
767 cmd = line.lstrip().lstrip(ESC_SHELL)
769 line_out = '%sget_ipython().system(%r)' % (line_info.pre_whitespace, cmd)
768 line_out = '%sget_ipython().system(%r)' % (line_info.pre_whitespace, cmd)
770 return line_out
769 return line_out
771
770
772
771
773 class MacroHandler(PrefilterHandler):
772 class MacroHandler(PrefilterHandler):
774 handler_name = Unicode("macro")
773 handler_name = Unicode("macro")
775
774
776 def handle(self, line_info):
775 def handle(self, line_info):
777 obj = self.shell.user_ns.get(line_info.ifun)
776 obj = self.shell.user_ns.get(line_info.ifun)
778 pre_space = line_info.pre_whitespace
777 pre_space = line_info.pre_whitespace
779 line_sep = "\n" + pre_space
778 line_sep = "\n" + pre_space
780 return pre_space + line_sep.join(obj.value.splitlines())
779 return pre_space + line_sep.join(obj.value.splitlines())
781
780
782
781
783 class MagicHandler(PrefilterHandler):
782 class MagicHandler(PrefilterHandler):
784
783
785 handler_name = Unicode('magic')
784 handler_name = Unicode('magic')
786 esc_strings = List([ESC_MAGIC])
785 esc_strings = List([ESC_MAGIC])
787
786
788 def handle(self, line_info):
787 def handle(self, line_info):
789 """Execute magic functions."""
788 """Execute magic functions."""
790 ifun = line_info.ifun
789 ifun = line_info.ifun
791 the_rest = line_info.the_rest
790 the_rest = line_info.the_rest
792 cmd = '%sget_ipython().magic(%r)' % (line_info.pre_whitespace,
791 cmd = '%sget_ipython().magic(%r)' % (line_info.pre_whitespace,
793 (ifun + " " + the_rest))
792 (ifun + " " + the_rest))
794 return cmd
793 return cmd
795
794
796
795
797 class AutoHandler(PrefilterHandler):
796 class AutoHandler(PrefilterHandler):
798
797
799 handler_name = Unicode('auto')
798 handler_name = Unicode('auto')
800 esc_strings = List([ESC_PAREN, ESC_QUOTE, ESC_QUOTE2])
799 esc_strings = List([ESC_PAREN, ESC_QUOTE, ESC_QUOTE2])
801
800
802 def handle(self, line_info):
801 def handle(self, line_info):
803 """Handle lines which can be auto-executed, quoting if requested."""
802 """Handle lines which can be auto-executed, quoting if requested."""
804 line = line_info.line
803 line = line_info.line
805 ifun = line_info.ifun
804 ifun = line_info.ifun
806 the_rest = line_info.the_rest
805 the_rest = line_info.the_rest
807 pre = line_info.pre
806 pre = line_info.pre
808 esc = line_info.esc
807 esc = line_info.esc
809 continue_prompt = line_info.continue_prompt
808 continue_prompt = line_info.continue_prompt
810 obj = line_info.ofind(self.shell)['obj']
809 obj = line_info.ofind(self.shell)['obj']
811 #print 'pre <%s> ifun <%s> rest <%s>' % (pre,ifun,the_rest) # dbg
810 #print 'pre <%s> ifun <%s> rest <%s>' % (pre,ifun,the_rest) # dbg
812
811
813 # This should only be active for single-line input!
812 # This should only be active for single-line input!
814 if continue_prompt:
813 if continue_prompt:
815 return line
814 return line
816
815
817 force_auto = isinstance(obj, IPyAutocall)
816 force_auto = isinstance(obj, IPyAutocall)
818
817
819 # User objects sometimes raise exceptions on attribute access other
818 # User objects sometimes raise exceptions on attribute access other
820 # than AttributeError (we've seen it in the past), so it's safest to be
819 # than AttributeError (we've seen it in the past), so it's safest to be
821 # ultra-conservative here and catch all.
820 # ultra-conservative here and catch all.
822 try:
821 try:
823 auto_rewrite = obj.rewrite
822 auto_rewrite = obj.rewrite
824 except Exception:
823 except Exception:
825 auto_rewrite = True
824 auto_rewrite = True
826
825
827 if esc == ESC_QUOTE:
826 if esc == ESC_QUOTE:
828 # Auto-quote splitting on whitespace
827 # Auto-quote splitting on whitespace
829 newcmd = '%s("%s")' % (ifun,'", "'.join(the_rest.split()) )
828 newcmd = '%s("%s")' % (ifun,'", "'.join(the_rest.split()) )
830 elif esc == ESC_QUOTE2:
829 elif esc == ESC_QUOTE2:
831 # Auto-quote whole string
830 # Auto-quote whole string
832 newcmd = '%s("%s")' % (ifun,the_rest)
831 newcmd = '%s("%s")' % (ifun,the_rest)
833 elif esc == ESC_PAREN:
832 elif esc == ESC_PAREN:
834 newcmd = '%s(%s)' % (ifun,",".join(the_rest.split()))
833 newcmd = '%s(%s)' % (ifun,",".join(the_rest.split()))
835 else:
834 else:
836 # Auto-paren.
835 # Auto-paren.
837 if force_auto:
836 if force_auto:
838 # Don't rewrite if it is already a call.
837 # Don't rewrite if it is already a call.
839 do_rewrite = not the_rest.startswith('(')
838 do_rewrite = not the_rest.startswith('(')
840 else:
839 else:
841 if not the_rest:
840 if not the_rest:
842 # We only apply it to argument-less calls if the autocall
841 # We only apply it to argument-less calls if the autocall
843 # parameter is set to 2.
842 # parameter is set to 2.
844 do_rewrite = (self.shell.autocall >= 2)
843 do_rewrite = (self.shell.autocall >= 2)
845 elif the_rest.startswith('[') and hasattr(obj, '__getitem__'):
844 elif the_rest.startswith('[') and hasattr(obj, '__getitem__'):
846 # Don't autocall in this case: item access for an object
845 # Don't autocall in this case: item access for an object
847 # which is BOTH callable and implements __getitem__.
846 # which is BOTH callable and implements __getitem__.
848 do_rewrite = False
847 do_rewrite = False
849 else:
848 else:
850 do_rewrite = True
849 do_rewrite = True
851
850
852 # Figure out the rewritten command
851 # Figure out the rewritten command
853 if do_rewrite:
852 if do_rewrite:
854 if the_rest.endswith(';'):
853 if the_rest.endswith(';'):
855 newcmd = '%s(%s);' % (ifun.rstrip(),the_rest[:-1])
854 newcmd = '%s(%s);' % (ifun.rstrip(),the_rest[:-1])
856 else:
855 else:
857 newcmd = '%s(%s)' % (ifun.rstrip(), the_rest)
856 newcmd = '%s(%s)' % (ifun.rstrip(), the_rest)
858 else:
857 else:
859 normal_handler = self.prefilter_manager.get_handler_by_name('normal')
858 normal_handler = self.prefilter_manager.get_handler_by_name('normal')
860 return normal_handler.handle(line_info)
859 return normal_handler.handle(line_info)
861
860
862 # Display the rewritten call
861 # Display the rewritten call
863 if auto_rewrite:
862 if auto_rewrite:
864 self.shell.auto_rewrite_input(newcmd)
863 self.shell.auto_rewrite_input(newcmd)
865
864
866 return newcmd
865 return newcmd
867
866
868
867
869 class HelpHandler(PrefilterHandler):
868 class HelpHandler(PrefilterHandler):
870
869
871 handler_name = Unicode('help')
870 handler_name = Unicode('help')
872 esc_strings = List([ESC_HELP])
871 esc_strings = List([ESC_HELP])
873
872
874 def handle(self, line_info):
873 def handle(self, line_info):
875 """Try to get some help for the object.
874 """Try to get some help for the object.
876
875
877 obj? or ?obj -> basic information.
876 obj? or ?obj -> basic information.
878 obj?? or ??obj -> more details.
877 obj?? or ??obj -> more details.
879 """
878 """
880 normal_handler = self.prefilter_manager.get_handler_by_name('normal')
879 normal_handler = self.prefilter_manager.get_handler_by_name('normal')
881 line = line_info.line
880 line = line_info.line
882 # We need to make sure that we don't process lines which would be
881 # We need to make sure that we don't process lines which would be
883 # otherwise valid python, such as "x=1 # what?"
882 # otherwise valid python, such as "x=1 # what?"
884 try:
883 try:
885 codeop.compile_command(line)
884 codeop.compile_command(line)
886 except SyntaxError:
885 except SyntaxError:
887 # We should only handle as help stuff which is NOT valid syntax
886 # We should only handle as help stuff which is NOT valid syntax
888 if line[0]==ESC_HELP:
887 if line[0]==ESC_HELP:
889 line = line[1:]
888 line = line[1:]
890 elif line[-1]==ESC_HELP:
889 elif line[-1]==ESC_HELP:
891 line = line[:-1]
890 line = line[:-1]
892 if line:
891 if line:
893 #print 'line:<%r>' % line # dbg
892 #print 'line:<%r>' % line # dbg
894 self.shell.magic('pinfo %s' % line_info.ifun)
893 self.shell.magic('pinfo %s' % line_info.ifun)
895 else:
894 else:
896 self.shell.show_usage()
895 self.shell.show_usage()
897 return '' # Empty string is needed here!
896 return '' # Empty string is needed here!
898 except:
897 except:
899 raise
898 raise
900 # Pass any other exceptions through to the normal handler
899 # Pass any other exceptions through to the normal handler
901 return normal_handler.handle(line_info)
900 return normal_handler.handle(line_info)
902 else:
901 else:
903 # If the code compiles ok, we should handle it normally
902 # If the code compiles ok, we should handle it normally
904 return normal_handler.handle(line_info)
903 return normal_handler.handle(line_info)
905
904
906
905
907 class EmacsHandler(PrefilterHandler):
906 class EmacsHandler(PrefilterHandler):
908
907
909 handler_name = Unicode('emacs')
908 handler_name = Unicode('emacs')
910 esc_strings = List([])
909 esc_strings = List([])
911
910
912 def handle(self, line_info):
911 def handle(self, line_info):
913 """Handle input lines marked by python-mode."""
912 """Handle input lines marked by python-mode."""
914
913
915 # Currently, nothing is done. Later more functionality can be added
914 # Currently, nothing is done. Later more functionality can be added
916 # here if needed.
915 # here if needed.
917
916
918 # The input cache shouldn't be updated
917 # The input cache shouldn't be updated
919 return line_info.line
918 return line_info.line
920
919
921
920
922 #-----------------------------------------------------------------------------
921 #-----------------------------------------------------------------------------
923 # Defaults
922 # Defaults
924 #-----------------------------------------------------------------------------
923 #-----------------------------------------------------------------------------
925
924
926
925
927 _default_transformers = [
926 _default_transformers = [
928 AssignSystemTransformer,
927 AssignSystemTransformer,
929 AssignMagicTransformer,
928 AssignMagicTransformer,
930 PyPromptTransformer,
929 PyPromptTransformer,
931 IPyPromptTransformer,
930 IPyPromptTransformer,
932 ]
931 ]
933
932
934 _default_checkers = [
933 _default_checkers = [
935 EmacsChecker,
934 EmacsChecker,
936 ShellEscapeChecker,
935 ShellEscapeChecker,
937 MacroChecker,
936 MacroChecker,
938 IPyAutocallChecker,
937 IPyAutocallChecker,
939 MultiLineMagicChecker,
938 MultiLineMagicChecker,
940 EscCharsChecker,
939 EscCharsChecker,
941 AssignmentChecker,
940 AssignmentChecker,
942 AutoMagicChecker,
941 AutoMagicChecker,
943 AliasChecker,
942 AliasChecker,
944 PythonOpsChecker,
943 PythonOpsChecker,
945 AutocallChecker
944 AutocallChecker
946 ]
945 ]
947
946
948 _default_handlers = [
947 _default_handlers = [
949 PrefilterHandler,
948 PrefilterHandler,
950 AliasHandler,
949 AliasHandler,
951 ShellEscapeHandler,
950 ShellEscapeHandler,
952 MacroHandler,
951 MacroHandler,
953 MagicHandler,
952 MagicHandler,
954 AutoHandler,
953 AutoHandler,
955 HelpHandler,
954 HelpHandler,
956 EmacsHandler
955 EmacsHandler
957 ]
956 ]
General Comments 0
You need to be logged in to leave comments. Login now