[damned-lies] Modernized and test release comparison view
- From: Claude Paroz <claudep src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [damned-lies] Modernized and test release comparison view
- Date: Mon, 17 May 2021 07:44:32 +0000 (UTC)
commit 0f582f8b125315113e45b3cf516f082e031f2fa0
Author: Claude Paroz <claude 2xlibre net>
Date: Mon May 17 09:42:58 2021 +0200
Modernized and test release comparison view
damnedlies/urls.py | 3 ++-
stats/models.py | 12 +++++-------
stats/tests/tests.py | 14 ++++++++++++++
stats/views.py | 25 ++++++++++++++-----------
4 files changed, 35 insertions(+), 19 deletions(-)
---
diff --git a/damnedlies/urls.py b/damnedlies/urls.py
index 8a394245..8065e56a 100644
--- a/damnedlies/urls.py
+++ b/damnedlies/urls.py
@@ -106,7 +106,8 @@ urlpatterns += [
stats_views.release,
name='release'),
path('releases/compare/<dtype>/<path:rels_to_compare>/',
- stats_views.compare_by_releases),
+ stats_views.compare_by_releases,
+ name='release-compare'),
]
if settings.USE_DEBUG_TOOLBAR:
diff --git a/stats/models.py b/stats/models.py
index 363457b8..27d7e502 100644
--- a/stats/models.py
+++ b/stats/models.py
@@ -634,13 +634,11 @@ class Branch(models.Model):
return success
-DOMAIN_TYPE_CHOICES = (
- ('ui', 'User Interface'),
- ('doc', 'Documentation')
-)
-
-
class Domain(models.Model):
+ DOMAIN_TYPE_CHOICES = (
+ ('ui', 'User Interface'),
+ ('doc', 'Documentation')
+ )
POT_METHOD_CHOICES = (
('auto', 'auto detected'),
('gettext', 'gettext'),
@@ -1977,7 +1975,7 @@ class FakeSummaryStatistics:
class StatisticsArchived(models.Model):
module = models.TextField()
- type = models.CharField(max_length=3, choices=DOMAIN_TYPE_CHOICES)
+ type = models.CharField(max_length=3, choices=Domain.DOMAIN_TYPE_CHOICES)
domain = models.TextField()
branch = models.TextField()
language = models.CharField(max_length=15)
diff --git a/stats/tests/tests.py b/stats/tests/tests.py
index f7a77c77..aa7cacb3 100644
--- a/stats/tests/tests.py
+++ b/stats/tests/tests.py
@@ -14,6 +14,7 @@ from django.core.exceptions import ValidationError
from django.test import TestCase
from django.test.utils import override_settings
from django.urls import reverse
+from django.utils.translation import gettext as _
from common.utils import run_shell_command
from languages.models import Language
@@ -803,6 +804,19 @@ class StatisticsTests(TestCase):
self.assertEqual(stat.fuzzy(), 0)
self.assertEqual(stat.untranslated(), 0)
+ def test_compare_releases(self):
+ response = self.client.get(reverse('release-compare', args=['ui', '3-8/dev']))
+ self.assertContains(response, f'<h1>{_("Releases Comparison")}</h1>')
+ self.assertEqual(len(response.context['releases']), 2)
+ # wrong domain type
+ with self.assertLogs('django.request', 'WARNING'):
+ response = self.client.get(reverse('release-compare', args=['whatever', '3-8/dev']))
+ self.assertEqual(response.status_code, 404)
+ # wrong release names
+ with self.assertLogs('django.request', 'WARNING'):
+ response = self.client.get(reverse('release-compare', args=['ui', 'whatever1/whatever2']))
+ self.assertEqual(response.status_code, 404)
+
class FigureTests(TestCase):
fixtures = ['sample_data.json']
diff --git a/stats/views.py b/stats/views.py
index 1954226f..ad6736b8 100644
--- a/stats/views.py
+++ b/stats/views.py
@@ -11,7 +11,9 @@ from django.urls import reverse
from django.utils.translation import gettext as _
from common.utils import MIME_TYPES, get_user_locale, run_shell_command
-from stats.models import Statistics, FakeLangStatistics, Module, ModuleLock, Branch, Category, Release
+from stats.models import (
+ Branch, Category, Domain, FakeLangStatistics, Module, ModuleLock, Release, Statistics
+)
from stats.forms import ModuleBranchForm
from stats.utils import sort_object_list
from languages.models import Language
@@ -291,19 +293,20 @@ def release(request, release_name, format='html'):
def compare_by_releases(request, dtype, rels_to_compare):
- releases = []
- try:
- if "/" in rels_to_compare:
- # This is release names
- releases = [Release.objects.get(name='gnome-%s' % rel_name) for rel_name in
rels_to_compare.split("/")]
- else:
- releases = [Release.objects.get(id=rel_id) for rel_id in rels_to_compare.split("-")]
- except Release.DoesNotExist:
- raise Http404
+ if dtype not in dict(Domain.DOMAIN_TYPE_CHOICES).keys():
+ raise Http404("Wrong domain type")
+ releases = list(
+ Release.objects.in_bulk(
+ [f'gnome-{rel_name}' for rel_name in rels_to_compare.split("/")],
+ field_name='name'
+ ).values()
+ )
+ if not releases:
+ raise Http404("No matching releases")
stats = Release.total_by_releases(dtype, releases)
context = {
'releases': releases,
- 'stats': stats
+ 'stats': stats,
}
return render(request, 'release_compare.html', context)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]