##// END OF EJS Templates
bug: additional spaces while parsing timeit-magic options
Aditya Sathe -
Show More
@@ -618,6 +618,9 b' class Magics(Configurable):'
618 posix = kw.get('posix', os.name == 'posix')
618 posix = kw.get('posix', os.name == 'posix')
619 strict = kw.get('strict', True)
619 strict = kw.get('strict', True)
620
620
621 preserve_non_opts = kw.get('preserve_non_opts', False)
622 remainder_arg_str = arg_str
623
621 # Check if we have more than one argument to warrant extra processing:
624 # Check if we have more than one argument to warrant extra processing:
622 odict = {} # Dictionary with options
625 odict = {} # Dictionary with options
623 args = arg_str.split()
626 args = arg_str.split()
@@ -632,6 +635,11 b' class Magics(Configurable):'
632 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
635 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
633 " ".join(long_opts))) from e
636 " ".join(long_opts))) from e
634 for o,a in opts:
637 for o,a in opts:
638 if mode is 'string' and preserve_non_opts:
639 # remove option-parts from the original args-string and preserve remaining-part.
640 # This relies on the arg_split(...) and getopt(...)'s impl spec, that the parsed options are
641 # returned in the original order.
642 remainder_arg_str = remainder_arg_str.replace(o, '', 1).replace(a, '', 1)
635 if o.startswith('--'):
643 if o.startswith('--'):
636 o = o[2:]
644 o = o[2:]
637 else:
645 else:
@@ -649,6 +657,9 b' class Magics(Configurable):'
649 # Prepare opts,args for return
657 # Prepare opts,args for return
650 opts = Struct(odict)
658 opts = Struct(odict)
651 if mode == 'string':
659 if mode == 'string':
660 if preserve_non_opts:
661 args = remainder_arg_str.lstrip()
662 else:
652 args = ' '.join(args)
663 args = ' '.join(args)
653
664
654 return opts,args
665 return opts,args
@@ -1074,7 +1074,7 b' class ExecutionMagics(Magics):'
1074 those from %timeit."""
1074 those from %timeit."""
1075
1075
1076 opts, stmt = self.parse_options(line,'n:r:tcp:qo',
1076 opts, stmt = self.parse_options(line, 'n:r:tcp:qo',
1077 posix=False, strict=False)
1077 posix=False, strict=False, preserve_non_opts=True)
1078 if stmt == "" and cell is None:
1078 if stmt == "" and cell is None:
1079 return
1079 return
1080
1080
@@ -470,6 +470,21 b' def test_parse_options():'
470 nt.assert_equal(m.parse_options(u'foo', '')[1], u'foo')
470 nt.assert_equal(m.parse_options(u'foo', '')[1], u'foo')
471
471
472
472
473 def test_parse_options_preserve_non_option_string():
474 """Test to assert preservation of non-option part of magic-block, while parsing magic options."""
475 m = DummyMagics(_ip)
476 opts, stmt = m.parse_options(' -n1 -r 13 _ = 314 + foo', 'n:r:', preserve_non_opts= True)
477 nt.assert_equal(opts, {'n': '1', 'r': '13'})
478 nt.assert_equal(stmt, '_ = 314 + foo')
479
480
481 def test_run_magic_preserve_code_block():
482 """Test to assert preservation of non-option part of magic-block, while running magic."""
483 _ip.user_ns['spaces'] = []
484 _ip.magic("timeit -n1 -r1 spaces.append([s.count(' ') for s in ['document']])")
485 assert _ip.user_ns['spaces'] == [[0]]
486
487
473 def test_dirops():
488 def test_dirops():
474 """Test various directory handling operations."""
489 """Test various directory handling operations."""
475 # curpath = lambda :os.path.splitdrive(os.getcwd())[1].replace('\\','/')
490 # curpath = lambda :os.path.splitdrive(os.getcwd())[1].replace('\\','/')
General Comments 0
You need to be logged in to leave comments. Login now