Skip to content

Commit b9b549e

Browse files
committed
FIX: Avoid cluttering directories with test files
1 parent c68b670 commit b9b549e

File tree

8 files changed

+67
-54
lines changed

8 files changed

+67
-54
lines changed

nibabies/conftest.py

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,36 @@
22

33
import json
44
from pathlib import Path
5-
from tempfile import TemporaryDirectory
5+
from shutil import copytree
66

77
import nibabel as nb
88
import numpy as np
99
import pytest
1010

1111
from nibabies.data import load as load_data
1212

13-
FILES = (
14-
'functional.nii',
15-
'anatomical.nii',
16-
'func.dlabel.nii',
17-
'func.dtseries.nii',
18-
'epi.nii',
19-
'T1w.nii',
20-
'func_to_struct.mat',
21-
'atlas.nii',
22-
'label_list.txt',
23-
'sub-01_run-01_echo-1_bold.nii.gz',
24-
'sub-01_run-01_echo-2_bold.nii.gz',
25-
'sub-01_run-01_echo-3_bold.nii.gz',
26-
)
27-
28-
29-
@pytest.fixture(scope='package')
30-
def data_dir():
31-
with TemporaryDirectory() as tmpdir:
32-
tmp_path = Path(tmpdir)
33-
for fname in FILES:
34-
Path.touch(tmp_path / fname)
35-
yield tmp_path
13+
try:
14+
from importlib.resources import files as ir_files
15+
except ImportError: # PY<3.9
16+
from importlib_resources import files as ir_files
17+
18+
19+
def copytree_or_skip(source, target):
20+
data_dir = ir_files('nibabies') / source
21+
if not data_dir.exists():
22+
pytest.skip(f'Cannot chdir into {data_dir!r}. Probably in a zipped distribution.')
23+
24+
try:
25+
copytree(data_dir, target / data_dir.name)
26+
except Exception: # noqa: BLE001
27+
pytest.skip(f'Cannot copy {data_dir!r} into {target / data_dir.name}. Probably in a zip.')
3628

3729

3830
@pytest.fixture(autouse=True)
39-
def _populate_namespace(doctest_namespace, data_dir):
40-
doctest_namespace['data_dir'] = data_dir
41-
doctest_namespace['test_data'] = load_data.cached('../tests/data')
42-
doctest_namespace['Path'] = Path
31+
def _populate_namespace(doctest_namespace, tmp_path):
32+
doctest_namespace['copytree_or_skip'] = copytree_or_skip
33+
doctest_namespace['testdir'] = tmp_path
34+
doctest_namespace['datadir'] = load_data()
4335

4436

4537
@pytest.fixture

nibabies/data/sub-01_run-01_echo-1_bold.nii.gz

Whitespace-only changes.

nibabies/data/sub-01_run-01_echo-2_bold.nii.gz

Whitespace-only changes.

nibabies/data/sub-01_run-01_echo-3_bold.nii.gz

Whitespace-only changes.

nibabies/interfaces/conftest.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from pathlib import Path
22
from shutil import copytree
3+
from tempfile import TemporaryDirectory
34

45
import pytest
56

@@ -19,17 +20,37 @@ def _chdir(path):
1920
os.chdir(cwd)
2021

2122

22-
@pytest.fixture(scope='module')
23+
DATA_FILES = (
24+
'functional.nii',
25+
'anatomical.nii',
26+
'func.dlabel.nii',
27+
'func.dtseries.nii',
28+
'epi.nii',
29+
'T1w.nii',
30+
'func_to_struct.mat',
31+
'atlas.nii',
32+
'label_list.txt',
33+
'sub-01_run-01_echo-1_bold.nii.gz',
34+
'sub-01_run-01_echo-2_bold.nii.gz',
35+
'sub-01_run-01_echo-3_bold.nii.gz',
36+
)
37+
38+
39+
@pytest.fixture(scope='package')
2340
def data_dir():
24-
return Path(__file__).parent / 'tests' / 'data'
41+
with TemporaryDirectory() as tmpdir:
42+
tmp_path = Path(tmpdir)
43+
for fname in DATA_FILES:
44+
Path.touch(tmp_path / fname)
45+
yield tmp_path
2546

2647

2748
@pytest.fixture(autouse=True)
28-
def _docdir(request, tmp_path):
49+
def _docdir(data_dir, request, tmp_path):
2950
# Trigger ONLY for the doctests.
3051
doctest_plugin = request.config.pluginmanager.getplugin('doctest')
3152
if isinstance(request.node, doctest_plugin.DoctestItem):
32-
copytree(Path(__file__).parent / 'tests' / 'data', tmp_path, dirs_exist_ok=True)
53+
copytree(data_dir, tmp_path, dirs_exist_ok=True)
3354

3455
# Chdir only for the duration of the test.
3556
with _chdir(tmp_path):

nibabies/interfaces/tests/data/__init__.py

Whitespace-only changes.

nibabies/interfaces/workbench.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,16 @@ class CiftiCreateDenseFromTemplate(WBCommand):
164164
165165
>>> from nibabies.interfaces import workbench as wb
166166
>>> frmtpl = wb.CiftiCreateDenseFromTemplate()
167-
>>> frmtpl.inputs.in_file = data_dir / "func.dtseries.nii"
167+
>>> frmtpl.inputs.in_file = testdir / "func.dtseries.nii"
168168
>>> frmtpl.inputs.series = True
169169
>>> frmtpl.inputs.series_step = 0.8
170170
>>> frmtpl.inputs.series_start = 0
171171
>>> frmtpl.cmdline # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
172172
'wb_command -cifti-create-dense-from-template .../func.dtseries.nii \
173173
template_func.dtseries.nii -series 0.8 0.0'
174174
175-
>>> frmtpl.inputs.volume = [("OTHER", data_dir / 'functional.nii', True), \
176-
("PUTAMEN_LEFT", data_dir / 'functional.nii')]
175+
>>> frmtpl.inputs.volume = [("OTHER", testdir / 'functional.nii', True), \
176+
("PUTAMEN_LEFT", testdir / 'functional.nii')]
177177
>>> frmtpl.cmdline # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
178178
'wb_command -cifti-create-dense-from-template .../func.dtseries.nii \
179179
template_func.dtseries.nii -series 0.8 0.0 \
@@ -330,8 +330,8 @@ class CiftiCreateDenseTimeseries(WBCommand):
330330
331331
>>> from nibabies.interfaces.workbench import CiftiCreateDenseTimeseries
332332
>>> createdts = CiftiCreateDenseTimeseries()
333-
>>> createdts.inputs.volume_data = data_dir /'functional.nii'
334-
>>> createdts.inputs.volume_structure_labels = data_dir / 'atlas.nii'
333+
>>> createdts.inputs.volume_data = testdir /'functional.nii'
334+
>>> createdts.inputs.volume_structure_labels = testdir / 'atlas.nii'
335335
>>> createdts.cmdline # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
336336
'wb_command -cifti-create-dense-timeseries out.dtseries.nii \
337337
-volume .../functional.nii .../atlas.nii'
@@ -467,8 +467,8 @@ class CiftiCreateLabel(WBCommand):
467467
468468
>>> from nibabies.interfaces import workbench as wb
469469
>>> lab = wb.CiftiCreateLabel()
470-
>>> lab.inputs.volume_label = data_dir / "functional.nii"
471-
>>> lab.inputs.structure_label_volume = data_dir / "functional.nii"
470+
>>> lab.inputs.volume_label = testdir / "functional.nii"
471+
>>> lab.inputs.structure_label_volume = testdir / "functional.nii"
472472
>>> lab.cmdline # doctest: +ELLIPSIS
473473
'wb_command -cifti-create-label out.dlabel.nii -volume .../functional.nii .../functional.nii'
474474
"""
@@ -940,9 +940,9 @@ class CiftiResample(WBCommand):
940940
941941
>>> from nibabies.interfaces import workbench as wb
942942
>>> res = wb.CiftiResample()
943-
>>> res.inputs.in_file = data_dir / "func.dtseries.nii"
943+
>>> res.inputs.in_file = testdir / "func.dtseries.nii"
944944
>>> res.inputs.direction = "COLUMN"
945-
>>> res.inputs.template = data_dir / "func.dlabel.nii"
945+
>>> res.inputs.template = testdir / "func.dlabel.nii"
946946
>>> res.inputs.template_direction = "COLUMN"
947947
>>> res.inputs.surface_method = "ADAP_BARY_AREA"
948948
>>> res.inputs.volume_method = "CUBIC"
@@ -1051,7 +1051,7 @@ class CiftiSeparate(WBCommand):
10511051
dimension, columns for .dtseries.
10521052
10531053
>>> separate = CiftiSeparate()
1054-
>>> separate.inputs.in_file = data_dir / "func.dtseries.nii"
1054+
>>> separate.inputs.in_file = testdir / "func.dtseries.nii"
10551055
>>> separate.inputs.direction = "COLUMN"
10561056
>>> separate.inputs.volume_all_file = "volume_all.nii.gz"
10571057
>>> separate.cmdline # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
@@ -1216,10 +1216,10 @@ class VolumeAffineResample(WBCommand):
12161216
12171217
>>> from nibabies.interfaces.workbench import VolumeAffineResample
12181218
>>> resample = VolumeAffineResample()
1219-
>>> resample.inputs.in_file = data_dir /'functional.nii'
1220-
>>> resample.inputs.volume_space = data_dir /'anatomical.nii'
1219+
>>> resample.inputs.in_file = testdir /'functional.nii'
1220+
>>> resample.inputs.volume_space = testdir /'anatomical.nii'
12211221
>>> resample.inputs.method = 'CUBIC'
1222-
>>> resample.inputs.affine = data_dir / 'func_to_struct.mat'
1222+
>>> resample.inputs.affine = testdir / 'func_to_struct.mat'
12231223
>>> resample.cmdline # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
12241224
'wb_command -volume-resample .../functional.nii .../anatomical.nii CUBIC \
12251225
resampled_functional.nii.gz -affine .../func_to_struct.mat'
@@ -1237,8 +1237,8 @@ class VolumeAffineResample(WBCommand):
12371237
However, if other volumes were used to calculate the affine, they can
12381238
be provided:
12391239
1240-
>>> resample.inputs.flirt_source_volume = data_dir / 'epi.nii'
1241-
>>> resample.inputs.flirt_target_volume = data_dir /'T1w.nii'
1240+
>>> resample.inputs.flirt_source_volume = testdir / 'epi.nii'
1241+
>>> resample.inputs.flirt_target_volume = testdir /'T1w.nii'
12421242
>>> resample.cmdline # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
12431243
'wb_command -volume-resample .../functional.nii .../anatomical.nii CUBIC \
12441244
resampled_functional.nii.gz -affine .../func_to_struct.mat \
@@ -1297,7 +1297,7 @@ class VolumeAllLabelsToROIs(WBCommand):
12971297
12981298
>>> from nibabies.interfaces.workbench import VolumeAllLabelsToROIs
12991299
>>> rois = VolumeAllLabelsToROIs()
1300-
>>> rois.inputs.in_file = data_dir / 'atlas.nii'
1300+
>>> rois.inputs.in_file = testdir / 'atlas.nii'
13011301
>>> rois.inputs.label_map = 1
13021302
>>> rois.cmdline # doctest: +ELLIPSIS
13031303
'wb_command -volume-all-labels-to-rois .../atlas.nii 1 atlas_rois.nii.gz'
@@ -1346,7 +1346,7 @@ class VolumeLabelExportTable(WBCommand):
13461346
13471347
>>> from nibabies.interfaces.workbench import VolumeLabelExportTable
13481348
>>> label_export = VolumeLabelExportTable()
1349-
>>> label_export.inputs.in_file = data_dir / 'atlas.nii'
1349+
>>> label_export.inputs.in_file = testdir / 'atlas.nii'
13501350
>>> label_export.inputs.label_map = 1
13511351
>>> label_export.cmdline # doctest: +ELLIPSIS
13521352
'wb_command -volume-label-export-table .../atlas.nii 1 atlas_labels.txt'
@@ -1434,8 +1434,8 @@ class VolumeLabelImport(WBCommand):
14341434
14351435
>>> from nibabies.interfaces.workbench import VolumeLabelImport
14361436
>>> label_import = VolumeLabelImport()
1437-
>>> label_import.inputs.in_file = data_dir / 'atlas.nii'
1438-
>>> label_import.inputs.label_list_file = data_dir / 'label_list.txt'
1437+
>>> label_import.inputs.in_file = testdir / 'atlas.nii'
1438+
>>> label_import.inputs.label_list_file = testdir / 'label_list.txt'
14391439
>>> label_import.cmdline # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
14401440
'wb_command -volume-label-import .../atlas.nii .../label_list.txt \
14411441
atlas_labels.nii.gz'

nibabies/workflows/bold/alignment.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,11 +321,11 @@ def parse_roi_labels(label_file: str):
321321
322322
Return a list of structure names and label keys.
323323
324-
>>> structs, ids = parse_roi_labels(test_data / "labelfile.txt")
324+
>>> structs, ids = parse_roi_labels(datadir / "FreeSurferSubcorticalLabelTableLut.txt")
325325
>>> structs
326-
['CEREBELLUM_LEFT', 'THALAMUS_LEFT', 'CAUDATE_LEFT']
326+
['ACCUMBENS_LEFT', 'ACCUMBENS_RIGHT', 'AMYGDALA_LEFT', ...]
327327
>>> ids
328-
[8, 10, 11]
328+
[26, 58, 18, ...]
329329
"""
330330

331331
with open(label_file) as fp:

0 commit comments

Comments
 (0)