Exemplo n.º 1
0
 def get_context_data(self, **kwargs):
     context = super(LanguageTeamAdminFormView,
                     self).get_context_data(**kwargs)
     form = context["form"]
     context["tps"] = self.language.translationproject_set.exclude(
         project__disabled=True)
     stats = self.language.data_tool.get_stats(include_children=False,
                                               user=self.request.user)
     keys = ("total", "critical", "incomplete", "translated", "fuzzy",
             "untranslated")
     for k in keys:
         if k in stats:
             stats[k + "_display"] = formatter.number(stats[k])
     context["stats"] = stats
     context["suggestions"] = form.language_team.suggestions.count()
     context["suggestions_display"] = formatter.number(
         context["suggestions"])
     context["language"] = self.language
     context["page"] = "admin-team"
     context["browse_url"] = reverse(
         "pootle-language-browse",
         kwargs=dict(language_code=self.language.code))
     context["translate_url"] = reverse(
         "pootle-language-translate",
         kwargs=dict(language_code=self.language.code))
     return context
Exemplo n.º 2
0
Arquivo: views.py Projeto: arky/pootle
 def get_context_data(self, **kwargs):
     context = super(LanguageTeamAdminFormView, self).get_context_data(**kwargs)
     form = context["form"]
     context["tps"] = self.language.translationproject_set.exclude(
         project__disabled=True)
     stats = self.language.data_tool.get_stats(
         include_children=False,
         user=self.request.user)
     keys = ("total", "critical", "incomplete", "translated", "fuzzy",
             "untranslated")
     for k in keys:
         if k in stats:
             stats[k + "_display"] = formatter.number(stats[k])
     context["stats"] = stats
     context["suggestions"] = form.language_team.suggestions.count()
     context["suggestions_display"] = formatter.number(
         context["suggestions"])
     context["language"] = self.language
     context["page"] = "admin-team"
     context["browse_url"] = reverse(
         "pootle-language-browse",
         kwargs=dict(language_code=self.language.code))
     context["translate_url"] = reverse(
         "pootle-language-translate",
         kwargs=dict(language_code=self.language.code))
     return context
Exemplo n.º 3
0
 def __iter__(self):
     for score in self.top_scores:
         score_data = dict(user=DisplayUser(score["user__username"],
                                            score["user__full_name"],
                                            score["user__email"]),
                           total_score=score["score__sum"],
                           public_total_score=formatter.number(
                               int(round(score["score__sum"]))))
         for k in ["translated", "reviewed", "suggested"]:
             score_data[k] = formatter.number(
                 int(round(score["%s__sum" % k])))
         yield self.format_score(score_data)
Exemplo n.º 4
0
 def __iter__(self):
     for score in self.top_scores:
         score_data = dict(
             user=DisplayUser(
                 score["user__username"],
                 score["user__full_name"],
                 score["user__email"]),
             total_score=score["score__sum"],
             public_total_score=formatter.number(
                 int(round(score["score__sum"]))))
         for k in ["translated", "reviewed", "suggested"]:
             score_data[k] = formatter.number(
                 int(round(score["%s__sum" % k])))
         yield self.format_score(score_data)
Exemplo n.º 5
0
 def checks_by_category(self):
     _checks = []
     for check in self.check_schema:
         if check["code"] not in self.check_data:
             continue
         check["count"] = self.check_data[check["code"]]
         check["count_display"] = formatter.number(check["count"])
         _checks.append(check)
     return _checks
Exemplo n.º 6
0
 def checks_by_category(self):
     _checks = []
     for check in self.check_schema:
         if check["code"] not in self.check_data:
             continue
         check["count"] = self.check_data[check["code"]]
         check["count_display"] = formatter.number(check["count"])
         _checks.append(check)
     return _checks
Exemplo n.º 7
0
Arquivo: utils.py Projeto: arky/pootle
def _test_scores(ns, context, score_data):
    today = localdate()
    assert score_data.context == context
    assert (
        score_data.get_daterange(30)
        == (today - timedelta(days=30), today))
    assert score_data.ns == "pootle.score.%s" % ns
    assert score_data.sw_version == PootleScoreConfig.version
    assert list(score_data.score_model.order_by("id")) == list(
        UserTPScore.objects.exclude(
            user__username__in=User.objects.META_USERS).order_by("id"))
    assert (
        list(score_data.scores_within_days(5))
        == list(score_data.score_model.filter(
            date__range=score_data.get_daterange(5))))
    assert (
        list(score_data.get_scores(5))
        == list(score_data.filter_scores(score_data.scores_within_days(5))))
    assert (
        list(score_data.get_top_scorers(10))
        == list(
            score_data.get_scores(10).order_by("user__username").values(
                "user__username", "user__email", "user__full_name").annotate(
                    Sum("score"),
                    Sum("suggested"),
                    Sum("reviewed"),
                    Sum("translated")).filter(
                        score__sum__gt=0).order_by("-score__sum")))
    assert (
        tuple(score_data.top_scorers)
        == tuple(score_data.get_top_scorers(30)))
    assert (
        score_data.revision
        == revision.get(context.directory.__class__)(
            context.directory).get(key="stats"))

    score_display = score_data.display()
    assert isinstance(score_display, TopScoreDisplay)
    for i, item in enumerate(score_display):
        data = score_data.top_scorers[i]
        assert item["public_total_score"] == formatter.number(
            round(data["score__sum"]))
        assert isinstance(item["user"], DisplayUser)
        assert item["user"].username == data["user__username"]
        assert item["user"].full_name == data["user__full_name"]
        assert item["user"].email == data["user__email"]
    score_display = score_data.display(limit=1)
    assert len(list(score_display)) <= 1
Exemplo n.º 8
0
 def states(self):
     states = get_translation_states(self.object)
     stats = self.stats
     for state in states:
         if state["state"] == "untranslated":
             if stats["total"]:
                 stats[state["state"]] = state["count"] = (
                     stats["total"] - stats["fuzzy"] - stats["translated"])
         else:
             stats[state["state"]] = state["count"] = stats[state["state"]]
         if state.get("count"):
             state["count_display"] = formatter.number(state["count"])
             state["percent"] = round(
                 float(state["count"]) / stats["total"], 3)
             state["percent_display"] = formatter.percent(
                 state["percent"], "#,##0.0%")
     return states
Exemplo n.º 9
0
 def states(self):
     states = get_translation_states(self.object)
     stats = self.stats
     for state in states:
         if state["state"] == "untranslated":
             if stats["total"]:
                 stats[state["state"]] = state["count"] = (
                     stats["total"] - stats["fuzzy"] - stats["translated"])
         else:
             stats[state["state"]] = state["count"] = stats[state["state"]]
         if state.get("count"):
             state["count_display"] = formatter.number(state["count"])
             state["percent"] = round(
                 float(state["count"]) / stats["total"], 3)
             state["percent_display"] = formatter.percent(
                 state["percent"], "#,##0.0%")
     return states
Exemplo n.º 10
0
def _test_scores(ns, context, score_data):
    today = localdate()
    assert score_data.context == context
    assert (score_data.get_daterange(30) == (today - timedelta(days=30),
                                             today))
    assert score_data.ns == "pootle.score.%s" % ns
    assert score_data.sw_version == PootleScoreConfig.version
    assert list(score_data.score_model.order_by("id")) == list(
        UserTPScore.objects.exclude(
            user__username__in=User.objects.META_USERS).order_by("id"))
    assert (list(score_data.scores_within_days(5)) == list(
        score_data.score_model.filter(
            date__range=score_data.get_daterange(5))))
    assert (list(score_data.get_scores(5)) == list(
        score_data.filter_scores(score_data.scores_within_days(5))))
    assert (list(score_data.get_top_scorers(10)) == list(
        score_data.get_scores(10).order_by("user__username").values(
            "user__username", "user__email", "user__full_name").annotate(
                Sum("score"), Sum("suggested"), Sum("reviewed"),
                Sum("translated")).filter(
                    score__sum__gt=0).order_by("-score__sum")))
    assert (tuple(score_data.top_scorers) == tuple(
        score_data.get_top_scorers(30)))
    assert (score_data.revision == revision.get(context.directory.__class__)(
        context.directory).get(key="stats"))

    score_display = score_data.display()
    assert isinstance(score_display, TopScoreDisplay)
    for i, item in enumerate(score_display):
        data = score_data.top_scorers[i]
        assert item["public_total_score"] == formatter.number(
            round(data["score__sum"]))
        assert isinstance(item["user"], DisplayUser)
        assert item["user"].username == data["user__username"]
        assert item["user"].full_name == data["user__full_name"]
        assert item["user"].email == data["user__email"]
    score_display = score_data.display(limit=1)
    assert len(list(score_display)) <= 1
Exemplo n.º 11
0
 def localize_stats(self, stats):
     for k in STAT_KEYS:
         if k in stats and isinstance(stats[k], (int, long, float)):
             stats[k + '_display'] = formatter.number(stats[k])
Exemplo n.º 12
0
 def public_score(self):
     return formatter.number(round(self.score))
Exemplo n.º 13
0
    def top_scorers(cls, days=30, language=None, project=None, limit=5,
                    offset=0):
        """Returns users with the top scores.

        :param days: period of days to account for scores.
        :param language: limit results to the given language code.
        :param project: limit results to the given project code.
        :param limit: limit results to this number of users. Values other
            than positive numbers will return the entire result set.
        """
        cache_kwargs = {
            'days': days,
            'language': language,
            'project': project,
            'limit': limit,
            'offset': offset,
        }
        cache_key = make_method_key(cls, 'top_scorers', cache_kwargs)

        top_scorers = cache.get(cache_key, None)
        if top_scorers is not None:
            return top_scorers

        now = timezone.now()
        past = now + datetime.timedelta(-days)

        lookup_kwargs = {
            'creation_time__range': [past, now],
        }

        if language is not None:
            lookup_kwargs.update({
                'submission__translation_project__language__code':
                    language,
            })

        if project is not None:
            lookup_kwargs.update({
                'submission__translation_project__project__code':
                    project,
            })

        meta_user_ids = cls.objects.meta_users().values_list('id', flat=True)
        top_scores = ScoreLog.objects.values("user").filter(
            **lookup_kwargs
        ).exclude(
            user__pk__in=meta_user_ids,
        ).annotate(
            total_score=Sum('score_delta'),
            suggested=Sum(
                Case(
                    When(
                        action_code=TranslationActionCodes.SUGG_ADDED,
                        then='wordcount'
                    ),
                    default=0,
                    output_field=models.IntegerField()
                )
            ),
            translated=Sum(
                Case(
                    When(
                        translated_wordcount__isnull=False,
                        then='translated_wordcount'
                    ),
                    default=0,
                    output_field=models.IntegerField()
                )
            ),
            reviewed=Sum(
                Case(
                    When(
                        action_code__in=[
                            TranslationActionCodes.SUGG_REVIEWED_ACCEPTED,
                            TranslationActionCodes.REVIEWED,
                            TranslationActionCodes.EDITED,
                        ],
                        translated_wordcount__isnull=True,
                        then='wordcount',
                    ),
                    default=0,
                    output_field=models.IntegerField()
                )
            ),
        ).order_by('-total_score')[offset:]

        if isinstance(limit, (int, long)) and limit > 0:
            top_scores = top_scores[:limit]

        users = dict(
            (user.id, user)
            for user in cls.objects.filter(
                pk__in=[item['user'] for item in top_scores]
            )
        )

        top_scorers = []
        for item in top_scores:
            item['user'] = users[item['user']]
            item['public_total_score'] = formatter.number(
                round(item['total_score']))
            top_scorers.append(item)

        cache.set(cache_key, top_scorers, 60)
        return top_scorers
Exemplo n.º 14
0
 def public_score(self):
     return formatter.number(round(self.score))
Exemplo n.º 15
0
def _format_numbers(numbers):
    for k in numbers.keys():
        numbers[k] = formatter.number(numbers[k])
Exemplo n.º 16
0
 def make_display_stat(d, keys=["total", "critical", "incomplete",
                                "suggestions", "fuzzy", "untranslated"]):
     assert isinstance(d, dict)
     for k in keys:
         if k in d:
             d[k + '_display'] = formatter.number(d[k])
Exemplo n.º 17
0
def test_number(language, expected):
    with override(language):
        assert number('1000.5') == expected
Exemplo n.º 18
0
def _format_numbers(numbers):
    for k in numbers.keys():
        numbers[k] = formatter.number(numbers[k])
Exemplo n.º 19
0
 def localize_stats(self, stats):
     for k in STAT_KEYS:
         if k in stats and isinstance(stats[k], (int, long, float)):
             stats[k + '_display'] = formatter.number(stats[k])