From 878beaecdcb6f5daa23c5767aeb22aaa7f837484 Mon Sep 17 00:00:00 2001 From: Jeff Balogh Date: Wed, 28 Apr 2010 09:02:41 -0700 Subject: [PATCH] cache the button popups for a long time (bug 562231) --- apps/addons/buttons.py | 3 +++ apps/addons/tests/test_views.py | 16 ++++++++++++++-- apps/minify/helpers.py | 8 +++++++- settings.py | 5 +++-- templates/base.html | 2 +- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/apps/addons/buttons.py b/apps/addons/buttons.py index 3996b236d50..2eac31f0962 100644 --- a/apps/addons/buttons.py +++ b/apps/addons/buttons.py @@ -1,4 +1,5 @@ from django.db.models import Q +from django.views.decorators.cache import cache_page import jingo import jinja2 @@ -199,6 +200,8 @@ def __init__(self, text, url, os=None, file=None): self.text, self.url, self.os, self.file = text, url, os, file +# Cache it for a year. +@cache_page(60 * 60 * 24 * 365) def js(request): return jingo.render(request, 'addons/popups.html', content_type='text/javascript') diff --git a/apps/addons/tests/test_views.py b/apps/addons/tests/test_views.py index c9084cfeccf..11a3c6bd7e1 100644 --- a/apps/addons/tests/test_views.py +++ b/apps/addons/tests/test_views.py @@ -1,3 +1,6 @@ +from datetime import datetime + +from django import test from django.conf import settings from django.core.cache import cache @@ -172,8 +175,8 @@ def test_compatible_app_redirect(self): """ addon = Addon.objects.get(id=3615) comp_app = addon.compatible_apps.keys()[0] - not_comp_app = [ a for a in amo.APP_USAGE if a not in - addon.compatible_apps.keys() ][0] + not_comp_app = [a for a in amo.APP_USAGE + if a not in addon.compatible_apps.keys()][0] # no SeaMonkey version => redirect prefixer = amo.urlresolvers.get_url_prefix() @@ -282,6 +285,7 @@ def test__details_collections_dropdown(self): ret = _details_collections_dropdown(request, profile, addon) eq_(len(ret), 1) + class TestTagsBox(test_utils.TestCase): fixtures = ['base/addontag'] @@ -290,3 +294,11 @@ def test_tag_box(self): r = self.client.get(reverse('addons.detail', args=[8680]), follow=True) doc = pq(r.content) eq_('SEO', doc('#tags ul').children().text()) + + +def test_button_caching(): + """The button popups should be cached for a long time.""" + response = test.Client().get(reverse('addons.buttons.js'), follow=True) + fmt = '%a, %d %b %Y %H:%M:%S GMT' + expires = datetime.strptime(response['Expires'], fmt) + assert (expires - datetime.now()).days >= 365 diff --git a/apps/minify/helpers.py b/apps/minify/helpers.py index a602d0169ef..109c41bdb2f 100644 --- a/apps/minify/helpers.py +++ b/apps/minify/helpers.py @@ -1,7 +1,7 @@ from django.conf import settings +from jingo import register from jinja2 import Markup -from jingo import register, env try: @@ -9,6 +9,7 @@ except ImportError: BUILD_ID_CSS = BUILD_ID_JS = 'dev' + def _build_html(items, wrapping): """ Wrap `items` in wrapping. @@ -44,3 +45,8 @@ def css(bundle, media="screen,projection,tv", debug=settings.TEMPLATE_DEBUG): return _build_html(items, """""" % media) + + +def build_ids(request): + """A context processor for injecting the css/js build ids.""" + return {'BUILD_ID_CSS': BUILD_ID_CSS, 'BUILD_ID_JS': BUILD_ID_JS} diff --git a/settings.py b/settings.py index 5c6f7700c75..b14e07fbcc7 100644 --- a/settings.py +++ b/settings.py @@ -135,12 +135,14 @@ 'amo.context_processors.app', 'amo.context_processors.i18n', 'amo.context_processors.global_settings', + 'minify.helpers.build_ids', ) TEMPLATE_DIRS = ( path('templates'), ) + def JINJA_CONFIG(): import jinja2 from django.conf import settings @@ -160,7 +162,6 @@ def JINJA_CONFIG(): return config - MIDDLEWARE_CLASSES = ( 'commonware.log.ThreadRequestMiddleware', # AMO URL middleware comes first so everyone else sees nice URLs. @@ -284,7 +285,7 @@ def JINJA_CONFIG(): ), 'zamboni/discovery-pane': ( 'css/zamboni/discovery-pane.css', - ) + ), }, 'js': { # JS files common to the entire site. diff --git a/templates/base.html b/templates/base.html index 7598a76f3e2..a145b2bf2d8 100644 --- a/templates/base.html +++ b/templates/base.html @@ -71,7 +71,7 @@ {# js #} {{ js('common') }} - + {% block js %}{% endblock %} {% include "footer.html" %} {# Webtrends Stats Tracking #}