Skip to content

Commit ce0ff04

Browse files
committed
Merge pull request #6 from moloney/enh-df-tests-rebase
TST+BF: Improve DataFinder tests, fix issue with unpack_single and sorti...
2 parents 63eaeb5 + a0fc116 commit ce0ff04

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

nipype/interfaces/io.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -827,15 +827,19 @@ def _run_interface(self, runtime):
827827
):
828828
for key, vals in self.result.iteritems():
829829
self.result[key] = vals[0]
830+
else:
831+
#sort all keys acording to out_paths
832+
for key in self.result.keys():
833+
if key == "out_paths":
834+
continue
835+
sort_tuples = human_order_sorted(zip(self.result["out_paths"],
836+
self.result[key]))
837+
self.result[key] = [x for (_, x) in sort_tuples]
838+
self.result["out_paths"] = human_order_sorted(self.result["out_paths"])
839+
830840
if not self.result:
831841
raise RuntimeError("Regular expression did not match any files!")
832-
833-
#sort all keys acording to out_paths
834-
for key in self.result.keys():
835-
if key == "out_paths":
836-
continue
837-
self.result[key] = [x for (_,x) in human_order_sorted(zip(self.result["out_paths"], self.result[key]))]
838-
self.result["out_paths"] = human_order_sorted(self.result["out_paths"])
842+
839843
return runtime
840844

841845
def _list_outputs(self):

nipype/interfaces/tests/test_io.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,27 +171,68 @@ def test_datasink_copydir():
171171
shutil.rmtree(outdir)
172172
shutil.rmtree(pth)
173173

174+
174175
def test_datafinder_copydir():
175176
outdir = mkdtemp()
176177
open(os.path.join(outdir, "findme.txt"), 'a').close()
177178
open(os.path.join(outdir, "dontfindme"), 'a').close()
179+
open(os.path.join(outdir, "dontfindmealsotxt"), 'a').close()
178180
open(os.path.join(outdir, "findmetoo.txt"), 'a').close()
181+
open(os.path.join(outdir, "ignoreme.txt"), 'a').close()
182+
open(os.path.join(outdir, "alsoignore.txt"), 'a').close()
179183

180184
from nipype.interfaces.io import DataFinder
181185
df = DataFinder()
182186
df.inputs.root_paths = outdir
183-
df.inputs.match_regex = '.+/(?P<basename>.+).txt'
187+
df.inputs.match_regex = '.+/(?P<basename>.+)\.txt'
188+
df.inputs.ignore_regexes = ['ignore']
184189
result = df.run()
185190
expected = ["findme.txt", "findmetoo.txt"]
186191
for path, expected_fname in zip(result.outputs.out_paths, expected):
187192
_, fname = os.path.split(path)
188193
yield assert_equal, fname, expected_fname
189-
194+
190195
yield assert_equal, result.outputs.basename, ["findme", "findmetoo"]
191196

192197
shutil.rmtree(outdir)
193198

194199

200+
def test_datafinder_depth():
201+
outdir = mkdtemp()
202+
os.makedirs(os.path.join(outdir, '0', '1', '2', '3'))
203+
204+
from nipype.interfaces.io import DataFinder
205+
df = DataFinder()
206+
df.inputs.root_paths = os.path.join(outdir, '0')
207+
for min_depth in range(4):
208+
for max_depth in range(min_depth, 4):
209+
df.inputs.min_depth = min_depth
210+
df.inputs.max_depth = max_depth
211+
result = df.run()
212+
expected = [str(x) for x in range(min_depth, max_depth + 1)]
213+
for path, exp_fname in zip(result.outputs.out_paths, expected):
214+
_, fname = os.path.split(path)
215+
yield assert_equal, fname, exp_fname
216+
217+
shutil.rmtree(outdir)
218+
219+
220+
def test_datafinder_unpack():
221+
outdir = mkdtemp()
222+
single_res = os.path.join(outdir, "findme.txt")
223+
open(single_res, 'a').close()
224+
open(os.path.join(outdir, "dontfindme"), 'a').close()
225+
226+
from nipype.interfaces.io import DataFinder
227+
df = DataFinder()
228+
df.inputs.root_paths = outdir
229+
df.inputs.match_regex = '.+/(?P<basename>.+)\.txt'
230+
df.inputs.unpack_single = True
231+
result = df.run()
232+
print result.outputs.out_paths
233+
yield assert_equal, result.outputs.out_paths, single_res
234+
235+
195236
def test_freesurfersource():
196237
fss = nio.FreeSurferSource()
197238
yield assert_equal, fss.inputs.hemi, 'both'

0 commit comments

Comments
 (0)