Source code for one.tests.alf.test_alf_files

import unittest
from pathlib import Path
import uuid

import one.alf.files as files


[docs]class TestAlfParse(unittest.TestCase):
[docs] def test_filename_parts(self): verifiable = files.filename_parts('_namespace_obj.times_timescale.extra.foo.ext') expected = ('namespace', 'obj', 'times', 'timescale', 'extra.foo', 'ext') self.assertEqual(expected, verifiable) verifiable = files.filename_parts('spikes.clusters.npy', as_dict=True) expected = { 'namespace': None, 'object': 'spikes', 'attribute': 'clusters', 'timescale': None, 'extra': None, 'extension': 'npy'} self.assertEqual(expected, verifiable) verifiable = files.filename_parts('spikes.times_ephysClock.npy') expected = (None, 'spikes', 'times', 'ephysClock', None, 'npy') self.assertEqual(expected, verifiable) verifiable = files.filename_parts('_iblmic_audioSpectrogram.frequencies.npy') expected = ('iblmic', 'audioSpectrogram', 'frequencies', None, None, 'npy') self.assertEqual(expected, verifiable) verifiable = files.filename_parts('_spikeglx_ephysData_g0_t0.imec.wiring.json') expected = ('spikeglx', 'ephysData_g0_t0', 'imec', None, 'wiring', 'json') self.assertEqual(expected, verifiable) verifiable = files.filename_parts('_spikeglx_ephysData_g0_t0.imec0.lf.bin') expected = ('spikeglx', 'ephysData_g0_t0', 'imec0', None, 'lf', 'bin') self.assertEqual(expected, verifiable) verifiable = files.filename_parts('_ibl_trials.goCue_times_bpod.csv') expected = ('ibl', 'trials', 'goCue_times', 'bpod', None, 'csv') self.assertEqual(expected, verifiable) with self.assertRaises(ValueError): files.filename_parts('badfile') verifiable = files.filename_parts('badfile', assert_valid=False) self.assertFalse(any(verifiable))
[docs] def test_rel_path_parts(self): alf_str = 'collection/#revision#/_namespace_obj.times_timescale.extra.foo.ext' verifiable = files.rel_path_parts(alf_str) expected = ('collection', 'revision', 'namespace', 'obj', 'times', 'timescale', 'extra.foo', 'ext') self.assertEqual(expected, verifiable) verifiable = files.rel_path_parts('spikes.clusters.npy', as_dict=True) expected = { 'collection': None, 'revision': None, 'namespace': None, 'object': 'spikes', 'attribute': 'clusters', 'timescale': None, 'extra': None, 'extension': 'npy'} self.assertEqual(expected, verifiable) with self.assertRaises(ValueError): files.rel_path_parts('bad/badfile') verifiable = files.filename_parts('bad/badfile', assert_valid=False) self.assertFalse(any(verifiable))
[docs] def test_session_path_parts(self): session_path = '/home/user/Data/labname/Subjects/subject/2020-01-01/001/alf' parsed = files.session_path_parts(session_path, as_dict=True) expected = { 'lab': 'labname', 'subject': 'subject', 'date': '2020-01-01', 'number': '001'} self.assertEqual(expected, parsed) parsed = files.session_path_parts(session_path, as_dict=False) self.assertEqual(tuple(expected.values()), parsed) # Check parse fails session_path = '/home/user/Data/labname/2020-01-01/alf/001/' with self.assertRaises(ValueError): files.session_path_parts(session_path, assert_valid=True) parsed = files.session_path_parts(session_path, assert_valid=False, as_dict=True) expected = dict.fromkeys(expected.keys()) self.assertEqual(expected, parsed) parsed = files.session_path_parts(session_path, assert_valid=False, as_dict=False) self.assertEqual(tuple([None] * 4), parsed)
[docs]class TestALFGet(unittest.TestCase):
[docs] def test_get_session_folder(self): inp = (Path('/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001/raw_behavior_data/' '_iblrig_micData.raw.wav'), Path('/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001'), '/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001/raw_behavior_data' '/_iblrig_micData.raw.wav', '/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001',) out = (Path('/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001'), Path('/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001'), Path('/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001'), Path('/mnt/s0/Data/Subjects/ZM_1368/2019-04-19/001'),) for i, o in zip(inp, out): self.assertEqual(o, files.get_session_path(i)) # Test if None is passed no_out = files.get_session_path(None) self.assertTrue(no_out is None)
[docs] def test_get_alf_path(self): path = Path('/mnt/s0/Data/Subjects/' 'ZM_1368/2019-04-19/001/raw_behavior_data/_iblrig_micData.raw.wav') out = files.get_alf_path(path) self.assertEqual(out, '/'.join(path.parts[-7:])) path = 'collection/trials.intervals_bpod.npy' self.assertEqual(files.get_alf_path(path), path) path = '/trials.intervals_bpod.npy' self.assertEqual(files.get_alf_path(path), 'trials.intervals_bpod.npy')
[docs] def test_isdatetime(self): inp = ['açsldfkça', '12312', '2020-01-01', '01-01-2020', '2020-12-32'] out = [False, False, True, False, False] for i, o in zip(inp, out): self.assertEqual(o, files._isdatetime(i))
[docs] def test_add_uuid(self): _uuid = uuid.uuid4() file_with_uuid = f'/titi/tutu.part1.part1.{_uuid}.json' inout = [(file_with_uuid, Path(file_with_uuid)), ('/tutu/tata.json', Path(f'/tutu/tata.{_uuid}.json')), ('/tutu/tata.part1.json', Path(f'/tutu/tata.part1.{_uuid}.json'))] for tup in inout: self.assertEqual(tup[1], files.add_uuid_string(tup[0], _uuid)) self.assertEqual(tup[1], files.add_uuid_string(tup[0], str(_uuid))) with self.assertRaises(ValueError): files.add_uuid_string('/foo/bar.npy', 'fake')
if __name__ == "__main__": unittest.main(exit=False, verbosity=2)