def read_run_results(run: RunObject, schema: ResultSchema, rundir: str): """Read the run results from the result file that is specified in the workflow result schema. If the file is not found we currently do not raise an error. Parameters ---------- run: flowserv.model.base.RunObject Handle for a workflow run. schema: flowserv.model.template.schema.ResultSchema Workflow result schema specification that contains the reference to the result file key. rundir: string Directory containing run result files. """ filename = os.path.join(rundir, schema.result_file) if os.path.exists(filename): results = util.read_object(filename) # Create a dictionary of result values. values = dict() for col in schema.columns: val = util.jquery(doc=results, path=col.jpath()) col_id = col.column_id if val is None and col.required: msg = "missing value for '{}'".format(col_id) raise err.ConstraintViolationError(msg) elif val is not None: values[col_id] = col.cast(val) run.result = values
def read_run_results(run: RunObject, schema: ResultSchema, runstore: StorageVolume): """Read the run results from the result file that is specified in the workflow result schema. If the file is not found we currently do not raise an error. Parameters ---------- run: flowserv.model.base.RunObject Handle for a workflow run. schema: flowserv.model.template.schema.ResultSchema Workflow result schema specification that contains the reference to the result file key. runstore: flowserv.volume.base.StorageVolume Storage volume containing the run (result) files for a successful workflow run. """ with runstore.load(schema.result_file).open() as f: results = util.read_object(f) # Create a dictionary of result values. values = dict() for col in schema.columns: val = util.jquery(doc=results, path=col.jpath()) col_id = col.column_id if val is None and col.required: msg = "missing value for '{}'".format(col_id) raise err.ConstraintViolationError(msg) elif val is not None: values[col_id] = col.cast(val) run.result = values