Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
result = self.result()
if result is not None:
return result
# Let only one equivalent process run
odir = self.output_dir
if not self.can_resume and odir.exists():
shutil.rmtree(odir)
cwd = os.getcwd()
odir.mkdir(parents=False, exist_ok=True if self.can_resume else False)
orig_inputs = attr.asdict(self.inputs)
map_copyfiles = copyfile_input(self.inputs, self.output_dir)
modified_inputs = template_update(self.inputs, map_copyfiles)
if modified_inputs:
self.inputs = attr.evolve(self.inputs, **modified_inputs)
self.audit.start_audit(odir)
result = Result(output=None, runtime=None, errored=False)
self.hooks.pre_run_task(self)
try:
self.audit.monitor()
self._run_task()
result.output = self._collect_outputs()
except Exception as e:
record_error(self.output_dir, e)
result.errored = True
raise
finally:
self.hooks.post_run_task(self, result)
self.audit.finalize_audit(result)
save(odir, result=result, task=self)
for k, v in orig_inputs.items():
setattr(self.inputs, k, v)
os.chdir(cwd)
result = self.result()
if result is not None:
return result
# Let only one equivalent process run
odir = self.output_dir
if not self.can_resume and odir.exists():
shutil.rmtree(odir)
cwd = os.getcwd()
odir.mkdir(parents=False, exist_ok=True if self.can_resume else False)
orig_inputs = attr.asdict(self.inputs)
map_copyfiles = copyfile_input(self.inputs, self.output_dir)
modified_inputs = template_update(self.inputs, map_copyfiles)
if modified_inputs:
self.inputs = attr.evolve(self.inputs, **modified_inputs)
self.audit.start_audit(odir)
result = Result(output=None, runtime=None, errored=False)
self.hooks.pre_run_task(self)
try:
self.audit.monitor()
self._run_task()
result.output = self._collect_outputs()
except Exception as e:
record_error(self.output_dir, e)
result.errored = True
raise
finally:
self.hooks.post_run_task(self, result)
self.audit.finalize_audit(result)
save(odir, result=result, task=self)
for k, v in orig_inputs.items():
setattr(self.inputs, k, v)
os.chdir(cwd)
# if the task is a wf, than the propagate_rerun should be also set
if is_workflow(task):
task.propagate_rerun = self.propagate_rerun
task.cache_locations = task._cache_locations + self.cache_locations
self.create_connections(task)
# TODO add signal handler for processes killed after lock acquisition
self.hooks.pre_run(self)
with SoftFileLock(lockfile):
# # Let only one equivalent process run
odir = self.output_dir
if not self.can_resume and odir.exists():
shutil.rmtree(odir)
cwd = os.getcwd()
odir.mkdir(parents=False, exist_ok=True if self.can_resume else False)
self.audit.start_audit(odir=odir)
result = Result(output=None, runtime=None, errored=False)
self.hooks.pre_run_task(self)
try:
self.audit.monitor()
await self._run_task(submitter, rerun=rerun)
result.output = self._collect_outputs()
except Exception as e:
record_error(self.output_dir, e)
result.errored = True
self._errored = True
raise
finally:
self.hooks.post_run_task(self, result)
self.audit.finalize_audit(result=result)
save(odir, result=result, task=self)
os.chdir(cwd)
self.hooks.post_run(self, result)
----------
state_index : :obj: `int`
index of the element for task with splitter and multiple states
return_inputs : :obj: `bool`, :obj:`str`
if True or "val" result is returned together with values of the input fields,
if "ind" result is returned together with indices of the input fields
Returns
-------
result :
"""
# TODO: check if result is available in load_result and
# return a future if not
if self.errored:
return Result(output=None, runtime=None, errored=True)
if self.state:
if state_index is None:
# if state_index=None, collecting all results
if self.state.combiner:
return self._combined_output(return_inputs=return_inputs)
else:
results = []
for checksum in self.checksum_states():
result = load_result(checksum, self.cache_locations)
if result is None:
return None
results.append(result)
if return_inputs is True or return_inputs == "val":
return list(zip(self.state.states_val, results))
elif return_inputs == "ind":
return list(zip(self.state.states_ind, results))
def load_and_run(
task_pkl, ind=None, rerun=False, submitter=None, plugin=None, **kwargs
):
"""
loading a task from a pickle file, settings proper input
and running the task
"""
try:
task = load_task(task_pkl=task_pkl, ind=ind)
except Exception as excinfo:
if task_pkl.parent.exists():
etype, eval, etr = sys.exc_info()
traceback = format_exception(etype, eval, etr)
errorfile = record_error(task_pkl.parent, error=traceback)
result = Result(output=None, runtime=None, errored=True)
save(task_pkl.parent, result=result)
raise
resultfile = task.output_dir / "_result.pklz"
try:
task(rerun=rerun, plugin=plugin, submitter=submitter, **kwargs)
except Exception as excinfo:
# creating result and error files if missing
errorfile = task.output_dir / "_error.pklz"
if not resultfile.exists():
etype, eval, etr = sys.exc_info()
traceback = format_exception(etype, eval, etr)
errorfile = record_error(task.output_dir, error=traceback)
result = Result(output=None, runtime=None, errored=True)
save(task.output_dir, result=result)
raise type(excinfo)(