def app_search(request, template=None): form = ESSearchForm(request.GET or {}, type=amo.ADDON_WEBAPP) form.is_valid() # Let the form try to clean data. query = form.cleaned_data qs = (Webapp.search().query(or_=name_query(query['q'])) .filter(type=amo.ADDON_WEBAPP, status=amo.STATUS_PUBLIC, is_disabled=False) .facet(tags={'terms': {'field': 'tag'}}, categories={'terms': {'field': 'category', 'size': 100}})) if query.get('tag'): qs = qs.filter(tag=query['tag']) if query.get('cat'): qs = qs.filter(category=query['cat']) if query.get('sort'): mapping = {'downloads': '-weekly_downloads', 'rating': '-bayesian_rating', 'created': '-created', 'name': '-name_sort', 'hotness': '-hotness'} qs = qs.order_by(mapping[query['sort']]) pager = amo.utils.paginate(request, qs) facets = pager.object_list.facets ctx = { 'pager': pager, 'query': query, 'form': form, 'sorting': sort_sidebar(request, query, form), 'categories': category_sidebar(request, query, facets), 'tags': tag_sidebar(request, query, facets), } return jingo.render(request, template, ctx)
def app_search(request, tag_name=None, template=None): form = ESSearchForm(request.GET.copy() or {}, type=amo.ADDON_WEBAPP) form.is_valid() # Let the form try to clean data. query = form.cleaned_data # TODO(apps): We should figure out if we really want tags for apps. if tag_name: query['tag'] = tag_name qs = (Webapp.search().filter(type=amo.ADDON_WEBAPP, status=amo.STATUS_PUBLIC, is_disabled=False).facet( tags={'terms': { 'field': 'tag' }}, categories={ 'terms': { 'field': 'category', 'size': 200 } })) filters = ['cat', 'price', 'sort', 'tag'] mapping = { 'downloads': '-weekly_downloads', 'rating': '-bayesian_rating', 'created': '-created', 'name': 'name_sort', 'hotness': '-hotness', 'price': 'price' } qs = _filter_search(request, qs, query, filters, mapping, [amo.ADDON_WEBAPP]) pager = amo.utils.paginate(request, qs) facets = pager.object_list.facets sort, extra_sort = split_choices(form.sort_choices, 'price') ctx = { 'is_pjax': request.META.get('HTTP_X_PJAX'), 'pager': pager, 'query': query, 'form': form, 'sorting': sort_sidebar(request, query, form), 'sort_opts': sort, 'extra_sort_opts': extra_sort, 'sort': query.get('sort'), 'webapp': True, } if not ctx['is_pjax']: ctx.update({ 'prices': price_sidebar(request, query, facets), 'categories': category_sidebar(request, query, facets), 'tags': tag_sidebar(request, query, facets), }) return jingo.render(request, template, ctx)
def app_search(request, tag_name=None, template=None): form = ESSearchForm(request.GET.copy() or {}, type=amo.ADDON_WEBAPP) form.is_valid() # Let the form try to clean data. query = form.cleaned_data # TODO(apps): We should figure out if we really want tags for apps. if tag_name: query["tag"] = tag_name qs = ( Webapp.search() .filter(type=amo.ADDON_WEBAPP, status=amo.STATUS_PUBLIC, is_disabled=False) .facet(tags={"terms": {"field": "tag"}}, categories={"terms": {"field": "category", "size": 200}}) ) filters = ["cat", "price", "sort", "tag"] mapping = { "downloads": "-weekly_downloads", "rating": "-bayesian_rating", "created": "-created", "name": "name_sort", "hotness": "-hotness", "price": "price", } qs = _filter_search(request, qs, query, filters, mapping, [amo.ADDON_WEBAPP]) pager = amo.utils.paginate(request, qs) facets = pager.object_list.facets sort, extra_sort = split_choices(form.sort_choices, "price") ctx = { "is_pjax": request.META.get("HTTP_X_PJAX"), "pager": pager, "query": query, "form": form, "sorting": sort_sidebar(request, query, form), "sort_opts": sort, "extra_sort_opts": extra_sort, "sort": query.get("sort"), "webapp": True, } if not ctx["is_pjax"]: ctx.update( { "prices": price_sidebar(request, query, facets), "categories": category_sidebar(request, query, facets), "tags": tag_sidebar(request, query, facets), } ) return jingo.render(request, template, ctx)
def app_search(request, tag_name=None, template=None): form = ESSearchForm(request.GET.copy() or {}, type=amo.ADDON_WEBAPP) form.is_valid() # Let the form try to clean data. query = form.cleaned_data # TODO(apps): We should figure out if we really want tags for apps. if tag_name: query['tag'] = tag_name qs = (Webapp.search() .filter(type=amo.ADDON_WEBAPP, status=amo.STATUS_PUBLIC, is_disabled=False) .facet(tags={'terms': {'field': 'tag'}}, categories={'terms': {'field': 'category', 'size': 200}})) filters = ['cat', 'price', 'sort', 'tag'] mapping = {'downloads': '-weekly_downloads', 'rating': '-bayesian_rating', 'created': '-created', 'name': 'name_sort', 'hotness': '-hotness', 'price': 'price'} qs = _filter_search(request, qs, query, filters, mapping, [amo.ADDON_WEBAPP]) pager = amo.utils.paginate(request, qs) facets = pager.object_list.facets sort, extra_sort = split_choices(form.sort_choices, 'price') ctx = { 'is_pjax': request.META.get('HTTP_X_PJAX'), 'pager': pager, 'query': query, 'form': form, 'sorting': sort_sidebar(request, query, form), 'sort_opts': sort, 'extra_sort_opts': extra_sort, 'sort': query.get('sort'), 'webapp': True, } if not ctx['is_pjax']: ctx.update({ 'prices': price_sidebar(request, query, facets), 'categories': category_sidebar(request, query, facets), 'tags': tag_sidebar(request, query, facets), }) return jingo.render(request, template, ctx)
def app_search(request, template=None): form = ESSearchForm(request.GET or {}, type=amo.ADDON_WEBAPP) form.is_valid() # Let the form try to clean data. query = form.cleaned_data qs = (Webapp.search().query(or_=name_query(query['q'])).filter( type=amo.ADDON_WEBAPP, status=amo.STATUS_PUBLIC, is_disabled=False).facet( tags={'terms': { 'field': 'tag' }}, categories={'terms': { 'field': 'category', 'size': 100 }})) if query.get('tag'): qs = qs.filter(tag=query['tag']) if query.get('cat'): qs = qs.filter(category=query['cat']) if query.get('sort'): mapping = { 'downloads': '-weekly_downloads', 'rating': '-bayesian_rating', 'created': '-created', 'name': '-name_sort', 'hotness': '-hotness' } qs = qs.order_by(mapping[query['sort']]) pager = amo.utils.paginate(request, qs) facets = pager.object_list.facets ctx = { 'is_pjax': request.META.get('HTTP_X_PJAX'), 'pager': pager, 'query': query, 'form': form, 'sorting': sort_sidebar(request, query, form), 'sort_opts': form.fields['sort'].choices, } if not ctx['is_pjax']: ctx.update({ 'categories': category_sidebar(request, query, facets), 'tags': tag_sidebar(request, query, facets), }) return jingo.render(request, template, ctx)
def app_search(request, template=None): form = ESSearchForm(request.GET or {}, type=amo.ADDON_WEBAPP) form.is_valid() # Let the form try to clean data. query = form.cleaned_data qs = ( Webapp.search() .query(or_=name_query(query["q"])) .filter(type=amo.ADDON_WEBAPP, status=amo.STATUS_PUBLIC, is_disabled=False) .facet(tags={"terms": {"field": "tag"}}, categories={"terms": {"field": "category", "size": 100}}) ) if query.get("tag"): qs = qs.filter(tag=query["tag"]) if query.get("cat"): qs = qs.filter(category=query["cat"]) if query.get("sort"): mapping = { "downloads": "-weekly_downloads", "rating": "-bayesian_rating", "created": "-created", "name": "-name_sort", "hotness": "-hotness", } qs = qs.order_by(mapping[query["sort"]]) pager = amo.utils.paginate(request, qs) facets = pager.object_list.facets ctx = { "pager": pager, "query": query, "form": form, "sorting": sort_sidebar(request, query, form), "categories": category_sidebar(request, query, facets), "tags": tag_sidebar(request, query, facets), } return jingo.render(request, template, ctx)