From 0d781da32ec7b702bf0932ad1a43eeeef553c5cd Mon Sep 17 00:00:00 2001 From: George McCabe Date: Thu, 6 May 2021 14:49:32 -0600 Subject: [PATCH 1/2] added test to recreate error, then fix it --- .../point_stat/test_point_stat_wrapper.py | 77 ++++++++++--------- metplus/util/met_util.py | 5 +- 2 files changed, 46 insertions(+), 36 deletions(-) diff --git a/internal_tests/pytests/point_stat/test_point_stat_wrapper.py b/internal_tests/pytests/point_stat/test_point_stat_wrapper.py index 4d1dc884d..8a6166cdb 100755 --- a/internal_tests/pytests/point_stat/test_point_stat_wrapper.py +++ b/internal_tests/pytests/point_stat/test_point_stat_wrapper.py @@ -5,12 +5,50 @@ from metplus.wrappers.point_stat_wrapper import PointStatWrapper +fcst_dir = '/some/path/fcst' +obs_dir = '/some/path/obs' -def point_stat_wrapper(metplus_config): - """! Returns a default PointStatWrapper """ +def set_minimum_config_settings(config): + # set config variables to prevent command from running and bypass check + # if input files actually exist + config.set('config', 'DO_NOT_RUN_EXE', True) + config.set('config', 'INPUT_MUST_EXIST', False) + + # set process and time config variables + config.set('config', 'PROCESS_LIST', 'PointStat') + config.set('config', 'LOOP_BY', 'INIT') + config.set('config', 'INIT_TIME_FMT', '%Y%m%d%H') + config.set('config', 'INIT_BEG', '2005080700') + config.set('config', 'INIT_END', '2005080712') + config.set('config', 'INIT_INCREMENT', '12H') + config.set('config', 'LEAD_SEQ', '12H') + config.set('config', 'LOOP_ORDER', 'times') + config.set('config', 'POINT_STAT_CONFIG_FILE', + '{PARM_BASE}/met_config/PointStatConfig_wrapped') + config.set('config', 'FCST_POINT_STAT_INPUT_DIR', fcst_dir) + config.set('config', 'OBS_POINT_STAT_INPUT_DIR', obs_dir) + config.set('config', 'FCST_POINT_STAT_INPUT_TEMPLATE', + '{init?fmt=%Y%m%d%H}/fcst_file_F{lead?fmt=%3H}') + config.set('config', 'OBS_POINT_STAT_INPUT_TEMPLATE', + '{valid?fmt=%Y%m%d%H}/obs_file') + config.set('config', 'POINT_STAT_OUTPUT_DIR', + '{OUTPUT_BASE}/GridStat/output') + config.set('config', 'POINT_STAT_OUTPUT_TEMPLATE', '{valid?fmt=%Y%m%d%H}') + +def test_met_dictionary_in_var_options(metplus_config): config = metplus_config() - return PointStatWrapper(config) + set_minimum_config_settings(config) + + config.set('config', 'BOTH_VAR1_NAME', 'name') + config.set('config', 'BOTH_VAR1_LEVELS', 'level') + config.set('config', 'BOTH_VAR1_OPTIONS', + 'interp = { type = [ { method = NEAREST; width = 1; } ] };') + + wrapper = PointStatWrapper(config) + assert(wrapper.isOK) + + all_cmds = wrapper.run_all_times() @pytest.mark.parametrize( 'config_overrides, env_var_values', [ @@ -372,9 +410,6 @@ def test_point_stat_all_fields(metplus_config, config_overrides, level_no_quotes = '(*,*)' level_with_quotes = f'"{level_no_quotes}"' - fcst_dir = '/some/path/fcst' - obs_dir = '/some/path/obs' - fcsts = [{'name': 'TMP', 'level': 'P750-900', 'thresh': '<=273,>273'}, @@ -413,35 +448,8 @@ def test_point_stat_all_fields(metplus_config, config_overrides, fcst_fmts.append(fcst_fmt) obs_fmts.append(obs_fmt) - config = metplus_config() - - # set config variables to prevent command from running and bypass check - # if input files actually exist - config.set('config', 'DO_NOT_RUN_EXE', True) - config.set('config', 'INPUT_MUST_EXIST', False) - - # set process and time config variables - config.set('config', 'PROCESS_LIST', 'PointStat') - config.set('config', 'LOOP_BY', 'INIT') - config.set('config', 'INIT_TIME_FMT', '%Y%m%d%H') - config.set('config', 'INIT_BEG', '2005080700') - config.set('config', 'INIT_END', '2005080712') - config.set('config', 'INIT_INCREMENT', '12H') - config.set('config', 'LEAD_SEQ', '12H') - config.set('config', 'LOOP_ORDER', 'times') - - config.set('config', 'POINT_STAT_CONFIG_FILE', - '{PARM_BASE}/met_config/PointStatConfig_wrapped') - config.set('config', 'FCST_POINT_STAT_INPUT_DIR', fcst_dir) - config.set('config', 'OBS_POINT_STAT_INPUT_DIR', obs_dir) - config.set('config', 'FCST_POINT_STAT_INPUT_TEMPLATE', - '{init?fmt=%Y%m%d%H}/fcst_file_F{lead?fmt=%3H}') - config.set('config', 'OBS_POINT_STAT_INPUT_TEMPLATE', - '{valid?fmt=%Y%m%d%H}/obs_file') - config.set('config', 'POINT_STAT_OUTPUT_DIR', - '{OUTPUT_BASE}/GridStat/output') - config.set('config', 'POINT_STAT_OUTPUT_TEMPLATE', '{valid?fmt=%Y%m%d%H}') + set_minimum_config_settings(config) for index, (fcst, obs) in enumerate(zip(fcsts, obss)): idx = index + 1 @@ -499,4 +507,3 @@ def test_point_stat_all_fields(metplus_config, config_overrides, assert (value == obs_fmt) else: assert(env_var_values.get(env_var_key, '') == value) - diff --git a/metplus/util/met_util.py b/metplus/util/met_util.py index 28ebbfb1a..88984cf34 100644 --- a/metplus/util/met_util.py +++ b/metplus/util/met_util.py @@ -2436,9 +2436,12 @@ def sub_var_info(var_info, time_info): if isinstance(value, list): out_value = [] for item in value: - out_value.append(do_string_sub(item, **time_info)) + out_value.append(do_string_sub(item, + skip_missing_tags=True, + **time_info)) else: out_value = do_string_sub(value, + skip_missing_tags=True, **time_info) out_var_info[key] = out_value From 1f43e017a58f9c91d9252878d50fa6974e2a5e5c Mon Sep 17 00:00:00 2001 From: George McCabe Date: Thu, 6 May 2021 14:50:48 -0600 Subject: [PATCH 2/2] ci-run-diff --- internal_tests/pytests/point_stat/test_point_stat_wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal_tests/pytests/point_stat/test_point_stat_wrapper.py b/internal_tests/pytests/point_stat/test_point_stat_wrapper.py index 8a6166cdb..f78318236 100755 --- a/internal_tests/pytests/point_stat/test_point_stat_wrapper.py +++ b/internal_tests/pytests/point_stat/test_point_stat_wrapper.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import pytest