예제 #1
0
def test_has_files(tmp_crumb):
    assert not os.path.exists(tmp_crumb.path)

    assert not tmp_crumb.has_files()

    values_dict = {
        'session_id': ['session_{:02}'.format(i) for i in range(2)],
        'subject_id': ['subj_{:03}'.format(i) for i in range(3)],
        'modality': ['anat'],
        'image': ['mprage1.nii', 'mprage2.nii', 'mprage3.nii'],
    }

    paths = mktree(tmp_crumb, list(ParameterGrid(values_dict)))

    assert os.path.exists(tmp_crumb.split()[0])

    assert not tmp_crumb.has_files()

    pa = Path(str(paths[0]))
    pa.rmdir()
    pa.touch()

    assert pa.exists()
    assert pa.is_file()
    assert tmp_crumb.has_files()
예제 #2
0
def test_setitem(tmp_crumb):
    assert not os.path.exists(tmp_crumb.split()[0])

    values_dict = {
        'session_id': ['session_{:02}'.format(i) for i in range(2)],
        'subject_id': ['subj_{:03}'.format(i) for i in range(3)],
        'modality': ['anat'],
        'image': ['mprage1.nii', 'mprage2.nii', 'mprage3.nii'],
    }

    assert not tmp_crumb.exists()

    mktree(tmp_crumb, list(ParameterGrid(values_dict)))

    cr = list(tmp_crumb.ls())[0]

    assert not list(cr.open_args())

    assert cr['image'] == [values_dict['image'][0]]

    cr['image'] = 'mprage2.nii'

    assert cr['image'] == ['mprage2.nii']

    assert 'mprage2.nii' in cr.path
    assert 'mprage2.nii' in cr.ls()[0].path

    cr.clear('image')
    assert 'image' in list(cr.open_args())
    assert 'mprage2.nii' not in cr.path
    assert 'mprage2.nii' not in cr.ls()[0].path
예제 #3
0
def test_exists2(tmp_crumb):
    assert not os.path.exists(tmp_crumb.split()[0])

    values_dict = {
        'session_id': ['session_{:02}'.format(i) for i in range(2)],
        'subject_id': ['subj_{:03}'.format(i) for i in range(3)],
    }

    mktree(tmp_crumb, list(ParameterGrid(values_dict)))

    assert not tmp_crumb.exists()
예제 #4
0
def test_exists(tmp_crumb):
    assert not os.path.exists(tmp_crumb.split()[0])

    values_dict = {
        'session_id': ['session_{:02}'.format(i) for i in range(2)],
        'subject_id': ['subj_{:03}'.format(i) for i in range(3)],
        'modality': ['anat'],
        'image': ['mprage1.nii', 'mprage2.nii', 'mprage3.nii'],
    }

    assert not tmp_crumb.exists()

    mktree(tmp_crumb, list(ParameterGrid(values_dict)))

    assert tmp_crumb.exists()

    assert not _split_exists('/_/asdfasdfasdf?/{hansel}')
예제 #5
0
def test_ls_with_check(tmp_crumb):
    assert not os.path.exists(tmp_crumb._path)

    values_dict = {
        'session_id': ['session_{:02}'.format(i) for i in range(2)],
        'subject_id': ['subj_{:03}'.format(i) for i in range(3)],
        'modality': ['anat'],
        'image': ['mprage1.nii', 'mprage2.nii', 'mprage3.nii'],
    }

    paths = mktree(tmp_crumb, list(ParameterGrid(values_dict)))

    sbj_crumb = tmp_crumb.replace(subject_id='subj_000')
    assert sbj_crumb.ls('subject_id', make_crumbs=False, fullpath=False) == ['subj_000']

    assert os.path.exists(tmp_crumb.split()[0])

    assert all([os.path.exists(p.path) for p in paths])
    assert all([p.exists() for p in paths])

    images = tmp_crumb.ls('image', fullpath=True, make_crumbs=True, check_exists=True)

    modalities = tmp_crumb.ls('modality', fullpath=True, make_crumbs=True, check_exists=True)

    assert all([img.exists() for img in images])
    assert all([mod.exists() for mod in modalities])

    Path(str(images[0])).rmdir()

    images2 = tmp_crumb.ls('image', fullpath=True, make_crumbs=True, check_exists=True)

    assert images != images2
    assert len(images) == len(images2) + 1
    assert not all([img.exists() for img in images])
    assert all([img.exists() for img in images2])

    Path(str(images[1])).rmdir()
    Path(str(images[2])).rmdir()

    images2 = tmp_crumb.ls('image', fullpath=True, make_crumbs=True, check_exists=True)

    assert tmp_crumb.ls('image') == tmp_crumb.ls()
    assert tmp_crumb.ls() == tmp_crumb.unfold()

    assert not all([img.exists() for img in images])
    assert all([img.exists() for img in images2])

    modalities2 = tmp_crumb.ls('modality', fullpath=True, make_crumbs=True, check_exists=True)

    str_modalities2 = tmp_crumb.ls('modality', fullpath=True, make_crumbs=False, check_exists=True)

    assert images != images2
    assert len(images) == len(images2) + 3

    assert modalities != modalities2
    assert not all([mod.exists() for mod in modalities])
    assert all([mod.exists() for mod in modalities2])

    assert all([isinstance(smod, str) for smod in str_modalities2])
    assert all([isinstance(mod, Crumb) for mod in modalities2])
    assert all([mod.path == smod for mod, smod in zip(sorted(modalities2), sorted(str_modalities2))])

    shutil.rmtree(modalities2[0].split()[0], ignore_errors=True)

    modalities3 = tmp_crumb.ls('modality', fullpath=True, make_crumbs=True, check_exists=True)

    assert modalities2 != modalities3
    assert not all([mod.exists() for mod in modalities2])
    assert all([mod.exists() for mod in modalities3])

    assert tmp_crumb.unfold() == tmp_crumb.ls('image', fullpath=True, make_crumbs=True, check_exists=True)

    pytest.raises(IOError, modalities2[0].__getitem__, 'image')

    img_crumb = tmp_crumb.replace(image='mprage1.nii')
    assert 'image' in img_crumb._argval
    assert img_crumb['image'] == ['mprage1.nii']

    assert img_crumb['image'][0] == img_crumb.get_first('image')

    img_crumb['modality'] = 'anat'
    assert 'modality' in img_crumb._argval
    assert img_crumb['modality'] == ['anat']
    assert img_crumb.has_set('modality')

    assert img_crumb['session_id'].count('session_01') == img_crumb['session_id'].count('session_00')

    img_crumb['session_id'] = 'session_00'
    assert 'session_id' in img_crumb._argval
    assert img_crumb['session_id'] == ['session_00']

    assert 'subj_000' not in img_crumb['subject_id']

    unfolded_crumbs = tmp_crumb.unfold()
    assert list(unfolded_crumbs[0].open_args()) == []
    assert unfolded_crumbs[0].unfold() == [unfolded_crumbs[0]]

    pytest.raises(AttributeError, unfolded_crumbs[0]._check_open_args, ['subject_id'])
예제 #6
0
def test_touch(tmp_crumb):
    assert not os.path.exists(tmp_crumb.split()[0])
    path = tmp_crumb.touch()
    assert path == tmp_crumb.split()[0]
    assert os.path.exists(path)