diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index cc254ead6a10a592d691db88ec1210d9d509f281..6cb10a3dd1d8c9aa50a7c14938a51a0354fb2be0 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -318,7 +318,25 @@ class Cmorizer(object): options="-O", input=filename, output=temp ) shutil.move(temp, filename) - Utils.cdo().mergetime(input=files, output=merged) + cmorize_vars = set() + var_manager = self.config.var_manager + for filename in files: + handler = Utils.open_cdf(filename) + for variable in handler.variables.keys(): + + _, var_cmor = var_manager.get_variable_and_alias( + variable, silent=True, + ) + if self.cmor.cmorize(var_cmor): + cmorize_vars.add(variable) + handler.close() + if not cmorize_vars: + continue + var_str = ",".join([str(var) for var in cmorize_vars]) + Utils.cdo().mergetime( + input=[f"-selvar,{var_str} {filepath}" for filepath in files], + output=merged + ) for filename in files: self._remove(filename) tar_startdate = ( diff --git a/test/integration/test_cmorizer.py b/test/integration/test_cmorizer.py index 14ee5db2b184f6566c831845a678eb86924ec22c..29fab22bb4457edb912b0b75fc569ca04f6d2fa6 100644 --- a/test/integration/test_cmorizer.py +++ b/test/integration/test_cmorizer.py @@ -21,7 +21,7 @@ import calendar class TestCmorizer(TestCase): """Tests for Cmorizer class""" - def _get_variable_and_alias(self, variable): + def _get_variable_and_alias(self, variable, silent=False): mock_alias = Mock() mock_alias.basin = None mock_alias.grid = None @@ -349,22 +349,26 @@ class TestCmorizer(TestCase): log.Log.WARNING: warnings, } ): - if value: - self.assertTrue( - [ - record - for record in cmd.records - if record.levelno == level - ] - ) - else: - self.assertFalse( - [ - record - for record in cmd.records - if record.levelno == level - ] - ) + try: + if value: + self.assertTrue( + [ + record + for record in cmd.records + if record.levelno == level + ] + ) + else: + self.assertFalse( + [ + record + for record in cmd.records + if record.levelno == level + ] + ) + except AssertionError: + print(cmd.records) + raise else: cmorizer = Cmorizer(self.data_manager, "19900101", 0) if ocean: