コード例 #1
0
ファイル: test_models.py プロジェクト: gffbss/addons-server
 def test_get_total(self):
     user2 = UserProfile.objects.get(email='*****@*****.**')
     self._give_points()
     self._give_points(status=amo.STATUS_LITE)
     self._give_points(user=user2, status=amo.STATUS_NOMINATED)
     assert ReviewerScore.get_total(self.user) == (
         amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_FULL] +
         amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_PRELIM])
     assert ReviewerScore.get_total(user2) == (
         amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_FULL])
コード例 #2
0
 def test_get_total(self):
     user2 = UserProfile.objects.get(email='*****@*****.**')
     self._give_points()
     self._give_points(status=amo.STATUS_PUBLIC)
     self._give_points(user=user2, status=amo.STATUS_NOMINATED)
     assert ReviewerScore.get_total(
         self.user) == (amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_FULL] +
                        amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_UPDATE])
     assert ReviewerScore.get_total(user2) == (
         amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_FULL])
コード例 #3
0
ファイル: test_models.py プロジェクト: kewisch/addons-server
 def test_get_total(self):
     user2 = UserProfile.objects.get(email='*****@*****.**')
     self._give_points()
     self._give_points(status=amo.STATUS_LITE)
     self._give_points(user=user2, status=amo.STATUS_NOMINATED)
     eq_(
         ReviewerScore.get_total(self.user),
         amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_FULL] +
         amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_PRELIM])
     eq_(ReviewerScore.get_total(user2),
         amo.REVIEWED_SCORES[amo.REVIEWED_ADDON_FULL])
コード例 #4
0
ファイル: views_themes.py プロジェクト: raajitr/addons-server
def themes_commit(request):
    ThemeReviewFormset = formset_factory(forms.ThemeReviewForm)
    formset = ThemeReviewFormset(request.POST)

    scores = []
    for form in formset:
        try:
            lock = ThemeLock.objects.filter(theme_id=form.data[form.prefix +
                                                               '-theme'],
                                            reviewer=request.user)
        except MultiValueDictKeyError:
            # Address off-by-one error caused by management form.
            continue
        if lock and form.is_valid():
            scores.append(form.save())

    # Success message.
    points = sum(scores)
    success = ungettext(
        # L10n: {0} is the number of reviews. {1} is the points just earned.
        # L10n: {2} is the total number of points the reviewer has overall.
        '{0} theme review successfully processed (+{1} points, {2} total).',
        '{0} theme reviews successfully processed (+{1} points, {2} total).',
        len(scores)).format(len(scores), points,
                            ReviewerScore.get_total(request.user))
    amo.messages.success(request, success)

    if 'theme_redirect_url' in request.session:
        return redirect(request.session['theme_redirect_url'])
    else:
        return redirect(reverse('editors.themes.queue_themes'))
コード例 #5
0
ファイル: views_themes.py プロジェクト: Osmose/olympia
def themes_commit(request):
    ThemeReviewFormset = formset_factory(forms.ThemeReviewForm)
    formset = ThemeReviewFormset(request.POST)

    scores = []
    for form in formset:
        try:
            lock = ThemeLock.objects.filter(
                theme_id=form.data[form.prefix + '-theme'],
                reviewer=request.user)
        except MultiValueDictKeyError:
            # Address off-by-one error caused by management form.
            continue
        if lock and form.is_valid():
            scores.append(form.save())

    # Success message.
    points = sum(scores)
    success = ungettext(
        # L10n: {0} is the number of reviews. {1} is the points just earned.
        # L10n: {2} is the total number of points the reviewer has overall.
        '{0} theme review successfully processed (+{1} points, {2} total).',
        '{0} theme reviews successfully processed (+{1} points, {2} total).',
        len(scores)).format(len(scores), points,
                            ReviewerScore.get_total(request.user))
    amo.messages.success(request, success)

    if 'theme_redirect_url' in request.session:
        return redirect(request.session['theme_redirect_url'])
    else:
        return redirect(reverse('editors.themes.queue_themes'))
コード例 #6
0
ファイル: helpers.py プロジェクト: darktrojan/addons-server
def reviewers_score_bar(context, types=None, addon_type=None):
    user = context.get('user')

    return new_context(dict(
        request=context.get('request'),
        amo=amo, settings=settings,
        points=ReviewerScore.get_recent(user, addon_type=addon_type),
        total=ReviewerScore.get_total(user),
        **ReviewerScore.get_leaderboards(user, types=types,
                                         addon_type=addon_type)))
コード例 #7
0
def reviewers_score_bar(context, types=None, addon_type=None):
    user = context.get('user')

    return new_context(dict(
        request=context.get('request'),
        amo=amo, settings=settings,
        points=ReviewerScore.get_recent(user, addon_type=addon_type),
        total=ReviewerScore.get_total(user),
        **ReviewerScore.get_leaderboards(user, types=types,
                                         addon_type=addon_type)))
コード例 #8
0
ファイル: test_models.py プロジェクト: gffbss/addons-server
    def test_caching(self):
        self._give_points()

        with self.assertNumQueries(1):
            ReviewerScore.get_total(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_total(self.user)

        with self.assertNumQueries(1):
            ReviewerScore.get_recent(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_recent(self.user)

        with self.assertNumQueries(1):
            ReviewerScore.get_leaderboards(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_leaderboards(self.user)

        with self.assertNumQueries(1):
            ReviewerScore.get_breakdown(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_breakdown(self.user)

        # New points invalidates all caches.
        self._give_points()

        with self.assertNumQueries(1):
            ReviewerScore.get_total(self.user)
        with self.assertNumQueries(1):
            ReviewerScore.get_recent(self.user)
        with self.assertNumQueries(1):
            ReviewerScore.get_leaderboards(self.user)
        with self.assertNumQueries(1):
            ReviewerScore.get_breakdown(self.user)
コード例 #9
0
    def test_caching(self):
        self._give_points()

        with self.assertNumQueries(1):
            ReviewerScore.get_total(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_total(self.user)

        with self.assertNumQueries(1):
            ReviewerScore.get_recent(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_recent(self.user)

        with self.assertNumQueries(1):
            ReviewerScore.get_leaderboards(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_leaderboards(self.user)

        with self.assertNumQueries(1):
            ReviewerScore.get_breakdown(self.user)
        with self.assertNumQueries(0):
            ReviewerScore.get_breakdown(self.user)

        # New points invalidates all caches.
        self._give_points()

        with self.assertNumQueries(1):
            ReviewerScore.get_total(self.user)
        with self.assertNumQueries(1):
            ReviewerScore.get_recent(self.user)
        with self.assertNumQueries(1):
            ReviewerScore.get_leaderboards(self.user)
        with self.assertNumQueries(1):
            ReviewerScore.get_breakdown(self.user)
コード例 #10
0
def performance(request, user_id=False):
    user = request.user
    editors = _recent_editors()

    is_admin = (acl.action_allowed(request, 'Admin', '%')
                or acl.action_allowed(request, 'ReviewerAdminTools', 'View'))

    if is_admin and user_id:
        try:
            user = UserProfile.objects.get(pk=user_id)
        except UserProfile.DoesNotExist:
            pass  # Use request.user from above.

    motd_editable = acl.action_allowed(request, 'AddonReviewerMOTD', 'Edit')

    monthly_data = _performance_by_month(user.id)
    performance_total = _performance_total(monthly_data)

    # Incentive point breakdown.
    today = date.today()
    month_ago = today - timedelta(days=30)
    year_ago = today - timedelta(days=365)
    point_total = ReviewerScore.get_total(user)
    totals = ReviewerScore.get_breakdown(user)
    months = ReviewerScore.get_breakdown_since(user, month_ago)
    years = ReviewerScore.get_breakdown_since(user, year_ago)

    def _sum(iter, types, exclude=False):
        """Sum the `total` property for items in `iter` that have an `atype`
        that is included in `types` when `exclude` is False (default) or not in
        `types` when `exclude` is True."""
        return sum(s.total for s in iter
                   if (s.atype in types) == (not exclude))

    breakdown = {
        'month': {
            'addons':
            _sum(months, amo.GROUP_TYPE_ADDON),
            'themes':
            _sum(months, amo.GROUP_TYPE_THEME),
            'other':
            _sum(months,
                 amo.GROUP_TYPE_ADDON + amo.GROUP_TYPE_THEME,
                 exclude=True)
        },
        'year': {
            'addons':
            _sum(years, amo.GROUP_TYPE_ADDON),
            'themes':
            _sum(years, amo.GROUP_TYPE_THEME),
            'other':
            _sum(years,
                 amo.GROUP_TYPE_ADDON + amo.GROUP_TYPE_THEME,
                 exclude=True)
        },
        'total': {
            'addons':
            _sum(totals, amo.GROUP_TYPE_ADDON),
            'themes':
            _sum(totals, amo.GROUP_TYPE_THEME),
            'other':
            _sum(totals,
                 amo.GROUP_TYPE_ADDON + amo.GROUP_TYPE_THEME,
                 exclude=True)
        }
    }

    data = context(request,
                   monthly_data=json.dumps(monthly_data),
                   performance_month=performance_total['month'],
                   performance_year=performance_total['year'],
                   breakdown=breakdown,
                   point_total=point_total,
                   editors=editors,
                   current_user=user,
                   is_admin=is_admin,
                   is_user=(request.user.id == user.id),
                   motd_editable=motd_editable)

    return render(request, 'editors/performance.html', data)
コード例 #11
0
ファイル: views.py プロジェクト: Natim/addons-server
def performance(request, user_id=False):
    user = request.user
    editors = _recent_editors()

    is_admin = (acl.action_allowed(request, 'Admin', '%') or
                acl.action_allowed(request, 'ReviewerAdminTools', 'View'))

    if is_admin and user_id:
        try:
            user = UserProfile.objects.get(pk=user_id)
        except UserProfile.DoesNotExist:
            pass  # Use request.user from above.

    motd_editable = acl.action_allowed(request, 'AddonReviewerMOTD', 'Edit')

    monthly_data = _performance_by_month(user.id)
    performance_total = _performance_total(monthly_data)

    # Incentive point breakdown.
    today = date.today()
    month_ago = today - timedelta(days=30)
    year_ago = today - timedelta(days=365)
    point_total = ReviewerScore.get_total(user)
    totals = ReviewerScore.get_breakdown(user)
    months = ReviewerScore.get_breakdown_since(user, month_ago)
    years = ReviewerScore.get_breakdown_since(user, year_ago)

    def _sum(iter, types, exclude=False):
        """Sum the `total` property for items in `iter` that have an `atype`
        that is included in `types` when `exclude` is False (default) or not in
        `types` when `exclude` is True."""
        return sum(s.total
                   for s in iter
                   if (s.atype in types) == (not exclude))

    breakdown = {
        'month': {
            'addons': _sum(months, amo.GROUP_TYPE_ADDON),
            'themes': _sum(months, amo.GROUP_TYPE_THEME),
            'other': _sum(months, amo.GROUP_TYPE_ADDON + amo.GROUP_TYPE_THEME,
                          exclude=True)
        },
        'year': {
            'addons': _sum(years, amo.GROUP_TYPE_ADDON),
            'themes': _sum(years, amo.GROUP_TYPE_THEME),
            'other': _sum(years, amo.GROUP_TYPE_ADDON + amo.GROUP_TYPE_THEME,
                          exclude=True)
        },
        'total': {
            'addons': _sum(totals, amo.GROUP_TYPE_ADDON),
            'themes': _sum(totals, amo.GROUP_TYPE_THEME),
            'other': _sum(totals, amo.GROUP_TYPE_ADDON + amo.GROUP_TYPE_THEME,
                          exclude=True)
        }
    }

    data = context(request,
                   monthly_data=json.dumps(monthly_data),
                   performance_month=performance_total['month'],
                   performance_year=performance_total['year'],
                   breakdown=breakdown, point_total=point_total,
                   editors=editors, current_user=user, is_admin=is_admin,
                   is_user=(request.user.id == user.id),
                   motd_editable=motd_editable)

    return render(request, 'editors/performance.html', data)