def toggle_delete(request): """ Delete an object. """ type_map = dict(job=Job, data=Data, recipe=Analysis) uid = request.POST.get('uid', "") obj_type = request.POST.get('type', '') obj_model = type_map.get(obj_type) if not obj_model: return ajax_error(f"Invalid data type:{obj_type}") obj = obj_model.objects.filter(uid=uid).first() if not obj: return ajax_error("Object does not exists.") access = auth.is_writable(user=request.user, project=obj.project) # Toggle the delete state if the user has write access if access: auth.delete_object(obj=obj, request=request) # Re-set project counts obj.project.set_counts(save=True) counts = obj_model.objects.filter(project=obj.project, deleted=False).count() return ajax_success(msg='Toggled delete', counts=counts) return ajax_error("Invalid action")
def data_delete(request, uid): data = Data.objects.filter(uid=uid).first() auth.delete_object(obj=data, request=request) msg = f"Deleted <b>{data.name}</b>." if data.deleted else f"Restored <b>{data.name}</b>." messages.success(request, mark_safe(msg)) return redirect(reverse("data_list", kwargs=dict(uid=data.project.uid)))
def job_delete(request, uid): job = Job.objects.filter(uid=uid).first() running_job = job.state == Job.RUNNING and not job.deleted if running_job: messages.error(request, "Can not delete a running job. Wait until it finishes.") return redirect(job.url()) auth.delete_object(obj=job, request=request) msg = f"Deleted <b>{job.name}</b>." if job.deleted else f"Restored <b>{job.name}</b>." messages.success(request, mark_safe(msg)) return redirect(reverse("job_list", kwargs=dict(uid=job.project.uid)))
def recipe_delete(request, uid): recipe = Analysis.objects.filter(uid=uid).first() clones = Analysis.objects.filter(root=recipe, deleted=False) if recipe.is_root and clones.exists(): # Check if a root recipe msg = "Can not delete a cloned recipe." messages.success(request, msg) else: auth.delete_object(obj=recipe, request=request) msg = f"Deleted <b>{recipe.name}</b>." if recipe.deleted else f"Restored <b>{recipe.name}</b>." messages.success(request, mark_safe(msg)) return redirect(reverse("recipe_list", kwargs=dict(uid=recipe.project.uid)))