Esempio n. 1
0
    def delete(self, request, vendor, name, version):

        resource = get_object_or_404(CatalogueResource, vendor=vendor, short_name=name, version=version)
        resource.users.remove(request.user)

        resource_uninstalled.send(sender=resource, user=request.user)

        result = None
        iwidgets_to_remove = None

        if resource.resource_type() == 'widget' and request.GET.get('affected', 'false').lower() == 'true':
            iwidgets_to_remove = get_iwidgets_to_remove(resource, request.user)
            result = {'removedIWidgets': [iwidget.id for iwidget in iwidgets_to_remove]}

        if resource.public is False and resource.users.count() == 0 and resource.groups.count() == 0:
            resource.delete()
        elif resource.resource_type() == 'widget':

            if iwidgets_to_remove is None:
                iwidgets_to_remove = get_iwidgets_to_remove(resource, request.user)

            # We need to iterate the iwidget list as currently only the individual delete method removes Workspace cache
            for iwidget in iwidgets_to_remove:
                iwidget.delete()

        if result is not None:
            return HttpResponse(json.dumps(result), content_type='application/json; charset=UTF-8')
        else:
            return HttpResponse(status=204)
Esempio n. 2
0
    def delete(self, request, vendor, name, version=None):

        if version is not None:
            resources = [
                get_object_or_404(CatalogueResource,
                                  vendor=vendor,
                                  short_name=name,
                                  version=version,
                                  users=request.user)
            ]
        else:
            resources = get_list_or_404(CatalogueResource,
                                        vendor=vendor,
                                        short_name=name,
                                        users=request.user)

        result = {
            "affectedVersions": []
        } if request.GET.get('affected', 'false').lower() == 'true' else None

        for resource in resources:
            resource.users.remove(request.user)
            resource_uninstalled.send(sender=resource, user=request.user)
            if result is not None:
                result['affectedVersions'].append(resource.version)

            if resource.public is False and resource.users.count(
            ) == 0 and resource.groups.count() == 0:
                resource.delete()

        if result is not None:
            return HttpResponse(json.dumps(result),
                                content_type='application/json; charset=UTF-8')
        else:
            return HttpResponse(status=204)
Esempio n. 3
0
    def delete(self, request, vendor, name, version=None):

        if version is not None:
            resources = [get_object_or_404(CatalogueResource, vendor=vendor, short_name=name, version=version, users=request.user)]
        else:
            resources = get_list_or_404(CatalogueResource, vendor=vendor, short_name=name, users=request.user)

        result = {
            "affectedVersions": [],
            "removedIWidgets": []
        } if request.GET.get('affected', 'false').lower() == 'true' else None

        for resource in resources:
            resource.users.remove(request.user)
            resource_uninstalled.send(sender=resource, user=request.user)
            if result is not None:
                result['affectedVersions'].append(resource.version)

            if resource.resource_type() == 'widget':
                iwidgets_to_remove = get_iwidgets_to_remove(resource, request.user)
                if result is not None:
                    result['removedIWidgets'] += [iwidget.id for iwidget in iwidgets_to_remove]

                # We need to iterate the iwidget list as currently only the individual delete method removes Workspace cache
                for iwidget in iwidgets_to_remove:
                    iwidget.delete()

            if resource.public is False and resource.users.count() == 0 and resource.groups.count() == 0:
                resource.delete()

        if result is not None:
            return HttpResponse(json.dumps(result), content_type='application/json; charset=UTF-8')
        else:
            return HttpResponse(status=204)
Esempio n. 4
0
    def delete(self, request, vendor, name, version):

        resource = get_object_or_404(CatalogueResource, vendor=vendor, short_name=name, version=version)
        resource.users.remove(request.user)

        resource_uninstalled.send(sender=resource, user=request.user)

        if resource.public == False and resource.users.count() == 0 and resource.groups.count() == 0:
            resource.delete()

        if resource.resource_type() == 'widget':
            result = {'removedIWidgets': []}

            query = Widget.objects.filter(resource=resource)
            if query.exists():

                widget = query.get()

                # Remove all iwidgets that matches the resource
                iwidgets = IWidget.objects.filter(widget=widget, tab__workspace__creator=request.user)
                for iwidget in iwidgets:
                    result['removedIWidgets'].append(iwidget.id)
                    iwidget.delete()

            if request.GET.get('affected', 'false').lower() == 'true':
                return HttpResponse(json.dumps(result), mimetype='application/json; charset=UTF-8')

        return HttpResponse(status=204)
Esempio n. 5
0
    def delete(self, request, vendor, name, version=None):

        allusers = request.GET.get('allusers', 'false').lower() == 'true'
        if allusers and not request.user.is_superuser:
            return build_error_response(
                request, 403, _('You are not allowed to delete resources'))

        extra_conditions = {
            "users": request.user
        } if not request.user.is_superuser else {}
        if version is not None:
            resources = [
                get_object_or_404(CatalogueResource,
                                  vendor=vendor,
                                  short_name=name,
                                  version=version,
                                  **extra_conditions)
            ]
        else:
            resources = get_list_or_404(CatalogueResource,
                                        vendor=vendor,
                                        short_name=name,
                                        **extra_conditions)

        result = {
            "affectedVersions": []
        } if request.GET.get('affected', 'false').lower() == 'true' else None

        for resource in resources:
            if allusers:
                resource.delete()
                resource_uninstalled.send(sender=resource)
            else:
                resource.users.remove(request.user)
                resource_uninstalled.send(sender=resource, user=request.user)

            if result is not None:
                result['affectedVersions'].append(resource.version)

            if not allusers and resource.public is False and resource.users.count(
            ) == 0 and resource.groups.count() == 0:
                resource.delete()

        if result is not None:
            return HttpResponse(json.dumps(result),
                                content_type='application/json; charset=UTF-8')
        else:
            return HttpResponse(status=204)
Esempio n. 6
0
    def delete(self, request, vendor, name, version=None):

        if version is not None:
            resources = [
                get_object_or_404(
                    CatalogueResource, vendor=vendor, short_name=name, version=version, users=request.user
                )
            ]
        else:
            resources = get_list_or_404(CatalogueResource, vendor=vendor, short_name=name, users=request.user)

        result = (
            {"affectedVersions": [], "removedIWidgets": []}
            if request.GET.get("affected", "false").lower() == "true"
            else None
        )

        for resource in resources:
            resource.users.remove(request.user)
            resource_uninstalled.send(sender=resource, user=request.user)
            if result is not None:
                result["affectedVersions"].append(resource.version)

            if resource.resource_type() == "widget":
                iwidgets_to_remove = get_iwidgets_to_remove(resource, request.user)
                if result is not None:
                    result["removedIWidgets"] += [iwidget.id for iwidget in iwidgets_to_remove]

                # We need to iterate the iwidget list as currently only the individual delete method removes Workspace cache
                for iwidget in iwidgets_to_remove:
                    iwidget.delete()

            if resource.public is False and resource.users.count() == 0 and resource.groups.count() == 0:
                resource.delete()

        if result is not None:
            return HttpResponse(json.dumps(result), content_type="application/json; charset=UTF-8")
        else:
            return HttpResponse(status=204)
Esempio n. 7
0
    def delete(self, request, vendor, name, version=None):

        if version is not None:
            resources = [get_object_or_404(CatalogueResource, vendor=vendor, short_name=name, version=version, users=request.user)]
        else:
            resources = get_list_or_404(CatalogueResource, vendor=vendor, short_name=name, users=request.user)

        result = {
            "affectedVersions": []
        } if request.GET.get('affected', 'false').lower() == 'true' else None

        for resource in resources:
            resource.users.remove(request.user)
            resource_uninstalled.send(sender=resource, user=request.user)
            if result is not None:
                result['affectedVersions'].append(resource.version)

            if resource.public is False and resource.users.count() == 0 and resource.groups.count() == 0:
                resource.delete()

        if result is not None:
            return HttpResponse(json.dumps(result), content_type='application/json; charset=UTF-8')
        else:
            return HttpResponse(status=204)