def _filter(self, req, filters, sorting=None): form = ApiSearchForm(filters) if form.is_valid(): qs = Webapp.from_search().facet("category") return _filter_search(self.req, qs, form.cleaned_data, sorting)._build_query() else: return form.errors.copy()
def get_list(self, request=None, **kwargs): form = ApiSearchForm(request.GET if request else None) if not form.is_valid(): raise self.form_errors(form) # Pluck out status first since it forms part of the base query, but # only for privileged users. status = form.cleaned_data['status'] if status != amo.STATUS_PUBLIC and not ( acl.action_allowed(request, 'Apps', 'Review') or acl.action_allowed(request, 'Admin', '%')): return http.HttpUnauthorized( content=json.dumps( {'reason': 'Unauthorized to filter by status.'})) # Search specific processing of the results. region = getattr(request, 'REGION', mkt.regions.WORLDWIDE) qs = _get_query(region, gaia=request.GAIA, mobile=request.MOBILE, tablet=request.TABLET, status=status) qs = _filter_search(request, qs, form.cleaned_data, region=region) paginator = self._meta.paginator_class(request.GET, qs, resource_uri=self.get_resource_list_uri(), limit=self._meta.limit) page = paginator.page() # Rehydrate the results as per tastypie. objs = [self.build_bundle(obj=obj, request=request) for obj in page['objects']] page['objects'] = [self.full_dehydrate(bundle) for bundle in objs] # This isn't as quite a full as a full TastyPie meta object, # but at least it's namespaced that way and ready to expand. return self.create_response(request, page)
def _filter(self, req, filters, **kwargs): form = ApiSearchForm(filters) if form.is_valid(): qs = Webapp.from_search(self.req, **kwargs) return _filter_search( self.req, qs, form.cleaned_data)._build_query() else: return form.errors.copy()
def _filter(self, req, filters, sorting=None): form = ApiSearchForm(filters) if form.is_valid(): qs = Webapp.from_search().facet('category') return _filter_search(self.req, qs, form.cleaned_data, sorting)._build_query() else: return form.errors.copy()
def get_list(self, request=None, **kwargs): form = ApiSearchForm(request.GET if request else None) if not form.is_valid(): raise self.form_errors(form) # Search specific processing of the results. qs = _get_query(request, form, form.cleaned_data) qs = _filter_search(qs, form.cleaned_data) res = amo.utils.paginate(request, qs) # Rehydrate the results as per tastypie. bundles = [self.build_bundle(obj=obj, request=request) for obj in res.object_list] objs = [self.full_dehydrate(bundle) for bundle in bundles] # This isn't as quite a full as a full TastyPie meta object, # but at least it's namespaced that way and ready to expand. return self.create_response(request, {"objects": objs, "meta": {}})
def get_list(self, request=None, **kwargs): form = ApiSearchForm(request.GET if request else None) if not form.is_valid(): raise self.form_errors(form) # Search specific processing of the results. region = getattr(request, 'REGION', mkt.regions.WORLDWIDE) qs = _get_query(region, gaia=request.GAIA, mobile=request.MOBILE, tablet=request.TABLET) qs = _filter_search(qs, form.cleaned_data, region=region) res = amo.utils.paginate(request, qs) # Rehydrate the results as per tastypie. bundles = [self.build_bundle(obj=obj, request=request) for obj in res.object_list] objs = [self.full_dehydrate(bundle) for bundle in bundles] # This isn't as quite a full as a full TastyPie meta object, # but at least it's namespaced that way and ready to expand. return self.create_response(request, {'objects': objs, 'meta': {}})
def get_list(self, request=None, **kwargs): form = ApiSearchForm(request.GET if request else None) if not form.is_valid(): raise self.form_errors(form) # Search specific processing of the results. qs = _get_query(request, form, form.cleaned_data) qs = _filter_search(qs, form.cleaned_data) res = amo.utils.paginate(request, qs) # Rehydrate the results as per tastypie. bundles = [ self.build_bundle(obj=obj, request=request) for obj in res.object_list ] objs = [self.full_dehydrate(bundle) for bundle in bundles] # This isn't as quite a full as a full TastyPie meta object, # but at least it's namespaced that way and ready to expand. return self.create_response(request, {'objects': objs, 'meta': {}})
def get_list(self, request=None, **kwargs): form = ApiSearchForm(request.GET if request else None) if not form.is_valid(): raise self.form_errors(form) is_admin = acl.action_allowed(request, "Admin", "%") is_reviewer = acl.action_allowed(request, "Apps", "Review") # Pluck out status and addon type first since it forms part of the base # query, but only for privileged users. status = form.cleaned_data["status"] addon_type = form.cleaned_data["type"] base_filters = {"type": addon_type} if status and (status == "any" or status != amo.STATUS_PUBLIC): if is_admin or is_reviewer: base_filters["status"] = status else: return http.HttpUnauthorized(content=json.dumps({"reason": _("Unauthorized to filter by status.")})) # Search specific processing of the results. region = getattr(request, "REGION", mkt.regions.WORLDWIDE) qs = _get_query(region, gaia=request.GAIA, mobile=request.MOBILE, tablet=request.TABLET, filters=base_filters) qs = _filter_search(request, qs, form.cleaned_data, region=region) paginator = self._meta.paginator_class( request.GET, qs, resource_uri=self.get_resource_list_uri(), limit=self._meta.limit ) page = paginator.page() # Rehydrate the results as per tastypie. objs = [self.build_bundle(obj=obj, request=request) for obj in page["objects"]] page["objects"] = [self.full_dehydrate(bundle) for bundle in objs] # This isn't as quite a full as a full TastyPie meta object, # but at least it's namespaced that way and ready to expand. return self.create_response(request, page)
def get_search_data(self, request): form = ApiSearchForm(request.GET if request else None) if not form.is_valid(): raise self.form_errors(form) return form.cleaned_data
def _get_search_form(request): form = ApiSearchForm() fields = [f.name for f in form.visible_fields() + form.hidden_fields()] get = dict((k, v) for k, v in request.GET.items() if k in fields) return ApiSearchForm(get or None)