def process_all(orig_args): """Run the ORAC pre, main, and post processors on a file.""" from argparse import ArgumentParser from copy import deepcopy from pyorac.arguments import args_common, args_main from pyorac.local_defaults import log_dir, pre_dir # Generate main-processor-only parser pars = ArgumentParser() args_common(pars) args_main(pars) # We need one argument from args_cc4cl() pars.add_argument("--sub_dir", default="") compare = pars.parse_args("") # Copy input arguments as we'll need to fiddle with them orig_args = check_args_common(orig_args) orig_args = check_args_cc4cl(orig_args) log_path = os.path.join(orig_args.out_dir, log_dir) args = deepcopy(orig_args) written_dirs = set() # The folders we actually wrote to # Work out output filename args.out_dir = os.path.join(orig_args.out_dir, pre_dir) jid_pre, _ = process_pre(args, log_path, tag="pre{}".format(args.label)) if jid_pre is not None: written_dirs.add(args.out_dir) # Run main processor ------------------------------------------------------- root_name = args.File.root_name(args.revision, args.processor, args.project, args.product_name) args.target = root_name + ".config.nc" out_files = [] # All files that would be made (facilitates --dry_run) jid_main = [] # ID no. for each queued job args.in_dir = [args.out_dir] for sett in args.settings: phs_args = deepcopy(args) parsed_settings_arguments = pars.parse_args(sett.split()) for key, val in compare.__dict__.items(): if val == parsed_settings_arguments.__dict__[key]: parsed_settings_arguments.__dict__.pop(key) phs_args.__dict__.update(parsed_settings_arguments.__dict__) phs_args.out_dir = os.path.join(orig_args.out_dir, phs_args.sub_dir) jid, out = process_main(phs_args, log_path, dependency=jid_pre, tag=phs_args.sub_dir + phs_args.label) out_files.append(out) if jid is not None: jid_main.append(jid) written_dirs.add(args.out_dir) # Run postprocessor if necessary if len(args.settings) > 1: args.target = root_name + "NULL.primary.nc" args.in_dir = written_dirs args.out_dir = orig_args.out_dir jid, out_file = process_post(args, log_path, out_files, dependency=jid_main, tag="post{}".format(args.label)) if jid is not None: written_dirs.add(args.out_dir) else: out_file = out_files[0] # Run CCI formatting if args.reformat != "": call_reformat(args, log_path, args.reformat, out_file, dependency=jid) # Output root filename and output folders for regression tests return jid, out_file
OracError, Regression, RoundingError) from pyorac.local_defaults import log_dir from pyorac.regression_tests import REGRESSION_TESTS from pyorac.run import process_all, run_regression from pyorac.util import get_repository_revision, warning_format # Calibrate how regression warnings are displayed warnings.formatwarning = warning_format for key, item in defaults.warn_filt.items(): warnings.simplefilter(item, locals()[key]) # Define parser pars = ArgumentParser(description='Run ORAC regression tests.') args_common(pars) args_regress(pars) args_cc4cl(pars) args_preproc(pars) args_main(pars) args_postproc(pars) orig_args = pars.parse_args() orig_args = check_args_regress(orig_args) if orig_args.in_dir is None: orig_args.in_dir = [defaults.data_dir + '/testinput'] if orig_args.out_dir: base_out_dir = orig_args.out_dir else: base_out_dir = defaults.data_dir +'/testoutput'