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() | |
@@ -630,8 +633,13 b' class Magics(Configurable):' | |||||
630 | opts,args = getopt(argv, opt_str, long_opts) |
|
633 | opts,args = getopt(argv, opt_str, long_opts) | |
631 | except GetoptError as e: |
|
634 | except GetoptError as e: | |
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,7 +657,10 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': | |
652 | args = ' '.join(args) |
|
660 | if preserve_non_opts: | |
|
661 | args = remainder_arg_str.lstrip() | |||
|
662 | else: | |||
|
663 | args = ' '.join(args) | |||
653 |
|
664 | |||
654 | return opts,args |
|
665 | return opts,args | |
655 |
|
666 |
@@ -1073,8 +1073,8 b' class ExecutionMagics(Magics):' | |||||
1073 | does not matter as long as results from timeit.py are not mixed with |
|
1073 | does not matter as long as results from timeit.py are not mixed with | |
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