dashboard: add delete and restore feature for Storage, small rework on Endpoint deletition
Showing
| ... | ... | @@ -172,7 +172,9 @@ class StorageList(SuperuserRequiredMixin, FilterMixin, SingleTableView): |
| def get_queryset(self): | ||
| logger.debug('StorageList.get_queryset() called. User: %s', | ||
| unicode(self.request.user)) | ||
| qs = DataStore.get_all() | ||
| cleaned_data = self.search_form.cleaned_data | ||
| stype = cleaned_data.get('stype', "all") | ||
| qs = self.get_queryset_by_stype(stype) | ||
| self.create_fake_get() | ||
| try: | ||
| ... | ... | @@ -183,6 +185,14 @@ class StorageList(SuperuserRequiredMixin, FilterMixin, SingleTableView): |
| return qs | ||
| def get_queryset_by_stype(self, stype): | ||
| if stype == "all": | ||
| return DataStore.get_all() | ||
| elif stype == "destroyed": | ||
| return DataStore.objects.filter(destroyed__isnull=False) | ||
| else: | ||
| return DataStore.objects.filter(destroyed__isnull=True) | ||
| class StorageDetail(SuperuserRequiredMixin, UpdateView): | ||
| model = DataStore | ||
| ... | ... | @@ -273,6 +283,84 @@ class StorageDetail(SuperuserRequiredMixin, UpdateView): |
| return reverse("dashboard.views.storage-detail", kwargs={"pk": ds.id}) | ||
| class StorageDelete(SuperuserRequiredMixin, DeleteView): | ||
| model = DataStore | ||
| success_message = _("Endpoint successfully deleted.") | ||
| def get_template_names(self): | ||
| if self.request.is_ajax(): | ||
| return ['dashboard/confirm/ajax-delete.html'] | ||
| else: | ||
| return ['dashboard/confirm/base-delete.html'] | ||
| def check_destroyable(self): | ||
| object = self.get_object() | ||
| if not object.is_destroyable: | ||
| raise PermissionDenied() | ||
| def get(self, request, *args, **kwargs): | ||
| try: | ||
| self.check_destroyable() | ||
| except PermissionDenied: | ||
| message = ugettext("Another object references" | ||
| " to the selected object.") | ||
| if request.is_ajax(): | ||
| return JsonResponse({"error": message}) | ||
| else: | ||
| messages.warning(request, message) | ||
| return redirect(self.get_success_url()) | ||
| return super(StorageDelete, self).get(request, *args, **kwargs) | ||
| def get_success_url(self): | ||
| return reverse_lazy("dashboard.views.storage-list") | ||
| def delete_obj(self, request, *args, **kwargs): | ||
| self.get_object().destroy() | ||
| def delete(self, request, *args, **kwargs): | ||
| self.check_destroyable() | ||
| self.delete_obj(request, *args, **kwargs) | ||
| if request.is_ajax(): | ||
| return JsonResponse( | ||
| json.dumps({'message': self.success_message}), | ||
| ) | ||
| else: | ||
| messages.success(request, self.success_message) | ||
| return HttpResponseRedirect(self.get_success_url()) | ||
| class StorageRestore(SuperuserRequiredMixin, UpdateView): | ||
| model = DataStore | ||
| fields = ("destroyed",) | ||
| success_message = _("Data store successfully restored.") | ||
| def get_template_names(self): | ||
| if self.request.is_ajax(): | ||
| return ['dashboard/confirm/ajax-restore.html'] | ||
| else: | ||
| return ['dashboard/confirm/base-restore.html'] | ||
| def form_valid(self, form): | ||
| object = self.get_object() | ||
| object.destroyed = None | ||
| object.save() | ||
| if self.request.is_ajax(): | ||
| return JsonResponse( | ||
| json.dumps({'message': self.success_message}), | ||
| ) | ||
| else: | ||
| messages.success(self.request, self.success_message) | ||
| return HttpResponseRedirect(self.get_success_url()) | ||
| def get_success_url(self): | ||
| ds = self.get_object() | ||
| return reverse_lazy("dashboard.views.storage-detail", | ||
| kwargs={"pk": ds.id}) | ||
Please
register
or
sign in
to reply
|
||
| class DiskDetail(SuperuserRequiredMixin, UpdateView): | ||
| model = Disk | ||
| form_class = DiskForm | ||
| ... | ... | @@ -407,14 +495,14 @@ class EndpointDelete(SuperuserRequiredMixin, DeleteView): |
| else: | ||
| return ['dashboard/confirm/base-delete.html'] | ||
| def check_reference(self): | ||
| def check_deletable(self): | ||
| object = self.get_object() | ||
| if object.datastore_set.count() != 0: | ||
| if not object.is_deletable: | ||
| raise PermissionDenied() | ||
| def get(self, request, *args, **kwargs): | ||
| try: | ||
| self.check_reference() | ||
| self.check_deletable() | ||
| except PermissionDenied: | ||
| message = ugettext("Another object references" | ||
| " to the selected object.") | ||
| ... | ... | @@ -432,13 +520,12 @@ class EndpointDelete(SuperuserRequiredMixin, DeleteView): |
| self.get_object().delete() | ||
| def delete(self, request, *args, **kwargs): | ||
| self.check_reference() | ||
| self.check_deletable() | ||
| self.delete_obj(request, *args, **kwargs) | ||
| if request.is_ajax(): | ||
| return HttpResponse( | ||
| return JsonResponse( | ||
| json.dumps({'message': self.success_message}), | ||
| content_type="application/json", | ||
| ) | ||
| else: | ||
| messages.success(request, self.success_message) | ||
| ... | ... | |