Skip to content

Commit

Permalink
Stats: Introduce ProjectLanguage object
Browse files Browse the repository at this point in the history
It acts as a proxy for project-language stats, it will be used for
editing as well.

Issue #49
  • Loading branch information
nijel committed Jul 29, 2020
1 parent 2703aad commit eafbd9d
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 20 deletions.
9 changes: 1 addition & 8 deletions weblate/trans/templatetags/translations.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
from weblate.utils.docs import get_doc_url
from weblate.utils.hash import hash_to_checksum
from weblate.utils.markdown import render_markdown
from weblate.utils.stats import BaseStats, ProjectLanguageStats
from weblate.utils.stats import BaseStats

register = template.Library()

Expand Down Expand Up @@ -640,13 +640,6 @@ def get_browse_url(context, obj):
kwargs={"lang": context["language"].code, "project": obj.slug},
)

# Language listing on porject page
if isinstance(obj, ProjectLanguageStats):
return reverse(
"project-language",
kwargs={"lang": obj.language.code, "project": obj.obj.slug},
)

return obj.get_absolute_url()


Expand Down
46 changes: 34 additions & 12 deletions weblate/utils/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Count, Sum
from django.db.models.functions import Length
from django.urls import reverse
from django.utils import timezone
from django.utils.functional import cached_property

Expand Down Expand Up @@ -154,6 +155,12 @@ def __init__(self, obj):
def pk(self):
return self._object.pk

def get_absolute_url(self):
return self._object.get_absolute_url()

def get_translate_url(self):
return self._object.get_translate_url()

@property
def obj(self):
return self._object
Expand Down Expand Up @@ -648,26 +655,41 @@ def get_single_language_stats(self, language):
return DummyTranslationStats(language)


class ProjectLanguageStats(LanguageStats):
def __init__(self, obj, lang):
self.language = lang
super().__init__(obj)
class ProjectLanguage:
"""Wrapper class used in project-language listings and stats."""

@property
def pk(self):
return "{}-{}".format(self._object.pk, self.language.pk)
def __init__(self, project, language: Language):
self.project = project
self.language = language

@cached_property
def has_review(self):
return self._object.source_review or self._object.translation_review
def pk(self):
return "{}-{}".format(self.project.pk, self.language.pk)

@cached_property
def cache_key(self):
return "{}-{}".format(super().cache_key, self.language.pk)
return "{}-{}".format(self.project.cache_key, self.language.pk)

def get_absolute_url(self):
return reverse(
"project-language",
kwargs={"lang": self.language.code, "project": self.project.slug},
)


class ProjectLanguageStats(LanguageStats):
def __init__(self, obj: ProjectLanguage):
self.language = obj.language
self.project = obj.project
super().__init__(obj)

@cached_property
def has_review(self):
return self.project.source_review or self.project.translation_review

@cached_property
def component_set(self):
return prefetch_stats(self._object.component_set.prefetch_source_stats())
return prefetch_stats(self.project.component_set.prefetch_source_stats())

@cached_property
def translation_set(self):
Expand Down Expand Up @@ -719,7 +741,7 @@ def component_set(self):
return prefetch_stats(self._object.component_set.prefetch_source_stats())

def get_single_language_stats(self, language, prefetch: bool = False):
result = ProjectLanguageStats(self._object, language)
result = ProjectLanguageStats(ProjectLanguage(self._object, language))
if prefetch:
# Share component set here
result.__dict__["component_set"] = self.component_set
Expand Down

0 comments on commit eafbd9d

Please sign in to comment.