def test_load_cis_err(r_file): with pytest.raises(ProcessError) as e: load_cis(r_file) assert ( str(vars(e)["_excinfo"][1]) == "RRuntimeError: Data file must be a RDS file or " "a Rdata file containing a ClimdexInput object of the given name" )
def _handler(self, request, response): climdex_input, freq, func, loglevel, output_file = process_inputs_alpha( request.inputs, temp_pctl_inputs, self.workdir) log_handler( self, response, "Starting Process", logger, log_level=loglevel, process_step="start", ) robjects.r("library(climdex.pcic)") vectors = [] counter = 1 total = len(climdex_input) for input in climdex_input: log_handler( self, response, f"Loading climdexInput from R data file {counter}/{total}", logger, log_level=loglevel, process_step="load_rdata", ) cis = load_cis(input) log_handler( self, response, f"Processing climdex.{func} for file {counter}/{total}", logger, log_level=loglevel, process_step="process", ) for ci_name, ci in cis.items(): try: robjects.r.assign("ci", ci) mothly_pct = robjects.r(f"climdex.{func}(ci, '{freq}')") except RRuntimeError as e: raise ProcessError(msg=f"{type(e).__name__}: {str(e)}") vector_name = f"{func}{counter}_{ci_name}" robjects.r.assign(vector_name, mothly_pct) vectors.append(vector_name) counter += 1 log_handler( self, response, f"Saving {func} as R data file", logger, log_level=loglevel, process_step="save_rdata", ) output_path = os.path.join(self.workdir, output_file) robjects.r["save"](*vectors, file=output_path) log_handler( self, response, "Building final output", logger, log_level=loglevel, process_step="build_output", ) response.outputs["rda_output"].file = output_path # Clear R global env robjects.r("rm(list=ls())") log_handler( self, response, "Process Complete", logger, log_level=loglevel, process_step="complete", ) return response
def _handler(self, request, response): ( center_mean_on_last_day, climdex_input, freq, loglevel, num_days, output_file, ) = process_inputs_alpha(request.inputs, rxnday_inputs, self.workdir) log_handler( self, response, "Starting Process", logger, log_level=loglevel, process_step="start", ) robjects.r("library(climdex.pcic)") vectors = [] counter = 1 total = len(climdex_input) for input in climdex_input: log_handler( self, response, f"Loading climdexInput from R data file {counter}/{total}", logger, log_level=loglevel, process_step="load_rdata", ) cis = load_cis(input) log_handler( self, response, f"Processing Monthly Maximum {num_days}-day Precipitation for file {counter}/{total}", logger, log_level=loglevel, process_step="process", ) for ci_name, ci in cis.items(): try: robjects.r.assign("ci", ci) rxnday = self.rxnday_func(ci, num_days, freq, center_mean_on_last_day) except RRuntimeError as e: raise ProcessError(msg=f"{type(e).__name__}: {str(e)}") vector_name = f"rx{num_days}day{counter}_{ci_name}" robjects.r.assign(vector_name, rxnday) vectors.append(vector_name) counter += 1 log_handler( self, response, f"Saving rx{num_days}day vector to R data file", logger, log_level=loglevel, process_step="save_rdata", ) output_path = os.path.join(self.workdir, output_file) robjects.r["save"](*vectors, file=output_path) log_handler( self, response, "Building final output", logger, log_level=loglevel, process_step="build_output", ) response.outputs["rda_output"].file = output_path # Clear R global env robjects.r("rm(list=ls())") log_handler( self, response, "Process Complete", logger, log_level=loglevel, process_step="complete", ) return response
def _handler(self, request, response): climdex_input, loglevel, output_file = process_inputs_alpha( request.inputs, sdii_inputs, self.workdir) log_handler( self, response, "Starting Process", logger, log_level=loglevel, process_step="start", ) climdex = get_package("climdex.pcic") vectors = [] counter = 1 total = len(climdex_input) for input in climdex_input: log_handler( self, response, f"Loading climdexInput from R data file {counter}/{total}", logger, log_level=loglevel, process_step="load_rdata", ) cis = load_cis(input) log_handler( self, response, f"Processing the mean daily diurnal temperature range for file {counter}/{total}", logger, log_level=loglevel, process_step="process", ) for ci_name, ci in cis.items(): try: robjects.r.assign("ci", ci) sdii = climdex.climdex_sdii(ci) except RRuntimeError as e: raise ProcessError(msg=f"{type(e).__name__}: {str(e)}") vector_name = f"sdii{counter}_{ci_name}" robjects.r.assign(vector_name, sdii) vectors.append(vector_name) counter += 1 log_handler( self, response, "Saving dtr vector to R data file", logger, log_level=loglevel, process_step="save_rdata", ) output_path = os.path.join(self.workdir, output_file) robjects.r["save"](*vectors, file=output_path) log_handler( self, response, "Building final output", logger, log_level=loglevel, process_step="build_output", ) response.outputs["rda_output"].file = output_path # Clear R global env robjects.r("rm(list=ls())") log_handler( self, response, "Process Complete", logger, log_level=loglevel, process_step="complete", ) return response
def _handler(self, request, response): climdex_input, loglevel, output_file, threshold = process_inputs_alpha( request.inputs, rmm_inputs, self.workdir) log_handler( self, response, "Starting Process", logger, log_level=loglevel, process_step="start", ) climdex = get_package("climdex.pcic") vectors = [] counter = 1 total = len(climdex_input) for input in climdex_input: log_handler( self, response, f"Loading climdexInput from R data file {counter}/{total}", logger, log_level=loglevel, process_step="load_rdata", ) cis = load_cis(input) log_handler( self, response, f"Processing the annual count of days where daily precipitation is more than {threshold}mm per day for file {counter}/{total}", logger, log_level=loglevel, process_step="process", ) for ci_name, ci in cis.items(): try: robjects.r.assign("ci", ci) count_days = self.threshold_func(threshold, ci) except RRuntimeError as e: raise ProcessError(msg=f"{type(e).__name__}: {str(e)}") vector_name = f"r{threshold}mm{counter}_{ci_name}" robjects.r.assign(vector_name, count_days) vectors.append(vector_name) counter += 1 log_handler( self, response, f"Saving climdex.r{threshold}mm outputs to R data file", logger, log_level=loglevel, process_step="save_rdata", ) output_path = os.path.join(self.workdir, output_file) robjects.r["save"](*vectors, file=output_path) log_handler( self, response, "Building final output", logger, log_level=loglevel, process_step="build_output", ) response.outputs["rda_output"].file = output_path # Clear R global env robjects.r("rm(list=ls())") log_handler( self, response, "Process Complete", logger, log_level=loglevel, process_step="complete", ) return response
def test_load_cis(r_file): cis = load_cis(r_file) assert len(cis) > 0 for ci in cis.values(): assert ci.rclass[0] == "climdexInput"