Show More
@@ -19,7 +19,6 b' import os' | |||||
19 | import sys |
|
19 | import sys | |
20 | import time |
|
20 | import time | |
21 | from StringIO import StringIO |
|
21 | from StringIO import StringIO | |
22 | from glob import glob |
|
|||
23 |
|
22 | |||
24 | # cProfile was added in Python2.5 |
|
23 | # cProfile was added in Python2.5 | |
25 | try: |
|
24 | try: | |
@@ -45,24 +44,11 b' from IPython.utils import py3compat' | |||||
45 | from IPython.utils.io import capture_output |
|
44 | from IPython.utils.io import capture_output | |
46 | from IPython.utils.ipstruct import Struct |
|
45 | from IPython.utils.ipstruct import Struct | |
47 | from IPython.utils.module_paths import find_mod |
|
46 | from IPython.utils.module_paths import find_mod | |
48 | from IPython.utils.path import get_py_filename, unquote_filename |
|
47 | from IPython.utils.path import get_py_filename, unquote_filename, globlist | |
49 | from IPython.utils.timing import clock, clock2 |
|
48 | from IPython.utils.timing import clock, clock2 | |
50 | from IPython.utils.warn import warn, error |
|
49 | from IPython.utils.warn import warn, error | |
51 |
|
50 | |||
52 |
|
51 | |||
53 | def globlist(args): |
|
|||
54 | """ |
|
|||
55 | Do glob expansion for each element in `args` and return a flattened list. |
|
|||
56 |
|
||||
57 | Unmatched glob pattern will remain as-is in the returned list. |
|
|||
58 |
|
||||
59 | """ |
|
|||
60 | expanded = [] |
|
|||
61 | for a in args: |
|
|||
62 | expanded.extend(glob(a) or [a]) |
|
|||
63 | return expanded |
|
|||
64 |
|
||||
65 |
|
||||
66 | #----------------------------------------------------------------------------- |
|
52 | #----------------------------------------------------------------------------- | |
67 | # Magic implementation classes |
|
53 | # Magic implementation classes | |
68 | #----------------------------------------------------------------------------- |
|
54 | #----------------------------------------------------------------------------- |
@@ -29,7 +29,6 b' from IPython.core.magic import (Magics, magics_class, line_magic,' | |||||
29 | register_line_magic, register_cell_magic, |
|
29 | register_line_magic, register_cell_magic, | |
30 | register_line_cell_magic) |
|
30 | register_line_cell_magic) | |
31 | from IPython.core.magics import execution, script |
|
31 | from IPython.core.magics import execution, script | |
32 | from IPython.core.magics.execution import globlist |
|
|||
33 | from IPython.nbformat.v3.tests.nbexamples import nb0 |
|
32 | from IPython.nbformat.v3.tests.nbexamples import nb0 | |
34 | from IPython.nbformat import current |
|
33 | from IPython.nbformat import current | |
35 | from IPython.testing import decorators as dec |
|
34 | from IPython.testing import decorators as dec | |
@@ -87,37 +86,6 b' def test_magic_parse_long_options():' | |||||
87 | nt.assert_true(opts['bar'], "bubble") |
|
86 | nt.assert_true(opts['bar'], "bubble") | |
88 |
|
87 | |||
89 |
|
88 | |||
90 | def test_globlist(): |
|
|||
91 | """Test glob expansion for %run magic.""" |
|
|||
92 | filenames_start_with_a = map('a{0}'.format, range(3)) |
|
|||
93 | filenames_end_with_b = map('{0}b'.format, range(3)) |
|
|||
94 | filenames = filenames_start_with_a + filenames_end_with_b |
|
|||
95 |
|
||||
96 | with TemporaryDirectory() as td: |
|
|||
97 | save = os.getcwdu() |
|
|||
98 | try: |
|
|||
99 | os.chdir(td) |
|
|||
100 |
|
||||
101 | # Create empty files |
|
|||
102 | for fname in filenames: |
|
|||
103 | open(os.path.join(td, fname), 'w').close() |
|
|||
104 |
|
||||
105 | def assert_match(patterns, matches): |
|
|||
106 | # glob returns unordered list. that's why sorted is required. |
|
|||
107 | nt.assert_equals(sorted(globlist(patterns)), sorted(matches)) |
|
|||
108 |
|
||||
109 | assert_match(['*'], filenames) |
|
|||
110 | assert_match(['a*'], filenames_start_with_a) |
|
|||
111 | assert_match(['*c'], ['*c']) |
|
|||
112 | assert_match(['*', 'a*', '*b', '*c'], |
|
|||
113 | filenames |
|
|||
114 | + filenames_start_with_a |
|
|||
115 | + filenames_end_with_b |
|
|||
116 | + ['*c']) |
|
|||
117 | finally: |
|
|||
118 | os.chdir(save) |
|
|||
119 |
|
||||
120 |
|
||||
121 | @dec.skip_without('sqlite3') |
|
89 | @dec.skip_without('sqlite3') | |
122 | def doctest_hist_f(): |
|
90 | def doctest_hist_f(): | |
123 | """Test %hist -f with temporary filename. |
|
91 | """Test %hist -f with temporary filename. |
@@ -19,6 +19,7 b' import sys' | |||||
19 | import tempfile |
|
19 | import tempfile | |
20 | import warnings |
|
20 | import warnings | |
21 | from hashlib import md5 |
|
21 | from hashlib import md5 | |
|
22 | from glob import glob | |||
22 |
|
23 | |||
23 | import IPython |
|
24 | import IPython | |
24 | from IPython.testing.skipdoctest import skip_doctest |
|
25 | from IPython.testing.skipdoctest import skip_doctest | |
@@ -355,6 +356,19 b' def expand_path(s):' | |||||
355 | return s |
|
356 | return s | |
356 |
|
357 | |||
357 |
|
358 | |||
|
359 | def globlist(args): | |||
|
360 | """ | |||
|
361 | Do glob expansion for each element in `args` and return a flattened list. | |||
|
362 | ||||
|
363 | Unmatched glob pattern will remain as-is in the returned list. | |||
|
364 | ||||
|
365 | """ | |||
|
366 | expanded = [] | |||
|
367 | for a in args: | |||
|
368 | expanded.extend(glob(a) or [a]) | |||
|
369 | return expanded | |||
|
370 | ||||
|
371 | ||||
358 | def target_outdated(target,deps): |
|
372 | def target_outdated(target,deps): | |
359 | """Determine whether a target is out of date. |
|
373 | """Determine whether a target is out of date. | |
360 |
|
374 |
@@ -32,6 +32,7 b' from IPython.testing.decorators import skip_if_not_win32, skip_win32' | |||||
32 | from IPython.testing.tools import make_tempfile, AssertPrints |
|
32 | from IPython.testing.tools import make_tempfile, AssertPrints | |
33 | from IPython.utils import path, io |
|
33 | from IPython.utils import path, io | |
34 | from IPython.utils import py3compat |
|
34 | from IPython.utils import py3compat | |
|
35 | from IPython.utils.tempdir import TemporaryDirectory | |||
35 |
|
36 | |||
36 | # Platform-dependent imports |
|
37 | # Platform-dependent imports | |
37 | try: |
|
38 | try: | |
@@ -444,3 +445,35 b' def test_unicode_in_filename():' | |||||
444 | path.get_py_filename(u'fooéè.py', force_win32=False) |
|
445 | path.get_py_filename(u'fooéè.py', force_win32=False) | |
445 | except IOError as ex: |
|
446 | except IOError as ex: | |
446 | str(ex) |
|
447 | str(ex) | |
|
448 | ||||
|
449 | ||||
|
450 | def test_globlist(): | |||
|
451 | """Test glob expansion for %run magic.""" | |||
|
452 | filenames_start_with_a = map('a{0}'.format, range(3)) | |||
|
453 | filenames_end_with_b = map('{0}b'.format, range(3)) | |||
|
454 | filenames = filenames_start_with_a + filenames_end_with_b | |||
|
455 | ||||
|
456 | with TemporaryDirectory() as td: | |||
|
457 | save = os.getcwdu() | |||
|
458 | try: | |||
|
459 | os.chdir(td) | |||
|
460 | ||||
|
461 | # Create empty files | |||
|
462 | for fname in filenames: | |||
|
463 | open(os.path.join(td, fname), 'w').close() | |||
|
464 | ||||
|
465 | def assert_match(patterns, matches): | |||
|
466 | # glob returns unordered list. that's why sorted is required. | |||
|
467 | nt.assert_equals(sorted(path.globlist(patterns)), | |||
|
468 | sorted(matches)) | |||
|
469 | ||||
|
470 | assert_match(['*'], filenames) | |||
|
471 | assert_match(['a*'], filenames_start_with_a) | |||
|
472 | assert_match(['*c'], ['*c']) | |||
|
473 | assert_match(['*', 'a*', '*b', '*c'], | |||
|
474 | filenames | |||
|
475 | + filenames_start_with_a | |||
|
476 | + filenames_end_with_b | |||
|
477 | + ['*c']) | |||
|
478 | finally: | |||
|
479 | os.chdir(save) |
General Comments 0
You need to be logged in to leave comments.
Login now