def destroy(self, request, pk): entry: Entry = self.get_object() if not entry.is_active: raise ValidationError("specified entry has already been deleted") user: User = request.user if custom_view.is_custom("before_delete_entry_v2", entry.schema.name): custom_view.call_custom("before_delete_entry_v2", entry.schema.name, user, entry) # register operation History for deleting entry user.seth_entry_del(entry) # delete entry entry.delete(deleted_user=user) if custom_view.is_custom("after_delete_entry_v2", entry.schema.name): custom_view.call_custom("after_delete_entry_v2", entry.schema.name, user, entry) # Send notification to the webhook URL job_notify: Job = Job.new_notify_delete_entry(user, entry) job_notify.run() return Response(status=status.HTTP_204_NO_CONTENT)
def do_delete(request, entry_id, recv_data): user = User.objects.get(id=request.user.id) ret = {} if not Entry.objects.filter(id=entry_id).exists(): return HttpResponse('Failed to get an Entry object of specified id', status=400) # update name of Entry object entry = Entry.objects.filter(id=entry_id).get() if custom_view.is_custom("do_delete_entry", entry.schema.name): # do_delete custom view resp = custom_view.call_custom("do_delete_entry", entry.schema.name, request, user, entry) # If custom_view returns available response this returns it to user, # or continues default processing. if resp: return resp # set deleted flag in advance because deleting processing taks long time entry.is_active = False entry.save(update_fields=['is_active']) # save deleting Entry name before do it ret['name'] = entry.name # register operation History for deleting entry user.seth_entry_del(entry) # Create a new job to delete entry and run it job_delete_entry = Job.new_delete(user, entry) job_notify_event = Job.new_notify_delete_entry(user, entry) # This prioritizes notifying job rather than deleting entry if job_delete_entry.dependent_job: job_notify_event.dependent_job = job_delete_entry.dependent_job job_notify_event.save(update_fields=['dependent_job']) job_notify_event.run() # This update dependent job of deleting entry job job_delete_entry.dependent_job = job_notify_event job_delete_entry.save(update_fields=['dependent_job']) job_delete_entry.run() return JsonResponse(ret)
def delete(self, request, *args, **kwargs): # checks mandatory parameters are specified if not all([x in request.data for x in ["entity", "entry"]]): return Response( 'Parameter "entity" and "entry" are mandatory', status=status.HTTP_400_BAD_REQUEST, ) entity = Entity.objects.filter(name=request.data["entity"]).first() if not entity: return Response( "Failed to find specified Entity (%s)" % request.data["entity"], status=status.HTTP_404_NOT_FOUND, ) entry = Entry.objects.filter(name=request.data["entry"], schema=entity).first() if not entry: return Response( "Failed to find specified Entry (%s)" % request.data["entry"], status=status.HTTP_404_NOT_FOUND, ) # permission check if not request.user.has_permission( entry, ACLType.Full) or not request.user.has_permission( entity, ACLType.Readable): return Response("Permission denied to operate", status=status.HTTP_400_BAD_REQUEST) # Delete the specified entry then return its id, if is active if entry.is_active: # create a new Job to delete entry and run it job = Job.new_delete(request.user, entry) # create and run notify delete entry task job_notify = Job.new_notify_delete_entry(request.user, entry) job_notify.run() job.dependent_job = job_notify job.save(update_fields=["dependent_job"]) job.run() return Response({"id": entry.id})
def do_delete(request, entry_id, recv_data): entry, error = get_obj_with_check_perm(request.user, Entry, entry_id, ACLType.Full) if error: return error if custom_view.is_custom("do_delete_entry", entry.schema.name): # do_delete custom view resp = custom_view.call_custom("do_delete_entry", entry.schema.name, request, request.user, entry) # If custom_view returns available response this returns it to user, # or continues default processing. if resp: return resp # set deleted flag in advance because deleting processing taks long time entry.is_active = False entry.save(update_fields=["is_active"]) ret = {} # save deleting Entry name before do it ret["name"] = entry.name # register operation History for deleting entry request.user.seth_entry_del(entry) # Create a new job to delete entry and run it job_delete_entry = Job.new_delete(request.user, entry) job_notify_event = Job.new_notify_delete_entry(request.user, entry) # This prioritizes notifying job rather than deleting entry if job_delete_entry.dependent_job: job_notify_event.dependent_job = job_delete_entry.dependent_job job_notify_event.save(update_fields=["dependent_job"]) job_notify_event.run() # This update dependent job of deleting entry job job_delete_entry.dependent_job = job_notify_event job_delete_entry.save(update_fields=["dependent_job"]) job_delete_entry.run() return JsonResponse(ret)