Пример #1
0
    def test_alternate_qs_200_by_slug(self):
        def qs():
            return Addon.objects.filter(type=1)

        view = dec.addon_view_factory(qs=qs)(self.func)
        res = view(self.request, self.addon.slug)
        eq_(res, mock.sentinel.OK)
Пример #2
0
    def test_alternate_qs_404_by_slug(self):
        def qs():
            return Addon.objects.filter(type=2)

        view = dec.addon_view_factory(qs=qs)(self.func)
        with self.assertRaises(http.Http404):
            view(self.request, self.addon.slug)
Пример #3
0
    def test_alternate_qs_301_by_id(self):
        def qs():
            return Addon.objects.filter(type=1)

        view = dec.addon_view_factory(qs=qs)(self.func)
        res = view(self.request, str(self.addon.id))
        self.assert3xx(res, self.slug_path, 301)
Пример #4
0
    def test_alternate_qs_301_by_id(self):
        def qs():
            return Addon.objects.filter(type=1)

        view = dec.addon_view_factory(qs=qs)(self.func)
        res = view(self.request, str(self.addon.id))
        self.assert3xx(res, self.slug_path, 301)
Пример #5
0
    def test_alternate_qs_200_by_slug(self):
        def qs():
            return Addon.objects.filter(type=1)

        view = dec.addon_view_factory(qs=qs)(self.func)
        res = view(self.request, self.addon.slug)
        eq_(res, mock.sentinel.OK)
Пример #6
0
    def test_alternate_qs_404_by_slug(self):
        def qs():
            return Addon.objects.filter(type=2)

        view = dec.addon_view_factory(qs=qs)(self.func)
        with self.assertRaises(http.Http404):
            view(self.request, self.addon.slug)
Пример #7
0
                               has_not_purchased)
import amo
from amo.decorators import json_view, login_required, post_required, write
from amo.helpers import absolutify
from amo.urlresolvers import reverse
from lib.cef_loggers import app_pay_cef
from lib.crypto.webpay import (InvalidSender, parse_from_webpay,
                               sign_webpay_jwt)
from market.forms import PriceCurrencyForm
from mkt.webapps.models import Webapp
from stats.models import ClientData, Contribution

from . import webpay_tasks as tasks

log = commonware.log.getLogger('z.purchase')
addon_view = addon_view_factory(qs=Webapp.objects.valid)


def start_purchase(request, addon):
    log.debug('Starting purchase of addon: %s by user: %s' %
              (addon.pk, request.amo_user.pk))
    amount = addon.premium.get_price()
    uuid_ = hashlib.md5(str(uuid.uuid4())).hexdigest()
    # L10n: {0} is the addon name.
    contrib_for = (_(u'Firefox Marketplace purchase of {0}').format(
        addon.name))

    amount, currency = (addon.premium.get_price(),
                        request.REGION.default_currency)

    # If tier is specified, then let's look it up.
Пример #8
0
from amo.urlresolvers import get_url_prefix, reverse
from amo.utils import escape_all, log_cef, send_mail
from bandwagon.models import Collection
from browse.views import PersonasFilter
from translations.query import order_by_translation
from users.models import UserNotification

import tasks
from . import forms
from .models import UserProfile
from .signals import logged_out
from .utils import autocreate_username, EmailResetCode, UnsubscribeCode

log = commonware.log.getLogger('z.users')

addon_view = addon_view_factory(qs=Addon.objects.valid)

THEMES_LIMIT = 20


def user_view(f):
    @functools.wraps(f)
    def wrapper(request, user_id, *args, **kw):
        """Provides a user object given a user ID or username."""
        if user_id.isdigit():
            key = 'id'
        else:
            key = 'username'
            # If the username is `me` then show the current user's profile.
            if (user_id == 'me' and request.amo_user
                    and request.amo_user.username):
Пример #9
0
 def test_alternate_qs_404_by_id(self):
     qs = lambda: Addon.objects.filter(type=2)
     view = dec.addon_view_factory(qs=qs)(self.func)
     with self.assertRaises(http.Http404):
         view(self.request, str(self.addon.id))
Пример #10
0
from .models import (CollectionCount, Contribution, DownloadCount,
                     ThemeUserCount, UpdateCount)

logger = logging.getLogger('z.apps.stats.views')

SERIES_GROUPS = ('day', 'week', 'month')
SERIES_GROUPS_DATE = ('date', 'week', 'month')  # Backwards compat.
SERIES_FORMATS = ('json', 'csv')
SERIES = ('downloads', 'usage', 'contributions', 'overview', 'sources', 'os',
          'locales', 'statuses', 'versions', 'apps')
COLLECTION_SERIES = ('downloads', 'subscribers', 'ratings')
GLOBAL_SERIES = ('addons_in_use', 'addons_updated', 'addons_downloaded',
                 'collections_created', 'reviews_created', 'addons_created',
                 'users_created', 'my_apps')

addon_view_with_unlisted = addon_view_factory(qs=Addon.with_unlisted.all)


def dashboard(request):
    stats_base_url = reverse('stats.dashboard')
    view = get_report_view(request)
    return render(request, 'stats/dashboard.html', {
        'report': 'site',
        'view': view,
        'stats_base_url': stats_base_url
    })


def get_series(model, extra_field=None, source=None, **filters):
    """
    Get a generator of dicts for the stats model given by the filters.
Пример #11
0
from django.conf import settings
from django.shortcuts import get_list_or_404, get_object_or_404, redirect

import amo
from amo.models import manual_order
from browse.views import personas_listing
from addons.decorators import addon_view_factory
from addons.models import Addon, Category, AddonCategory
from addons.views import _category_personas as _category_themes
from discovery.views import get_featured_personas

import jingo
from waffle.decorators import waffle_switch

addon_all_view = addon_view_factory(qs=Addon.objects.all)


@waffle_switch('mkt-themes')
@addon_all_view
def detail(request, addon):
    """Theme details page."""
    theme = addon.persona

    categories = addon.all_categories
    if categories:
        qs = Addon.objects.public().filter(categories=categories[0])
        category_themes = _category_themes(qs, limit=6)
    else:
        category_themes = None

    data = {
Пример #12
0
from django.conf import settings

from addons.decorators import addon_view_factory
from addons.models import Addon
from addons.views import _category_personas as _category_themes

import jingo
from waffle.decorators import waffle_switch

addon_all_view = addon_view_factory(qs=Addon.objects.all)


@waffle_switch('mkt-themes')
@addon_all_view
def detail(request, addon):
    """Theme details page."""
    theme = addon.persona

    categories = addon.all_categories
    if categories:
        qs = Addon.objects.public().filter(categories=categories[0])
        category_themes = _category_themes(qs, limit=6)
    else:
        category_themes = None

    data = {
        'product': addon,
        'categories': categories,
        'category_themes': category_themes,
        'author_themes': theme.authors_other_addons(request.APP)[:3],
        'theme': theme,
Пример #13
0
 def test_alternate_qs_200_by_slug(self):
     qs = lambda: Addon.objects.filter(type=1)
     view = dec.addon_view_factory(qs=qs)(self.func)
     r = view(self.request, self.addon.slug)
     eq_(r, mock.sentinel.OK)
Пример #14
0
 def test_alternate_qs_301_by_id(self):
     qs = lambda: Addon.objects.filter(type=1)
     view = dec.addon_view_factory(qs=qs)(self.func)
     r = view(self.request, str(self.addon.id))
     eq_(r.status_code, 301)
     eq_(r['Location'], self.slug_path)
Пример #15
0
import paypal
from stats.models import Contribution
from translations.query import order_by_translation
from users.models import UserNotification
import users.notifications as notifications

from .models import UserProfile
from .signals import logged_out
from . import forms
from .utils import EmailResetCode, UnsubscribeCode, autocreate_username
import tasks

log = commonware.log.getLogger('z.users')
paypal_log = commonware.log.getLogger('z.paypal')

addon_view = addon_view_factory(qs=Addon.objects.valid)


@login_required(redirect=False)
@json_view
def ajax(request):
    """Query for a user matching a given email."""

    if 'q' not in request.GET:
        raise http.Http404()

    data = {'status': 0, 'message': ''}

    email = request.GET.get('q', '').strip()
    dev_only = request.GET.get('dev', '1')
    try:
Пример #16
0
 def setUp(self):
     super(TestAddonViewWithUnlisted, self).setUp()
     self.view = dec.addon_view_factory(
         qs=Addon.with_unlisted.all)(self.func)
Пример #17
0
 def setUp(self):
     super(TestAddonViewWithUnlisted, self).setUp()
     self.view = dec.addon_view_factory(qs=Addon.with_unlisted.all)(
         self.func)
Пример #18
0
import jingo

from django import http

from access import acl
from addons.models import Addon
from addons.decorators import addon_view_factory
from amo.decorators import json_view, login_required, post_required, write
from lib.metrics import send_request
from mkt.webapps.models import Installed

addon_view = addon_view_factory(qs=Addon.objects.valid)
addon_enabled_view = addon_view_factory(qs=Addon.objects.enabled)
addon_all_view = addon_view_factory(qs=Addon.objects.all)


@addon_all_view
def detail(request, addon):
    """Product details page."""
    return jingo.render(request, 'detail/app.html', {'product': addon})


@addon_all_view
def privacy(request, addon):
    if not (addon.is_public() or acl.check_reviewer(request)):
        raise http.Http404
    if not addon.privacy_policy:
        return http.HttpResponseRedirect(addon.get_url_path())
    return jingo.render(request, 'detail/privacy.html', {'product': addon})

Пример #19
0
 def test_alternate_qs_404_by_id(self):
     qs = lambda: Addon.objects.filter(type=2)
     view = dec.addon_view_factory(qs=qs)(self.func)
     with self.assertRaises(http.Http404):
         view(self.request, str(self.addon.id))
Пример #20
0
 def test_alternate_qs_200_by_slug(self):
     qs = lambda: Addon.objects.filter(type=1)
     view = dec.addon_view_factory(qs=qs)(self.func)
     r = view(self.request, self.addon.slug)
     eq_(r, mock.sentinel.OK)
Пример #21
0
 def test_alternate_qs_301_by_id(self):
     qs = lambda: Addon.objects.filter(type=1)
     view = dec.addon_view_factory(qs=qs)(self.func)
     r = view(self.request, str(self.addon.id))
     eq_(r.status_code, 301)
     eq_(r['Location'], self.slug_path)
Пример #22
0
from editors.views import reviewer_required
from lib.metrics import send_request
from lib.crypto.receipt import SigningError
from lib.cef_loggers import receipt_cef
import mkt
from mkt.webapps.models import Installed, Webapp
from services.verify import Verify
from stats.models import ClientData
from users.models import UserProfile
from zadmin.models import DownloadSource

from .utils import create_receipt


log = commonware.log.getLogger('z.receipts')
addon_view = addon_view_factory(qs=Webapp.objects.valid)
addon_all_view = addon_view_factory(qs=Webapp.objects.all)


@login_required
@addon_view
def reissue(request, addon):
    reissue = not addon.is_premium()
    if addon.is_premium() and addon.has_purchased(request.amo_user):
        reissue = True
    return jingo.render(request, 'receipts/reissue.html',
                        {'reissue': reissue, 'app': addon})


def _record(request, addon):
    # TODO(andym): simplify this.
Пример #23
0
logger = logging.getLogger('z.apps.stats.views')


SERIES_GROUPS = ('day', 'week', 'month')
SERIES_GROUPS_DATE = ('date', 'week', 'month')  # Backwards compat.
SERIES_FORMATS = ('json', 'csv')
SERIES = ('downloads', 'usage', 'contributions', 'overview', 'sources', 'os',
          'locales', 'statuses', 'versions', 'apps')
COLLECTION_SERIES = ('downloads', 'subscribers', 'ratings')
GLOBAL_SERIES = ('addons_in_use', 'addons_updated', 'addons_downloaded',
                 'collections_created', 'reviews_created', 'addons_created',
                 'users_created', 'my_apps')


addon_view_with_unlisted = addon_view_factory(qs=Addon.with_unlisted.all)


def dashboard(request):
    stats_base_url = reverse('stats.dashboard')
    view = get_report_view(request)
    return render(request, 'stats/dashboard.html',
                  {'report': 'site', 'view': view,
                   'stats_base_url': stats_base_url})


def get_series(model, extra_field=None, source=None, **filters):
    """
    Get a generator of dicts for the stats model given by the filters.

    Returns {'date': , 'count': } by default. Add an extra field (such as