##// END OF EJS Templates
show UsageError for cell magics mid-cell
MinRK -
Show More
@@ -3,6 +3,7 b' import functools'
3 import re
3 import re
4 from StringIO import StringIO
4 from StringIO import StringIO
5
5
6 from IPython.core.error import UsageError
6 from IPython.core.splitinput import LineInfo
7 from IPython.core.splitinput import LineInfo
7 from IPython.utils import tokenize2
8 from IPython.utils import tokenize2
8 from IPython.utils.openpy import cookie_comment_re
9 from IPython.utils.openpy import cookie_comment_re
@@ -227,9 +228,20 b' def _tr_help(line_info):'
227 def _tr_magic(line_info):
228 def _tr_magic(line_info):
228 "Translate lines escaped with: %"
229 "Translate lines escaped with: %"
229 tpl = '%sget_ipython().magic(%r)'
230 tpl = '%sget_ipython().magic(%r)'
231 if line_info.line.startswith(ESC_MAGIC2):
232 return line_info.line
230 cmd = ' '.join([line_info.ifun, line_info.the_rest]).strip()
233 cmd = ' '.join([line_info.ifun, line_info.the_rest]).strip()
231 return tpl % (line_info.pre, cmd)
234 return tpl % (line_info.pre, cmd)
232
235
236 def _tr_cellmagic(line_info):
237 """Translate lines escaped with %%
238
239 Only happens when cell magics are mid-cell, which is an error.
240 """
241 raise UsageError("Cannot call cell magics (%s%s) mid-cell" %
242 (ESC_MAGIC2, line_info.ifun)
243 )
244
233 def _tr_quote(line_info):
245 def _tr_quote(line_info):
234 "Translate lines escaped with: ,"
246 "Translate lines escaped with: ,"
235 return '%s%s("%s")' % (line_info.pre, line_info.ifun,
247 return '%s%s("%s")' % (line_info.pre, line_info.ifun,
@@ -250,6 +262,7 b' tr = { ESC_SHELL : _tr_system,'
250 ESC_HELP : _tr_help,
262 ESC_HELP : _tr_help,
251 ESC_HELP2 : _tr_help,
263 ESC_HELP2 : _tr_help,
252 ESC_MAGIC : _tr_magic,
264 ESC_MAGIC : _tr_magic,
265 ESC_MAGIC2 : _tr_cellmagic,
253 ESC_QUOTE : _tr_quote,
266 ESC_QUOTE : _tr_quote,
254 ESC_QUOTE2 : _tr_quote2,
267 ESC_QUOTE2 : _tr_quote2,
255 ESC_PAREN : _tr_paren }
268 ESC_PAREN : _tr_paren }
@@ -2593,10 +2593,14 b' class InteractiveShell(SingletonConfigurable):'
2593
2593
2594 if silent:
2594 if silent:
2595 store_history = False
2595 store_history = False
2596
2596
2597 self.input_transformer_manager.push(raw_cell)
2597 try:
2598 cell = self.input_transformer_manager.source_reset()
2598 self.input_transformer_manager.push(raw_cell)
2599
2599 cell = self.input_transformer_manager.source_reset()
2600 except UsageError:
2601 self.showtraceback()
2602 return
2603
2600 # Our own compiler remembers the __future__ environment. If we want to
2604 # Our own compiler remembers the __future__ environment. If we want to
2601 # run code with a separate __future__ environment, use the default
2605 # run code with a separate __future__ environment, use the default
2602 # compiler
2606 # compiler
@@ -43,7 +43,7 b' from IPython.utils.encoding import get_stream_enc'
43
43
44 line_split = re.compile("""
44 line_split = re.compile("""
45 ^(\s*) # any leading space
45 ^(\s*) # any leading space
46 ([,;/%]|!!?|\?\??)? # escape character or characters
46 ([,;/]|%%?|!!?|\?\??)? # escape character or characters
47 \s*(%{0,2}[\w\.\*]*) # function/method, possibly with leading %
47 \s*(%{0,2}[\w\.\*]*) # function/method, possibly with leading %
48 # to correctly treat things like '?%magic'
48 # to correctly treat things like '?%magic'
49 (.*?$|$) # rest of line
49 (.*?$|$) # rest of line
General Comments 0
You need to be logged in to leave comments. Login now