diff --git a/aodndata/moorings/classifiers.py b/aodndata/moorings/classifiers.py index 25896754..89639311 100644 --- a/aodndata/moorings/classifiers.py +++ b/aodndata/moorings/classifiers.py @@ -326,13 +326,18 @@ def dest_path(cls, input_file): dir_list += ['ASFS', 'SOFS', cat, 'Real-time', rt_folder_name] elif subfac in ('SOTS', 'ASFS'): dir_list.append('SOTS') - # Check for data_product_type attribute - if cls._get_nc_att(input_file, 'data_product_type'): - dir_list.append('derived_products') - else: - dir_list.append(cls._get_deployment_year(input_file)) - if cls._is_realtime(input_file): - dir_list.append('real-time') + # Open the NetCDF file + dataset = cls._open_nc_file(input_file) + try: + # Check for data_product_type attribute + if hasattr(dataset, 'data_product_type'): + dir_list.append('derived_products') + else: + dir_list.append(cls._get_deployment_year(input_file)) + if cls._is_realtime(input_file): + dir_list.append('real-time') + finally: + dataset.close() else: raise InvalidFileNameError( "Unknown DWM sub-facility '{subfac}' for file '{input_file}'".format(subfac=subfac, diff --git a/test_aodndata/moorings/test_dwmFileClassifier.py b/test_aodndata/moorings/test_dwmFileClassifier.py index 730d2a08..d0dd8e99 100644 --- a/test_aodndata/moorings/test_dwmFileClassifier.py +++ b/test_aodndata/moorings/test_dwmFileClassifier.py @@ -328,5 +328,19 @@ def test_hourly_depth_gridded_product(self): self.assertEqual(dest_dir, 'IMOS/DWM/DA/CSIRO_gridded_all_variables') self.assertEqual(dest_filename, filename) + def test_sots_derived_product(self): + filename = 'IMOS_DWM-SOTS_BCOPSTUW_20210420_SOFS_FV02_SOFS-10-2021-hourly-gridded-product_END-20220512_C-20221117.nc' + testfile = os.path.join(self.tempdir, filename) + make_test_file(testfile, { + 'site_code': 'SOTS', + 'platform_code': 'SOFS', + 'data_product_type': 'derived' + }) + dest_dir, dest_filename = os.path.split(DwmFileClassifier.dest_path(testfile)) + expected_dir = 'IMOS/DWM/SOTS/derived_products' + self.assertEqual(dest_dir, expected_dir) + self.assertEqual(dest_filename, filename) + + if __name__ == '__main__': unittest.main()