diff --git a/beat/web/backend/helpers.py b/beat/web/backend/helpers.py index 98f18efecd270eb8b07dde183ca51c9cdf6e0cec..f9c7541d54b2c6d5d99dc959143fe1cd786e9404 100755 --- a/beat/web/backend/helpers.py +++ b/beat/web/backend/helpers.py @@ -712,9 +712,7 @@ def update_job(job): cached_file.update(Block.FAILED) # Update the block - job.block.status = Block.FAILED - job.block.end_date = job.end_date - job.block.save() + job.block.set_failed(job.end_date) # Cancel all the remaining blocks of the experiment splits_to_cancel.extend(cancel_all_blocks(job.block.experiment)) @@ -728,9 +726,7 @@ def update_job(job): mirror_job.end_date = job.end_date mirror_job.save() - mirror_job.block.status = Block.FAILED - mirror_job.block.end_date = job.end_date - mirror_job.block.save() + mirror_job.block.set_failed(job.end_date) # Cancel all the remaining blocks of the experiment splits_to_cancel.extend(cancel_all_blocks(mirror_job.block.experiment)) @@ -795,9 +791,7 @@ def update_job(job): cached_file.update(Block.CANCELLED) # Update the block - job.block.status = Block.CANCELLED - job.block.end_date = job.end_date - job.block.save() + job.block.set_canceled(job.end_date) # Update the experiment update_experiment(job.block.experiment) @@ -874,12 +868,7 @@ def cancel_all_blocks(experiment): # (If possible) Mark the block as cancelled if block.job.splits.filter(status=JobSplit.CANCELLING).count() == 0: - block.status = Block.CANCELLED - block.end_date = datetime.now() - if block.start_date is None: - block.start_date = block.end_date - block.save() - + block.set_canceled() block.job.delete() @@ -888,15 +877,9 @@ def cancel_all_blocks(experiment): .filter(job__mirror=True) for block in mirror_blocks_to_cancel: - block.status = Block.CANCELLED - block.end_date = datetime.now() - if block.start_date is None: - block.start_date = block.end_date - block.save() - + block.set_canceled() block.job.delete() - return splits_to_cancel diff --git a/beat/web/experiments/models/block.py b/beat/web/experiments/models/block.py index 38b48dbb4d66b89bd8e4cc074abffe1985ee8f13..9de128ce3ebba812bf230743efd0457e5585e2eb 100755 --- a/beat/web/experiments/models/block.py +++ b/beat/web/experiments/models/block.py @@ -248,3 +248,36 @@ class Block(models.Model): def is_runnable(self): '''Checks if a block is runnable presently''' return all([ k.status == Block.DONE for k in self.dependencies.all() ]) + + + def set_canceled(self, end_date=None): + """Update the block state to canceled + + Parameters: + end_date (datetime): If provided sets the end_date otherwise + datetime.now() will be used. + """ + + self.status = Block.CANCELLED + + if end_date is None: + end_date = datetime.now() + + self.end_date = end_date + + if self.start_date is None: + self.start_date = self.end_date + + self.save() + + + def set_failed(self, end_date): + """Update the block state to failed + + Parameters: + end_date (datetime): end date on failure + """ + + self.status = Block.FAILED + self.end_date = end_date + self.save()