def test_setup_sum_method(metplus_config): data_src = "OBS" pcw = pcp_combine_wrapper(metplus_config, data_src) task_info = {} task_info['valid'] = datetime.strptime("2016090418", '%Y%m%d%H') task_info['lead'] = 0 time_info = ti_calculate(task_info) lookback = 6 * 3600 assert pcw.setup_sum_method(time_info, lookback, data_src)
def test_setup_subtract_method(metplus_config): data_src = "FCST" pcw = pcp_combine_wrapper(metplus_config, data_src) task_info = {} task_info['valid'] = datetime.strptime("201609050000", '%Y%m%d%H%M') task_info['lead_hours'] = 9 time_info = ti_calculate(task_info) lookback = 6 * 3600 files_found = pcw.setup_subtract_method(time_info, lookback, data_src) in_files = [item[0] for item in files_found] assert len(in_files) == 2
def test_handle_jobs(metplus_config, jobs, init_dt, expected_output): if init_dt: time_info = ti_calculate({'init': init_dt}) else: time_info = None wrapper = tc_stat_wrapper(metplus_config) output_base = wrapper.config.getdir('OUTPUT_BASE') output_dir = os.path.join(output_base, 'test_handle_jobs') wrapper.c_dict['JOBS'] = [] for job in jobs: wrapper.c_dict['JOBS'].append(job.replace('<output_dir>', output_dir)) output = wrapper.handle_jobs(time_info) assert (output == expected_output.replace('<output_dir>', output_dir))
def test_get_accumulation_6_to_6(metplus_config): data_src = "FCST" pcw = pcp_combine_wrapper(metplus_config, data_src) input_dir = pcw.config.getdir( 'METPLUS_BASE') + "/internal_tests/data/accum" task_info = {} task_info['valid'] = datetime.strptime("2016090418", '%Y%m%d%H') time_info = ti_calculate(task_info) accum = 6 * 3600 template = "{valid?fmt=%Y%m%d}/file.{valid?fmt=%Y%m%d%H}.{level?fmt=%HH}h" pcw.c_dict['FCST_INPUT_TEMPLATE'] = template pcw.c_dict[f'{data_src}_INPUT_DIR'] = input_dir pcw._build_input_accum_list(data_src, time_info) files_found = pcw.get_accumulation(time_info, accum, data_src) in_files = [item[0] for item in files_found] assert (len(in_files) == 1 and input_dir + "/20160904/file.2016090418.06h" in in_files)
def test_setup_add_method(metplus_config): data_src = "OBS" pcw = pcp_combine_wrapper(metplus_config, data_src) task_info = {} task_info['valid'] = datetime.strptime("2016090418", '%Y%m%d%H') time_info = ti_calculate(task_info) input_dir = pcw.config.getdir( 'METPLUS_BASE') + "/internal_tests/data/accum" lookback = 6 * 3600 files_found = pcw.setup_add_method(time_info, lookback, data_src) assert files_found in_files = [item[0] for item in files_found] print(f"Infiles: {in_files}") assert (len(in_files) == 6 and input_dir + "/20160904/file.2016090418.01h" in in_files and input_dir + "/20160904/file.2016090417.01h" in in_files and input_dir + "/20160904/file.2016090416.01h" in in_files and input_dir + "/20160904/file.2016090415.01h" in in_files and input_dir + "/20160904/file.2016090414.01h" in in_files and input_dir + "/20160904/file.2016090413.01h" in in_files)
def test_get_accumulation_1_to_6(metplus_config): data_src = "OBS" pcw = pcp_combine_wrapper(metplus_config, data_src) input_dir = pcw.config.getdir( 'METPLUS_BASE') + "/internal_tests/data/accum" task_info = {} task_info['valid'] = datetime.strptime("2016090418", '%Y%m%d%H') time_info = ti_calculate(task_info) # 6 hours in seconds accum = 6 * 3600 pcw.c_dict[f'{data_src}_INPUT_DIR'] = input_dir pcw._build_input_accum_list(data_src, time_info) files_found = pcw.get_accumulation(time_info, accum, data_src) in_files = [item[0] for item in files_found] assert (len(in_files) == 6 and input_dir + "/20160904/file.2016090418.01h" in in_files and input_dir + "/20160904/file.2016090417.01h" in in_files and input_dir + "/20160904/file.2016090416.01h" in in_files and input_dir + "/20160904/file.2016090415.01h" in in_files and input_dir + "/20160904/file.2016090414.01h" in in_files and input_dir + "/20160904/file.2016090413.01h" in in_files)
def test_handle_jobs_create_parent_dir(metplus_config, jobs, init_dt, expected_output, parent_dirs): # if init time is provided, calculate other time dict items if init_dt: time_info = ti_calculate({'init': init_dt}) else: time_info = None wrapper = tc_stat_wrapper(metplus_config) # create directory path relative to OUTPUT_BASE to test that function # creates parent directories properly # Used to replace <output_dir> string found in test arguments output_base = wrapper.config.getdir('OUTPUT_BASE') output_dir = os.path.join(output_base, 'test_handle_jobs') # remove parent dirs if they exist cleanup_test_dirs(parent_dirs, output_dir) wrapper.c_dict['JOBS'] = [] for job in jobs: wrapper.c_dict['JOBS'].append(job.replace('<output_dir>', output_dir)) output = wrapper.handle_jobs(time_info) if output != expected_output.replace('<output_dir>', output_dir): assert False # check if parent dir was created if parent_dirs: for parent_dir in parent_dirs: parent_dir_sub = parent_dir.replace('<output_dir>', output_dir) if not os.path.exists(parent_dir_sub): assert False # remove parent dirs to clean up for next run cleanup_test_dirs(parent_dirs, output_dir)