From 8ec966192da8c067aef893d3fc4a047d73f17354 Mon Sep 17 00:00:00 2001 From: Samuel Gaist <samuel.gaist@idiap.ch> Date: Mon, 26 Feb 2018 14:33:29 +0100 Subject: [PATCH] [web][experiment][admin] Added action to delete all cached files related to selected cache This will go through all results and inputs of all experiments that are using this cache. --- beat/web/experiments/admin.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/beat/web/experiments/admin.py b/beat/web/experiments/admin.py index 3a811ac11..ba46d70cd 100755 --- a/beat/web/experiments/admin.py +++ b/beat/web/experiments/admin.py @@ -532,6 +532,27 @@ def delete_file_on_fs(modeladmin, request, queryset): delete_file_on_fs.short_description = 'Delete files from the cache' +def cascading_delete_file_on_fs(modeladmin, request, queryset): + ''' + Delete the files contained in the cache + ''' + + for obj in queryset: + for block in obj.blocks.all(): + experiment = block.experiment + for exp_block in experiment.blocks.all(): + for result in exp_block.results.all(): + if result.cache is not None: + result.cache.delete_files() + for input_ in exp_block.inputs.all(): + if input_.cache is not None: + input_.cache.delete_files() + + +cascading_delete_file_on_fs.short_description = 'Delete files from the ' \ + 'selected and related caches' + + class CachedFile(admin.ModelAdmin): search_fields = [ @@ -555,7 +576,7 @@ class CachedFile(admin.ModelAdmin): # to avoid very slow loading of cached files raw_id_fields = ('blocks',) - actions = [delete_file_on_fs] + actions = [delete_file_on_fs, cascading_delete_file_on_fs] def get_queryset(self, request): qs = super(CachedFile, self).get_queryset(request) -- GitLab