def wrapper(request, addon_id=None, *args, **kw):
        """Provides an addon instance to the view given addon_id, which can be
        an Addon pk, guid or a slug."""
        assert addon_id, 'Must provide addon id, guid or slug'

        lookup_field = Addon.get_lookup_field(addon_id)
        if lookup_field == 'slug':
            addon = get_object_or_404(qs(), slug=addon_id)
        else:
            try:
                if lookup_field == 'pk':
                    addon = qs().get(id=addon_id)
                elif lookup_field == 'guid':
                    addon = qs().get(guid=addon_id)
            except Addon.DoesNotExist:
                raise http.Http404
            # Don't get in an infinite loop if addon.slug.isdigit().
            if addon.slug and addon.slug != addon_id:
                url = request.path.replace(addon_id, addon.slug, 1)
                if request.GET:
                    url += '?' + request.GET.urlencode()
                return http.HttpResponsePermanentRedirect(url)

        # If the addon is unlisted it needs either an owner/viewer/dev/support,
        # or an unlisted addon reviewer.
        if not (addon.has_listed_versions()
                or owner_or_unlisted_reviewer(request, addon)):
            raise http.Http404
        return f(request, addon, *args, **kw)
Exemple #2
0
    def change_view(self, request, object_id, form_url='', extra_context=None):
        lookup_field = Addon.get_lookup_field(object_id)
        if lookup_field == 'pk':
            addon = get_object_or_404(Addon.unfiltered.all(), id=object_id)
        else:
            try:
                if lookup_field == 'slug':
                    addon = Addon.unfiltered.all().get(slug=object_id)
                elif lookup_field == 'guid':
                    addon = Addon.unfiltered.all().get(guid=object_id)
            except Addon.DoesNotExist:
                raise http.Http404
            # Don't get in an infinite loop if addon.slug.isdigit().
            if addon.id and addon.id != object_id:
                url = request.path.replace(object_id, str(addon.id), 1)
                if request.GET:
                    url += '?' + request.GET.urlencode()
                return http.HttpResponsePermanentRedirect(url)

        return super(AddonAdmin, self).change_view(
            request,
            object_id,
            form_url,
            extra_context=None,
        )
Exemple #3
0
    def wrapper(request, addon_id=None, *args, **kw):
        """Provides an addon instance to the view given addon_id, which can be
        an Addon pk, guid or a slug."""
        assert addon_id, 'Must provide addon id, guid or slug'

        lookup_field = Addon.get_lookup_field(addon_id)
        if lookup_field == 'slug':
            addon = get_object_or_404(qs(), slug=addon_id)
        else:
            try:
                if lookup_field == 'pk':
                    addon = qs().get(id=addon_id)
                elif lookup_field == 'guid':
                    addon = qs().get(guid=addon_id)
            except Addon.DoesNotExist:
                raise http.Http404
            # Don't get in an infinite loop if addon.slug.isdigit().
            if addon.slug and addon.slug != addon_id:
                url = request.path.replace(addon_id, addon.slug, 1)
                if request.GET:
                    url += '?' + request.GET.urlencode()
                return http.HttpResponsePermanentRedirect(url)

        # If the addon is unlisted it needs either an owner/viewer/dev/support,
        # or an unlisted addon reviewer.
        if not (addon.has_listed_versions() or
                owner_or_unlisted_reviewer(request, addon)):
            raise http.Http404
        return f(request, addon, *args, **kw)
Exemple #4
0
    def change_view(self, request, object_id, form_url='', extra_context=None):
        lookup_field = Addon.get_lookup_field(object_id)
        if lookup_field != 'pk':
            addon = None
            try:
                if lookup_field in ('slug', 'guid'):
                    addon = self.get_queryset(request).get(**{lookup_field: object_id})
            except Addon.DoesNotExist:
                raise http.Http404
            # Don't get in an infinite loop if addon.slug.isdigit().
            if addon and addon.id and addon.id != object_id:
                url = request.path.replace(object_id, str(addon.id), 1)
                if request.GET:
                    url += '?' + request.GET.urlencode()
                return http.HttpResponsePermanentRedirect(url)

        return super().change_view(
            request, object_id, form_url, extra_context=extra_context
        )
Exemple #5
0
    def change_view(self, request, object_id, form_url='', extra_context=None):
        lookup_field = Addon.get_lookup_field(object_id)
        if lookup_field == 'pk':
            addon = get_object_or_404(Addon.objects.all(), id=object_id)
        else:
            try:
                if lookup_field == 'slug':
                    addon = Addon.objects.all().get(slug=object_id)
                elif lookup_field == 'guid':
                    addon = Addon.objects.all().get(guid=object_id)
            except Addon.DoesNotExist:
                raise http.Http404
            # Don't get in an infinite loop if addon.slug.isdigit().
            if addon.id and addon.id != object_id:
                url = request.path.replace(object_id, str(addon.id), 1)
                if request.GET:
                    url += '?' + request.GET.urlencode()
                return http.HttpResponsePermanentRedirect(url)

        return super(AddonAdmin, self).change_view(
            request, object_id, form_url, extra_context=None,
        )
    def wrapper(request, addon_id=None, *args, **kw):
        """Provides an addon instance to the view given addon_id, which can be
        an Addon pk, guid or a slug."""
        assert addon_id, 'Must provide addon id, guid or slug'

        qs = Addon.unfiltered.all

        lookup_field = Addon.get_lookup_field(addon_id)
        if lookup_field == 'pk':
            addon = get_object_or_404(qs(), pk=addon_id)
        else:
            addon = get_object_or_404(qs(), **{lookup_field: addon_id})
            # FIXME: this replace() is fragile, if the add-on slug appears
            # elsewhere in the URL it will break. Instead, we should probably
            # use `request.resolver_match` to rebuild the URL, replacing
            # `kwargs['addon_id']` if present by `addon.pk`.
            url = request.path.replace(addon_id, str(addon.pk), 1)
            if request.GET:
                url += '?' + request.GET.urlencode()
            return http.HttpResponsePermanentRedirect(url)

        return f(request, addon, *args, **kw)