Statistics
| Branch: | Revision:

root / api_diffs / stats_api.diff @ 14:dfa5d639ed9b

History | View | Annotate | Download (2.5 kB)

1
class StatsHandler(BaseHandler):
2
    allowed_methods = ('GET', )
3

    
4
    def read(self, request, project_slug, resource_slug,
5
             lang_code=None, api_version=1):
6
        """
7
        This is an API handler to display translation statistics for individual
8
        resources.
9
        """
10
        if api_version == 2:
11
            return self._get_stats(request=request, pslug=project_slug,
12
            rslug=resource_slug, lang_code=lang_code)
13

    
14
    def _get_stats(self, request, pslug, rslug, lang_code):
15
        try:
16
            resource = Resource.objects.get(project__slug=pslug, slug=rslug)
17
        except Resource.DoesNotExist, e:
18
            logger.debug(
19
                "Resource %s.%s requested, but it does not exist" % (pslug, rslug),
20
                exc_info=True
21
            )
22
            return rc.NOT_FOUND
23
        language = None
24
        if lang_code is not None:
25
            try:
26
                language = Language.objects.by_code_or_alias(lang_code)
27
            except Language.DoesNotExist, e:
28
                logger.debug(
29
                    "Language %s was requested, but it does not exist." % lang_code,
30
                    exc_info=True
31
                )
32
                return BAD_REQUEST("Unknown language code %s" % lang_code)
33

    
34
        stats = RLStats.objects.by_resource(resource)
35
        if language is not None:
36
            stat = stats.by_language(language)[0]
37
            return {
38
                'completed': '%s%%' % stat.translated_perc,
39
                'translated_entities': stat.translated,
40
                'translated_words': stat.translated_wordcount,
41
                'untranslated_entities': stat.untranslated,
42
                'untranslated_words': stat.untranslated_wordcount,
43
                'last_update': stat.last_update,
44
                'last_commiter': stat.last_committer.username if stat.last_committer else '',
45
            }
46
        # statistics requested for all languages
47
        res = {}
48
        for stat in stats:
49
            res[stat.language.code] = {
50
                    'completed': '%s%%' % stat.translated_perc,
51
                    'translated_entities': stat.translated,
52
                    'translated_words': stat.translated_wordcount,
53
                    'untranslated_entities': stat.untranslated,
54
                    'untranslated_words': stat.untranslated_wordcount,
55
                    'last_update': stat.last_update,
56
                    'last_commiter': stat.last_committer.username if stat.last_committer else '',
57
            }
58
        return res
59