@@ -463,8 +463,6 @@ def prepare_run_task(self, rerun):
463
463
# retrieve cached results
464
464
if not (rerun or self .task_rerun ):
465
465
result = self .result ()
466
- if result is not None and not result .errored :
467
- return result
468
466
# adding info file with the checksum in case the task was cancelled
469
467
# and the lockfile has to be removed
470
468
with open (self .cache_dir / f"{ self .uid } _info.json" , "w" ) as jsonfile :
@@ -493,12 +491,17 @@ def _run(self, rerun=False, **kwargs):
493
491
# Eagerly retrieve cached - see scenarios in __init__()
494
492
self .hooks .pre_run (self )
495
493
with SoftFileLock (lockfile ):
494
+ if not (rerun or self .task_rerun ):
495
+ result = self .result ()
496
+ if result is not None and not result .errored :
497
+ return result
496
498
cwd = os .getcwd ()
497
499
result = self .prepare_run_task (rerun )
500
+ orig_outdir = self .output_dir
498
501
try :
499
502
self .audit .monitor ()
500
503
self ._run_task ()
501
- result .output = self ._collect_outputs (output_dir = self . output_dir )
504
+ result .output = self ._collect_outputs (output_dir = orig_outdir )
502
505
except Exception :
503
506
etype , eval , etr = sys .exc_info ()
504
507
traceback = format_exception (etype , eval , etr )
@@ -508,14 +511,14 @@ def _run(self, rerun=False, **kwargs):
508
511
finally :
509
512
self .hooks .post_run_task (self , result )
510
513
self .audit .finalize_audit (result )
511
- save (self . output_dir , result = result , task = self )
514
+ save (orig_outdir , result = result , task = self )
512
515
self .output_ = None
513
516
# removing the additional file with the chcksum
514
517
(self .cache_dir / f"{ self .uid } _info.json" ).unlink ()
515
518
# # function etc. shouldn't change anyway, so removing
516
- self ._orig_inputs = dict (
517
- ( k , v ) for ( k , v ) in self ._orig_inputs .items () if not k .startswith ("_" )
518
- )
519
+ self ._orig_inputs = {
520
+ k : v for k , v in self ._orig_inputs .items () if not k .startswith ("_" )
521
+ }
519
522
self .inputs = attr .evolve (self .inputs , ** self ._orig_inputs )
520
523
# no need to propagate this
521
524
del self ._orig_inputs
@@ -1056,8 +1059,13 @@ async def _run(self, submitter=None, rerun=False, **kwargs):
1056
1059
lockfile = self .cache_dir / (self .checksum + ".lock" )
1057
1060
self .hooks .pre_run (self )
1058
1061
async with PydraFileLock (lockfile ):
1062
+ if not (rerun or self .task_rerun ):
1063
+ result = self .result ()
1064
+ if result is not None and not result .errored :
1065
+ return result
1059
1066
cwd = os .getcwd ()
1060
1067
result = self .prepare_run_task (rerun )
1068
+ orig_outdir = self .output_dir
1061
1069
try :
1062
1070
self .audit .monitor ()
1063
1071
await self ._run_task (submitter , rerun = rerun )
@@ -1072,7 +1080,7 @@ async def _run(self, submitter=None, rerun=False, **kwargs):
1072
1080
finally :
1073
1081
self .hooks .post_run_task (self , result )
1074
1082
self .audit .finalize_audit (result = result )
1075
- save (self . output_dir , result = result , task = self )
1083
+ save (orig_outdir , result = result , task = self )
1076
1084
# removing the additional file with the chcksum
1077
1085
(self .cache_dir / f"{ self .uid } _info.json" ).unlink ()
1078
1086
os .chdir (cwd )
0 commit comments