From 19ccffa4ae55daad4d6d7640a2dfc94733986b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 19 Sep 2017 13:45:10 +0200 Subject: [PATCH] Cache the homepage template context. This requires pillar-python-sdk c8eec9fa9d8a198df198538a38ca1ad2367bb3e6 or newer. --- cloud/__init__.py | 2 ++ cloud/routes.py | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/cloud/__init__.py b/cloud/__init__.py index daa64dd..82f7e81 100644 --- a/cloud/__init__.py +++ b/cloud/__init__.py @@ -84,8 +84,10 @@ class CloudExtension(PillarExtension): """ from pillar.api.service import signal_user_changed_role + from . import routes signal_user_changed_role.connect(self._user_changed_role) + routes.setup_app(app) def _user_changed_role(self, sender, user: dict): from pillar.api import service diff --git a/cloud/routes.py b/cloud/routes.py index 8e4f265..d2d4349 100644 --- a/cloud/routes.py +++ b/cloud/routes.py @@ -28,6 +28,16 @@ def homepage(): if current_user.is_anonymous: return redirect(url_for('cloud.welcome')) + return render_template( + 'homepage.html', + api=system_util.pillar_api(), + **_homepage_context(), + ) + + +def _homepage_context() -> dict: + """Returns homepage template context variables.""" + # Get latest blog posts api = system_util.pillar_api() latest_posts = Node.all({ @@ -105,13 +115,11 @@ def homepage(): for node in activity_stream: node.url = url_for_node(node=node) - return render_template( - 'homepage.html', + return dict( main_project=main_project, latest_posts=latest_posts._items, activity_stream=activity_stream, - random_featured=random_featured, - api=api) + random_featured=random_featured) @blueprint.route('/login') @@ -331,3 +339,9 @@ def billing(): return render_template( 'users/settings/billing.html', store_user=store_user, groups=groups, title='billing') + + +def setup_app(app): + global _homepage_context + cached = app.cache.cached(timeout=300) + _homepage_context = cached(_homepage_context)