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)
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, )
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 )
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)