def test_cache_spec(self): self.test_temp_file = tempfile.NamedTemporaryFile() # On Windows h5py cannot truncate an open file in write mode. # The temp file will be closed before h5py truncates it # and will be removed during the tearDown step. self.test_temp_file.close() self.io = NWBHDF5IO(self.test_temp_file.name) # Setup all the data we need start_time = datetime(2017, 4, 3, 11, 0, 0) create_date = datetime(2017, 4, 15, 12, 0, 0) data = np.arange(1000).reshape((100, 10)) timestamps = np.arange(100) # Create the first file nwbfile1 = NWBFile(source='PyNWB tutorial', session_description='demonstrate external files', identifier='NWBE1', session_start_time=start_time, file_create_date=create_date) test_ts1 = TimeSeries(name='test_timeseries', source='PyNWB tutorial', data=data, unit='SIunit', timestamps=timestamps) nwbfile1.add_acquisition(test_ts1) # Write the first file self.io.write(nwbfile1, cache_spec=True) self.io.close() ns_catalog = NamespaceCatalog(group_spec_cls=NWBGroupSpec, dataset_spec_cls=NWBDatasetSpec, spec_namespace_cls=NWBNamespace) NWBHDF5IO.load_namespaces(ns_catalog, self.test_temp_file.name) self.assertEqual(ns_catalog.namespaces, ('core', )) source_types = self.__get_types(self.io.manager.namespace_catalog) read_types = self.__get_types(ns_catalog) self.assertSetEqual(source_types, read_types)
def test_copy_file_with_external_links(self): # Setup all the data we need start_time = datetime(2017, 4, 3, 11, 0, 0) create_date = datetime(2017, 4, 15, 12, 0, 0) data = np.arange(1000).reshape((100, 10)) timestamps = np.arange(100) # Create the first file nwbfile1 = NWBFile(source='PyNWB tutorial', session_description='demonstrate external files', identifier='NWBE1', session_start_time=start_time, file_create_date=create_date) test_ts1 = TimeSeries(name='test_timeseries', source='PyNWB tutorial', data=data, unit='SIunit', timestamps=timestamps) nwbfile1.add_acquisition(test_ts1) # Write the first file self.io[0].write(nwbfile1) nwbfile1_read = self.io[0].read() # Create the second file nwbfile2 = NWBFile(source='PyNWB tutorial', session_description='demonstrate external files', identifier='NWBE1', session_start_time=start_time, file_create_date=create_date) test_ts2 = TimeSeries( name='test_timeseries', source='PyNWB tutorial', data=nwbfile1_read.get_acquisition('test_timeseries').data, unit='SIunit', timestamps=timestamps) nwbfile2.add_acquisition(test_ts2) # Write the second file self.io[1].write(nwbfile2) self.io[1].close() self.io[0].close() # Don't forget to close the first file too # Copy the file self.io[2].close() HDF5IO.copy_file(source_filename=self.test_temp_files[1].name, dest_filename=self.test_temp_files[2].name, expand_external=True, expand_soft=False, expand_refs=False) # Test that everything is working as expected # Confirm that our original data file is correct f1 = File(self.test_temp_files[0].name) self.assertTrue( isinstance( f1.get('/acquisition/test_timeseries/data', getlink=True), HardLink)) # Confirm that we successfully created and External Link in our second file f2 = File(self.test_temp_files[1].name) self.assertTrue( isinstance( f2.get('/acquisition/test_timeseries/data', getlink=True), ExternalLink)) # Confirm that we successfully resolved the External Link when we copied our second file f3 = File(self.test_temp_files[2].name) self.assertTrue( isinstance( f3.get('/acquisition/test_timeseries/data', getlink=True), HardLink))