예제 #1
0
파일: views.py 프로젝트: MaxDumont/zamboni
def _search(request, category=None):
    ctx = {'browse': True}
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)

    if category is not None:
        qs = Category.objects.filter(type=amo.ADDON_WEBAPP, weight__gte=0)
        ctx['category'] = get_object_or_404(qs, slug=category)
        ctx['featured'] = Webapp.featured(cat=ctx['category'], region=region,
            mobile=request.MOBILE)

        # Do a search filtered by this category and sort by Weekly Downloads.
        # TODO: Listen to andy and do not modify `request.GET` but at least
        # the traceback is fixed now.
        request.GET = request.GET.copy()
        request.GET.update({'cat': ctx['category'].id})
        if not request.GET.get('sort'):
            request.GET['sort'] = 'downloads'
    else:
        ctx['featured'] = Webapp.featured(region=region, mobile=request.MOBILE)

    # Always show three (or zero) featured apps - nothing in between.
    ctx['featured'] = ctx['featured'][:0 if len(ctx['featured']) < 3 else 3]

    ctx.update(_app_search(request, category=ctx.get('category'), browse=True))

    # If category is not listed as a facet, then remove redirect to search.
    if ctx.get('redirect'):
        return http.HttpResponseRedirect(ctx['redirect'])

    return jingo.render(request, 'search/results.html', ctx)
예제 #2
0
파일: views.py 프로젝트: gregglind/zamboni
def _search(request, category=None):
    ctx = {'browse': True}
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)

    if category is not None:
        qs = Category.objects.filter(type=amo.ADDON_WEBAPP, weight__gte=0)
        ctx['category'] = get_object_or_404(qs, slug=category)
        ctx['featured'] = Webapp.featured(cat=ctx['category'], region=region)

        # Do a search filtered by this category and sort by Weekly Downloads.
        # TODO: Listen to andy and do not modify `request.GET` but at least
        # the traceback is fixed now.
        request.GET = request.GET.copy()
        request.GET.update({'cat': ctx['category'].id})
        if not request.GET.get('sort'):
            request.GET['sort'] = 'downloads'
    else:
        ctx['featured'] = Webapp.featured(region=region)

    # Always show three (or zero) featured apps - nothing in between.
    ctx['featured'] = ctx['featured'][:0 if len(ctx['featured']) < 3 else 3]

    ctx.update(_app_search(request, category=ctx.get('category'), browse=True))

    # If category is not listed as a facet, then remove redirect to search.
    if ctx.get('redirect'):
        return http.HttpResponseRedirect(ctx['redirect'])

    return jingo.render(request, 'search/results.html', ctx)
예제 #3
0
파일: views.py 프로젝트: sjhewitt/zamboni
def _landing(request, category=None):
    if category:
        category = get_object_or_404(Category.objects.filter(type=amo.ADDON_WEBAPP, weight__gte=0), slug=category)
        featured = Webapp.featured(category)
        popular = Webapp.popular().filter(category=category.id)
    else:
        popular = Webapp.popular()
        featured = Webapp.featured(None)

    return jingo.render(
        request, "browse/landing.html", {"category": category, "featured": featured[:6], "popular": popular[:6]}
    )
예제 #4
0
    def alter_list_data_to_serialize(self, request, data):

        if waffle.switch_is_active('rocketfuel'):
            types = (
                ('collections', COLLECTIONS_TYPE_BASIC),
                ('featured', COLLECTIONS_TYPE_FEATURED),
                ('operator', COLLECTIONS_TYPE_OPERATOR),
            )
            self.filter_fallbacks = {}
            for name, col_type in types:
                data[name], fallback = self.collections(request,
                    collection_type=col_type)
                if fallback:
                    self.filter_fallbacks[name] = fallback
        else:
            form_data = self.get_search_data(request)
            region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
            cat_slug = form_data.get('cat')
            if cat_slug:
                cat_slug = [cat_slug]

            # Filter by device feature profile.
            profile = self.get_feature_profile(request)

            qs = Webapp.featured(cat=cat_slug, region=region, profile=profile)

            bundles = (self.build_bundle(obj=obj, request=request) for obj in
                       qs)
            data['featured'] = [AppResource().full_dehydrate(bundle)
                                for bundle in bundles]

        # Alter the _view_name so that statsd logs seperately from search.
        request._view_name = 'featured'

        return data
예제 #5
0
파일: views.py 프로젝트: zzdjk6/zamboni
def home(request):
    """The home page."""
    MOBILE = request.MOBILE and not request.TABLET
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    featured = Webapp.featured(region=region, cat=None, mobile=False,
        limit=9 if MOBILE else 12)

    featured_cnt = len(featured)

    # Show featured apps in multiples of three.
    if MOBILE:
        if featured_cnt >= 9:
            featured = featured[:9]
        elif featured_cnt >= 6:
            featured = featured[:6]
        elif featured_cnt >= 3:
            featured = featured[:3]
    else:
        if featured_cnt >= 12:
            featured = featured[:12]
        elif featured_cnt >= 8:
            featured = featured[:8]
        elif featured_cnt >= 4:
            # Once we allow for the giant featured app we'll require at least
            # 5 featured apps on desktop.
            featured = featured[:4]

    return jingo.render(request, 'home/home.html', {
        'featured': featured,
    })
예제 #6
0
파일: views.py 프로젝트: gedex/zamboni
def _landing(request, category=None):
    if category:
        category = get_object_or_404(Category.objects.filter(
            type=amo.ADDON_WEBAPP, weight__gte=0),
                                     slug=category)
        featured = Webapp.featured(category)
        popular = Webapp.popular().filter(category=category.id)
    else:
        popular = Webapp.popular()
        featured = Webapp.featured(None)

    return jingo.render(request, 'browse/landing.html', {
        'category': category,
        'featured': featured[:6],
        'popular': popular[:6]
    })
예제 #7
0
파일: views.py 프로젝트: bearstech/zamboni
def home(request):
    """The home page."""
    MOBILE = request.MOBILE and not request.TABLET
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    featured = Webapp.featured(region=region, cat=None, mobile=False,
        limit=6 if MOBILE else 12)

    featured_cnt = len(featured)

    # Show featured apps in multiples of three.
    if MOBILE:
        if featured_cnt >= 9:
            featured = featured[:9]
        elif featured_cnt >= 6:
            featured = featured[:6]
        elif featured_cnt >= 3:
            featured = featured[:3]
    else:
        if featured_cnt >= 12:
            featured = featured[:12]
        elif featured_cnt >= 8:
            featured = featured[:8]
        elif featured_cnt >= 4:
            # Once we allow for the giant featured app we'll require at least
            # 5 featured apps on desktop.
            featured = featured[:4]

    return jingo.render(request, 'home/home.html', {
        'featured': featured,
    })
예제 #8
0
파일: api.py 프로젝트: kmaglione/zamboni
    def alter_list_data_to_serialize(self, request, data):

        if waffle.switch_is_active("rocketfuel"):
            types = (
                ("collections", COLLECTIONS_TYPE_BASIC),
                ("featured", COLLECTIONS_TYPE_FEATURED),
                ("operator", COLLECTIONS_TYPE_OPERATOR),
            )
            for name, col_type in types:
                data[name] = self.collections(request, collection_type=col_type)
        else:
            form_data = self.get_search_data(request)
            region = getattr(request, "REGION", mkt.regions.WORLDWIDE)
            cat_slug = form_data.get("cat")
            if cat_slug:
                cat_slug = [cat_slug]

            # Filter by device feature profile.
            profile = self.get_feature_profile(request)

            qs = Webapp.featured(cat=cat_slug, region=region, profile=profile)

            bundles = (self.build_bundle(obj=obj, request=request) for obj in qs)
            data["featured"] = [AppResource().full_dehydrate(bundle) for bundle in bundles]

        # Alter the _view_name so that statsd logs seperately from search.
        request._view_name = "featured"

        return data
예제 #9
0
    def obj_get_list(self, request=None, **kwargs):
        form = Featured(request.GET,
                        region=getattr(request, 'REGION',
                                       regions.WORLDWIDE).slug)
        if not form.is_valid():
            raise self.form_errors(form)

        return Webapp.featured(**form.as_featured())
예제 #10
0
파일: api.py 프로젝트: flyun/zamboni
    def obj_get_list(self, request=None, **kwargs):
        form = Featured(request.GET,
                        region=getattr(request, 'REGION',
                                       regions.WORLDWIDE).slug)
        if not form.is_valid():
            raise self.form_errors(form)

        return Webapp.featured(**form.as_featured())
예제 #11
0
파일: views.py 프로젝트: lauraxt/zamboni
def _landing(request, category=None):
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    if category:
        category = get_object_or_404(
            Category.objects.filter(type=amo.ADDON_WEBAPP, weight__gte=0),
            slug=category)
        featured = Webapp.featured(cat=category, region=region)
        popular = _add_mobile_filter(request,
            Webapp.popular(cat=category, region=region))
    else:
        popular = _add_mobile_filter(request, Webapp.popular(region=region))
        featured = Webapp.featured(region=region)

    return jingo.render(request, 'browse/landing.html', {
        'category': category,
        'featured': featured[:6],
        'popular': popular[:6]
    })
예제 #12
0
파일: views.py 프로젝트: gregglind/zamboni
def _landing(request, category=None):
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    if category:
        category = get_object_or_404(Category.objects.filter(
            type=amo.ADDON_WEBAPP, weight__gte=0),
                                     slug=category)
        featured = Webapp.featured(cat=category, region=region)
        popular = _add_mobile_filter(
            request, Webapp.popular(cat=category, region=region))
    else:
        popular = _add_mobile_filter(request, Webapp.popular(region=region))
        featured = Webapp.featured(region=region)

    return jingo.render(request, 'browse/landing.html', {
        'category': category,
        'featured': featured[:6],
        'popular': popular[:6]
    })
예제 #13
0
파일: views.py 프로젝트: gkoberger/zamboni
def home(request):
    """The home page."""
    if not getattr(request, 'can_view_consumer', True):
        return jingo.render(request, 'home/home_walled.html')
    featured = Webapp.featured('home')[:3]
    popular = Webapp.popular()[:6]
    return jingo.render(request, 'home/home.html', {
        'featured': featured,
        'popular': popular
    })
예제 #14
0
def home(request):
    """The home page."""
    if not getattr(request, 'can_view_consumer', True):
        return jingo.render(request, 'home/home_walled.html')
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    featured = Webapp.featured(region=region, cat=None)[:9]
    popular = _add_mobile_filter(request, Webapp.popular(region=region))[:10]
    latest = _add_mobile_filter(request, Webapp.latest(region=region))[:10]
    return jingo.render(request, 'home/home.html', {
        'featured': featured,
    })
예제 #15
0
파일: forms.py 프로젝트: bearstech/zamboni
    def __init__(self, *args, **kw):
        self.request = kw.pop("request", None)
        self.product = kw.pop("product", None)
        super(CategoryForm, self).__init__(*args, **kw)

        self.cats_before = list(self.product.categories.values_list("id", flat=True))

        self.initial["categories"] = self.cats_before

        # If this app is featured, category changes are forbidden.
        self.disabled = not acl.action_allowed(self.request, "Addons", "Edit") and Webapp.featured(cat=self.cats_before)
예제 #16
0
파일: views.py 프로젝트: Sancus/zamboni
def home(request):
    """The home page."""
    if not getattr(request, 'can_view_consumer', True):
        return jingo.render(request, 'home/home_walled.html')
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    featured = Webapp.featured(region=region, cat=None)[:9]
    popular = _add_mobile_filter(request, Webapp.popular(region=region))[:10]
    latest = _add_mobile_filter(request, Webapp.latest(region=region))[:10]
    return jingo.render(request, 'home/home.html', {
        'featured': featured,
    })
예제 #17
0
def home(request):
    """The home page."""
    if not getattr(request, 'can_view_consumer', True):
        return jingo.render(request, 'home/home_walled.html')
    featured = Webapp.featured('home')[:6]
    popular = Webapp.popular()[:10]
    latest = Webapp.latest()[:10]
    return jingo.render(request, 'home/home.html', {
        'featured': featured,
        'popular': popular,
        'latest': latest
    })
예제 #18
0
def home(request):
    """The home page."""
    if not getattr(request, 'can_view_consumer', True):
        return jingo.render(request, 'home/home_walled.html')
    featured = Webapp.featured(cat=None)
    popular = Webapp.popular()[:10]
    latest = Webapp.latest()[:10]
    return jingo.render(request, 'home/home.html', {
        'featured': featured,
        'popular': popular,
        'latest': latest
    })
예제 #19
0
파일: api.py 프로젝트: jvillalobos/zamboni
 def alter_list_data_to_serialize(self, request, data):
     form_data = self.search_form(request)
     region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
     if form_data['cat']:
         category = Category.objects.get(pk=form_data['cat'])
     else:
         category = None
     bundles = [self.build_bundle(obj=obj, request=request)
                for obj in Webapp.featured(cat=category,
                                           region=region)]
     data['featured'] = [self.full_dehydrate(bundle) for bundle in bundles]
     return data
예제 #20
0
파일: api.py 프로젝트: flyun/zamboni
 def alter_list_data_to_serialize(self, request, data):
     form_data = self.search_form(request)
     region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
     if not form_data['cat']:
         data['creatured'] = []
         return data
     category = Category.objects.get(pk=form_data['cat'])
     bundles = [
         self.build_bundle(obj=obj, request=request)
         for obj in Webapp.featured(cat=category, region=region)
     ]
     data['creatured'] = [self.full_dehydrate(bundle) for bundle in bundles]
     return data
예제 #21
0
파일: forms.py 프로젝트: superduper/zamboni
    def __init__(self, *args, **kw):
        self.request = kw.pop('request', None)
        self.product = kw.pop('product', None)
        super(CategoryForm, self).__init__(*args, **kw)

        self.cats_before = list(
            self.product.categories.values_list('id', flat=True))

        self.initial['categories'] = self.cats_before

        # If this app is featured, category changes are forbidden.
        self.disabled = (not acl.action_allowed(self.request, 'Addons', 'Edit')
                         and Webapp.featured(cat=self.cats_before))
예제 #22
0
    def test_featured_no_creatured(self):
        # Three creatured apps for this category for the US region.
        creatured = []
        for x in xrange(3):
            app = amo.tests.app_factory()
            self.make_featured(app=app, category=None, region=mkt.regions.US)
            creatured.append(app)
        creatured_ids = [app.id for app in creatured]

        # Check that these apps are featured for this category -
        # and only in US region.
        for abbr, region in mkt.regions.REGIONS_CHOICES:
            self.assertSetEqual(
                [a.id for a in Webapp.featured(cat=None, region=region)],
                creatured_ids if abbr == 'us' else [])
예제 #23
0
파일: forms.py 프로젝트: lauraxt/zamboni
    def __init__(self, *args, **kw):
        self.request = kw.pop('request', None)
        self.product = kw.pop('product', None)
        super(CategoryForm, self).__init__(*args, **kw)

        self.cats_before = list(self.product.categories
                                .values_list('id', flat=True))

        self.initial['categories'] = self.cats_before

        # If this app is featured, category changes are forbidden.
        self.disabled = (
            not acl.action_allowed(self.request, 'Addons', 'Edit') and
            Webapp.featured(cat=self.cats_before)
        )
예제 #24
0
    def test_featured_no_creatured(self):
        # Three creatured apps for this category for the US region.
        creatured = []
        for x in xrange(3):
            app = amo.tests.app_factory()
            self.make_featured(app=app, category=None, region=mkt.regions.US)
            creatured.append(app)
        creatured_ids = [app.id for app in creatured]

        # Check that these apps are featured for this category -
        # and only in US region.
        for abbr, region in mkt.regions.REGIONS_CHOICES:
            self.assertSetEqual(
                [a.id for a in Webapp.featured(cat=None, region=region)], creatured_ids if abbr == "us" else []
            )
예제 #25
0
파일: views.py 프로젝트: gkoberger/zamboni
def _landing(request, category=None):
    featured = Webapp.featured('category')
    popular = Webapp.popular()

    if category:
        category = get_object_or_404(
            Category.objects.filter(type=amo.ADDON_WEBAPP, weight__gte=0),
            slug=category)
        featured = featured.filter(category=category)[:6]
        popular = popular.filter(category=category.id)

    return jingo.render(request, 'browse/landing.html', {
        'category': category,
        'featured': featured[:6],
        'popular': popular[:6]
    })
예제 #26
0
파일: test_models.py 프로젝트: at13/zamboni
    def test_featured_creatured(self):
        cat = Category.objects.create(type=amo.ADDON_WEBAPP, slug='cat')
        # Three creatured apps for this category for the US region.
        creatured = []
        for x in xrange(3):
            app = amo.tests.app_factory()
            self.make_featured(app=app, category=cat, region=mkt.regions.US)
            creatured.append(app)
        creatured_ids = [app.id for app in creatured]

        # Check that these apps are featured for this category -
        # and only in US region.
        for abbr, region in mkt.regions.REGIONS_CHOICES:
            self.assertSetEqual(
                [a.id for a in Webapp.featured(cat=[cat.slug], region=region)],
                creatured_ids if abbr == 'us' else [])
예제 #27
0
    def test_featured_creatured(self):
        cat = Category.objects.create(type=amo.ADDON_WEBAPP, slug='cat')
        # Three creatured apps for this category for the US region.
        creatured = []
        for x in xrange(3):
            app = amo.tests.app_factory()
            self.make_featured(app=app, category=cat,
                               region=mkt.regions.US)
            creatured.append(app)
        creatured_ids = [app.id for app in creatured]

        # Check that these apps are featured for this category -
        # and only in US region.
        for abbr, region in mkt.regions.REGIONS_CHOICES:
            self.assertSetEqual(
                [a.id for a in Webapp.featured(cat=cat, region=region)],
                creatured_ids if abbr == 'us' else [])
예제 #28
0
파일: api.py 프로젝트: l-hedgehog/zamboni
    def alter_list_data_to_serialize(self, request, data):
        form_data = self.get_search_data(request)
        region = getattr(request, "REGION", mkt.regions.WORLDWIDE)
        cat_slug = form_data.get("cat")
        if cat_slug:
            cat_slug = [cat_slug]

        # Filter by device feature profile.
        profile = self.get_feature_profile(request)

        qs = Webapp.featured(cat=cat_slug, region=region, profile=profile)

        bundles = [self.build_bundle(obj=obj, request=request) for obj in qs]
        data["featured"] = [AppResource().full_dehydrate(bundle) for bundle in bundles]
        # Alter the _view_name so that statsd logs seperately from search.
        request._view_name = "featured"
        return data
예제 #29
0
    def test_featured_fallback_to_worldwide(self):
        usa_app = app_factory()
        self.make_featured(usa_app, category=None, region=mkt.regions.US)

        worldwide_apps = []
        for x in xrange(3):
            app = app_factory()
            self.make_featured(app, category=None, region=mkt.regions.WORLDWIDE)
            worldwide_apps.append(app.id)

        # In US: 1 US-featured app + 3 Worldwide-featured apps.
        # Elsewhere: 3 Worldwide-featured apps.
        for abbr, region in mkt.regions.REGIONS_CHOICES:
            if abbr == "us":
                expected = [usa_app.id] + worldwide_apps
            else:
                expected = worldwide_apps
            self.assertSetEqual([a.id for a in Webapp.featured(cat=None, region=region)], expected)
예제 #30
0
파일: views.py 프로젝트: gregglind/zamboni
def home(request):
    """The home page."""
    if not getattr(request, 'can_view_consumer', True):
        return jingo.render(request, 'home/home_walled.html')
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    featured = Webapp.featured(region=region, cat=None)
    featured_cnt = len(featured)

    # Show featured apps in multiples of three.
    if featured_cnt >= 9:
        featured = featured[:9]
    elif featured_cnt >= 6:
        featured = featured[:6]
    elif featured_cnt >= 3:
        featured = featured[:3]

    return jingo.render(request, 'home/home.html', {
        'featured': featured,
    })
예제 #31
0
파일: views.py 프로젝트: gregglind/zamboni
def home(request):
    """The home page."""
    if not getattr(request, 'can_view_consumer', True):
        return jingo.render(request, 'home/home_walled.html')
    region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
    featured = Webapp.featured(region=region, cat=None)
    featured_cnt = len(featured)

    # Show featured apps in multiples of three.
    if featured_cnt >= 9:
        featured = featured[:9]
    elif featured_cnt >= 6:
        featured = featured[:6]
    elif featured_cnt >= 3:
        featured = featured[:3]

    return jingo.render(request, 'home/home.html', {
        'featured': featured,
    })
예제 #32
0
파일: api.py 프로젝트: at13/zamboni
    def alter_list_data_to_serialize(self, request, data):
        form_data = self.get_search_data(request)
        region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
        cat_slug = form_data.get('cat')
        if cat_slug:
            cat_slug = [cat_slug]

        # Filter by device feature profile.
        profile = self.get_feature_profile(request)

        qs = Webapp.featured(cat=cat_slug, region=region, profile=profile)

        bundles = [self.build_bundle(obj=obj, request=request) for obj in qs]
        data['featured'] = [
            AppResource().full_dehydrate(bundle) for bundle in bundles
        ]
        # Alter the _view_name so that statsd logs seperately from search.
        request._view_name = 'featured'
        return data
예제 #33
0
파일: api.py 프로젝트: flyun/zamboni
    def get_list(self, request, **kwargs):
        form = Featured(request.GET,
                        region=getattr(request, 'REGION',
                                       regions.WORLDWIDE).slug)
        if not form.is_valid():
            raise self.form_errors(form)

        data = form.as_featured()
        # By default the home page has no category.
        data['cat'] = None
        # Regardless of the limit, we will override that.
        data['limit'] = 9 if data['mobile'] else 12

        cat = CategoryResource()
        featured = Webapp.featured(**data)

        return self.create_response(request, {
            'categories': cat.dehydrate_objects(cat.obj_get_list()),
            'featured': AppResource().dehydrate_objects(featured)
        })
예제 #34
0
    def get_list(self, request=None, **kwargs):
        rg = request.GET
        _get = {
            'region': mkt.regions.REGIONS_DICT.get(rg.get('region'),
                                                   mkt.regions.WORLDWIDE),
            'limit': rg.get('limit', 12),
            'mobile': rg.get('dev') in ('android', 'fxos'),
            'tablet': rg.get('dev') != 'desktop' and rg.get('scr') == 'wide',
            'gaia': rg.get('dev') == 'fxos',
        }

        qs = Webapp.featured(**_get)
        paginator = self._meta.paginator_class(
            request.GET, qs, resource_uri=self.get_resource_list_uri(),
            limit=self._meta.limit)
        page = paginator.page()
        objs = [self.build_bundle(obj=obj, request=request)
                for obj in page['objects']]
        page['objects'] = [self.full_dehydrate(bundle) for bundle in objs]

        return self.create_response(request, page)
예제 #35
0
    def get_list(self, request, **kwargs):
        form = Featured(request.GET,
                        region=getattr(request, 'REGION',
                                       regions.WORLDWIDE).slug)
        if not form.is_valid():
            raise self.form_errors(form)

        data = form.as_featured()
        # By default the home page has no category.
        data['cat'] = None
        # Regardless of the limit, we will override that.
        data['limit'] = 9 if data['mobile'] else 12

        cat = CategoryResource()
        featured = Webapp.featured(**data)

        return self.create_response(
            request, {
                'categories': cat.dehydrate_objects(cat.obj_get_list()),
                'featured': AppResource().dehydrate_objects(featured)
            })
예제 #36
0
파일: api.py 프로젝트: MikeLing/zamboni
    def alter_list_data_to_serialize(self, request, data):
        form_data = self.search_form(request)
        region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
        if form_data['cat']:
            category = Category.objects.get(pk=form_data['cat'])
        else:
            category = None

        # Filter by device feature profile.
        profile = None
        if request.GET.get('dev') in ('firefoxos', 'android'):
            sig = request.GET.get('pro')
            if sig:
                profile = FeatureProfile.from_signature(sig)

        qs = Webapp.featured(cat=category, region=region, profile=profile)

        bundles = [self.build_bundle(obj=obj, request=request) for obj in qs]
        data['featured'] = [AppResource().full_dehydrate(bundle)
                            for bundle in bundles]
        return data
예제 #37
0
    def __init__(self, *args, **kw):
        self.request = kw.pop('request', None)
        self.product = kw.pop('product', None)
        super(CategoryForm, self).__init__(*args, **kw)

        supervisor_of = self.special_cats()
        self.special_cats = lambda *args: supervisor_of  # Caching!
        if supervisor_of.exists():
            # Update the list of categories with the supervisor categories,
            # excluding categories which are region-exclusive to regions that
            # the app is unavailable in.
            self.fields['categories'].queryset |= supervisor_of

        self.cats_before = list(
            self.product.categories.values_list('id', flat=True))

        self.initial['categories'] = self.cats_before

        # If this app is featured, category changes are forbidden.
        self.disabled = (not acl.action_allowed(self.request, 'Addons', 'Edit')
                         and Webapp.featured(cat=self.cats_before))
예제 #38
0
def app_search(request):
    ctx = _app_search(request)
    category = None

    if 'query' in ctx and 'cat' in ctx['query']:
        cat = ctx['query']['cat']
        cats = Category.objects.filter(type=amo.ADDON_WEBAPP, pk=cat)

        if cats.exists():
            category = cats[0]
    else:
        cat = None

    # If we're supposed to redirect, then do that.
    if ctx.get('redirect'):
        return redirect(ctx['redirect'])

    if category:
        ctx['featured'] = Webapp.featured(cat=category)[:3]

    # Otherwise render results.
    return jingo.render(request, 'search/results.html', ctx)
예제 #39
0
    def test_featured_fallback_to_worldwide(self):
        usa_app = app_factory()
        self.make_featured(usa_app, category=None, region=mkt.regions.US)

        worldwide_apps = []
        for x in xrange(3):
            app = app_factory()
            self.make_featured(app,
                               category=None,
                               region=mkt.regions.WORLDWIDE)
            worldwide_apps.append(app.id)

        # In US: 1 US-featured app + 3 Worldwide-featured apps.
        # Elsewhere: 3 Worldwide-featured apps.
        for abbr, region in mkt.regions.REGIONS_CHOICES:
            if abbr == 'us':
                expected = [usa_app.id] + worldwide_apps
            else:
                expected = worldwide_apps
            self.assertSetEqual(
                [a.id for a in Webapp.featured(cat=None, region=region)],
                expected)
예제 #40
0
파일: views.py 프로젝트: flyun/zamboni
def app_search(request):
    ctx = _app_search(request)
    category = None

    if 'query' in ctx and 'cat' in ctx['query']:
        cat = ctx['query']['cat']
        cats = Category.objects.filter(type=amo.ADDON_WEBAPP, pk=cat)

        if cats.exists():
            category = cats[0]
    else:
        cat = None

    # If we're supposed to redirect, then do that.
    if ctx.get('redirect'):
        return redirect(ctx['redirect'])

    if category:
        ctx['featured'] = Webapp.featured(cat=category)[:3]

    # Otherwise render results.
    return jingo.render(request, 'search/results.html', ctx)
예제 #41
0
def app_search(request):
    ctx = _app_search(request)
    category = None

    if "query" in ctx and "cat" in ctx["query"]:
        cat = ctx["query"]["cat"]
        cats = Category.objects.filter(type=amo.ADDON_WEBAPP, pk=cat)

        if cats.exists():
            category = cats[0]
    else:
        cat = None

    # If we're supposed to redirect, then do that.
    if ctx.get("redirect"):
        return redirect(ctx["redirect"])

    if category:
        ctx["featured"] = Webapp.featured(cat=category)[:3]

    # Otherwise render results.
    return jingo.render(request, "search/results.html", ctx)
예제 #42
0
    def alter_list_data_to_serialize(self, request, data):
        form_data = self.search_form(request)
        region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
        if form_data['cat']:
            category = Category.objects.get(pk=form_data['cat'])
        else:
            category = None

        # Filter by device feature profile.
        profile = None
        if request.GET.get('dev') in ('firefoxos', 'android'):
            sig = request.GET.get('pro')
            if sig:
                profile = FeatureProfile.from_signature(sig)

        qs = Webapp.featured(cat=category, region=region, profile=profile)

        bundles = [self.build_bundle(obj=obj, request=request) for obj in qs]
        data['featured'] = [
            AppResource().full_dehydrate(bundle) for bundle in bundles
        ]
        return data
예제 #43
0
파일: api.py 프로젝트: smillaedler/zamboni
    def alter_list_data_to_serialize(self, request, data):
        form_data = self.search_form(request)
        region = getattr(request, 'REGION', mkt.regions.WORLDWIDE)
        cat_slug = form_data.get('cat')
        if cat_slug:
            cat_slug = [cat_slug]

        # Filter by device feature profile.
        profile = None
        if request.GET.get('dev') in ('firefoxos', 'android'):
            sig = request.GET.get('pro')
            if sig:
                profile = FeatureProfile.from_signature(sig)

        qs = Webapp.featured(cat=cat_slug, region=region, profile=profile)

        bundles = [self.build_bundle(obj=obj, request=request) for obj in qs]
        data['featured'] = [AppResource().full_dehydrate(bundle)
                            for bundle in bundles]
        # Alter the _view_name so that statsd logs seperately from search.
        request._view_name = 'featured'
        return data
예제 #44
0
파일: forms.py 프로젝트: rtilder/zamboni
    def __init__(self, *args, **kw):
        self.request = kw.pop('request', None)
        self.product = kw.pop('product', None)
        super(CategoryForm, self).__init__(*args, **kw)

        supervisor_of = self.special_cats()
        self.special_cats = lambda *args: supervisor_of  # Caching!
        if supervisor_of.exists():
            # Update the list of categories with the supervisor categories,
            # excluding categories which are region-exclusive to regions that
            # the app is unavailable in.
            self.fields['categories'].queryset |= supervisor_of

        self.cats_before = list(self.product.categories
                                            .values_list('id', flat=True))

        self.initial['categories'] = self.cats_before

        # If this app is featured, category changes are forbidden.
        self.disabled = (
            not acl.action_allowed(self.request, 'Addons', 'Edit') and
            Webapp.featured(cat=self.cats_before)
        )
예제 #45
0
 def test_disable_paid_featured_apps(self):
     eq_(list(Webapp.featured(region=mkt.regions.WORLDWIDE)), [])
예제 #46
0
 def test_disable_paid_featured_apps(self):
     eq_(list(Webapp.featured(region=mkt.regions.WORLDWIDE)), [])