Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)