summaryrefslogtreecommitdiff
path: root/public/views.py
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2013-01-18 20:01:22 -0600
committerDan McGee <dan@archlinux.org>2013-01-18 20:01:22 -0600
commitcba22a378b48f1a4f185a56a21f39483595cf8a6 (patch)
treee7de61f96c23aa972291ca14459d2109cda77f98 /public/views.py
parent0b930fd92140858f4ad21e593feb057996af9b95 (diff)
Don't pull and sort mirror URLs unless we have to
On the download page, the explicit sorted() call was forcing evaluation of the Django queryset, even if we never actually needed the results because the template fragment was cached. Wrap it all in a callable function which looks the same to the template, but saves us the cost of evaluation every single page view. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'public/views.py')
-rw-r--r--public/views.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/public/views.py b/public/views.py
index e15f5b89..3c823c9d 100644
--- a/public/views.py
+++ b/public/views.py
@@ -82,11 +82,16 @@ def download(request):
release = Release.objects.filter(available=True).latest()
except Release.DoesNotExist:
release = None
- mirror_urls = MirrorUrl.objects.select_related('mirror').filter(
- protocol__default=True,
- mirror__public=True, mirror__active=True, mirror__isos=True)
- sort_by = attrgetter('country.name', 'mirror.name')
- mirror_urls = sorted(mirror_urls, key=sort_by)
+
+ def mirror_urls():
+ '''In order to ensure this is lazily evaluated since we can't do
+ sorting at the database level, make it a callable.'''
+ urls = MirrorUrl.objects.select_related('mirror').filter(
+ protocol__default=True,
+ mirror__public=True, mirror__active=True, mirror__isos=True)
+ sort_by = attrgetter('country.name', 'mirror.name')
+ return sorted(urls, key=sort_by)
+
context = {
'release': release,
'releng_iso_url': settings.ISO_LIST_URL,