예제 #1
0
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")
예제 #2
0
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)))
예제 #3
0
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)))
예제 #4
0
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)))