From eb7172cd4d9d7af690b2be06e3f925d3023be71c Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 8 Nov 2014 13:43:59 -0600 Subject: Convert some of URL details to Jinja2 Anytime we have a loop with >100 items, the Django template engine begins to be the bottleneck. This one is relatively straightforward to convert, and sets the stage for converting the mirror status page as well. Signed-off-by: Dan McGee --- mirrors/templatetags/jinja2.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 mirrors/templatetags/jinja2.py (limited to 'mirrors') diff --git a/mirrors/templatetags/jinja2.py b/mirrors/templatetags/jinja2.py new file mode 100644 index 00000000..5d47fe9b --- /dev/null +++ b/mirrors/templatetags/jinja2.py @@ -0,0 +1,31 @@ +from django_jinja import library +from markupsafe import Markup + + +@library.global_function +def country_flag(country): + if not country: + return '' + html = ' ' % ( + unicode(country.code).lower(), unicode(country.name)) + return Markup(html) + + +@library.filter +def duration(value): + if not value and type(value) != timedelta: + return u'' + # does not take microseconds into account + total_secs = value.seconds + value.days * 24 * 3600 + mins = total_secs // 60 + hrs, mins = divmod(mins, 60) + return '%d:%02d' % (hrs, mins) + + +@library.filter +def floatvalue(value, arg=2): + if value is None: + return u'' + return '%.*f' % (arg, value) + +# vim: set ts=4 sw=4 et: -- cgit v1.2.3 From 713ab837ba59c4a7c0b60cb8e8be4b27f4520e52 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 8 Nov 2014 14:00:06 -0600 Subject: Convert mirror status tables to Jinja2 Yay for way improved performance. Local testing showed render times going from 265 ms to 135 ms. Signed-off-by: Dan McGee --- mirrors/templatetags/jinja2.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'mirrors') diff --git a/mirrors/templatetags/jinja2.py b/mirrors/templatetags/jinja2.py index 5d47fe9b..04e50238 100644 --- a/mirrors/templatetags/jinja2.py +++ b/mirrors/templatetags/jinja2.py @@ -1,3 +1,4 @@ +from datetime import timedelta from django_jinja import library from markupsafe import Markup @@ -22,10 +23,31 @@ def duration(value): return '%d:%02d' % (hrs, mins) +@library.filter +def hours(value): + if not value and type(value) != timedelta: + return u'' + # does not take microseconds into account + total_secs = value.seconds + value.days * 24 * 3600 + mins = total_secs // 60 + hrs, mins = divmod(mins, 60) + if hrs == 1: + return '%d hour' % hrs + return '%d hours' % hrs + + @library.filter def floatvalue(value, arg=2): if value is None: return u'' return '%.*f' % (arg, value) + +@library.filter +def percentage(value, arg=1): + if not value and type(value) != float: + return u'' + new_val = value * 100.0 + return '%.*f%%' % (arg, new_val) + # vim: set ts=4 sw=4 et: -- cgit v1.2.3 From 122273496a24c4608de776978b1b449d9c6cde09 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 8 Nov 2014 14:04:31 -0600 Subject: Make delay a property, not a function And re-indent the URL details log template now that we've broken it out. Signed-off-by: Dan McGee --- mirrors/models.py | 1 + 1 file changed, 1 insertion(+) (limited to 'mirrors') diff --git a/mirrors/models.py b/mirrors/models.py index 820f3328..9743d177 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -165,6 +165,7 @@ class MirrorLog(models.Model): is_success = models.BooleanField(default=True) error = models.TextField(blank=True, default='') + @property def delay(self): if self.last_sync is None: return None -- cgit v1.2.3 From 1a35cbe842212d674d83196ecfa70569ffe2e2da Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 8 Nov 2014 14:15:11 -0600 Subject: Remove percentage filter from Django templates filters Signed-off-by: Dan McGee --- mirrors/templatetags/mirror_status.py | 7 ------- 1 file changed, 7 deletions(-) (limited to 'mirrors') diff --git a/mirrors/templatetags/mirror_status.py b/mirrors/templatetags/mirror_status.py index b3810d9a..c8004e4b 100644 --- a/mirrors/templatetags/mirror_status.py +++ b/mirrors/templatetags/mirror_status.py @@ -31,11 +31,4 @@ def floatvalue(value, arg=2): return u'' return '%.*f' % (arg, value) -@register.filter -def percentage(value, arg=1): - if not value and type(value) != float: - return u'' - new_val = value * 100.0 - return '%.*f%%' % (arg, new_val) - # vim: set ts=4 sw=4 et: -- cgit v1.2.3