From 68673591462136e27a37ec7238ea6cdaddb43ad6 Mon Sep 17 00:00:00 2001 From: Arona Date: Sat, 30 May 2020 15:50:32 +0100 Subject: [PATCH] Initial work on caching activity feed Server side that is. Ref #162. --- PyRIGS/settings.py | 8 ++++++++ RIGS/signals.py | 12 ++++++++++++ RIGS/templates/index.html | 1 + RIGS/urls.py | 3 ++- RIGS/views.py | 5 +++++ versioning/versioning.py | 6 +++++- 6 files changed, 33 insertions(+), 2 deletions(-) diff --git a/PyRIGS/settings.py b/PyRIGS/settings.py index 8164b221..5d2aa056 100644 --- a/PyRIGS/settings.py +++ b/PyRIGS/settings.py @@ -150,6 +150,14 @@ LOGGING = { } } +# Caching +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', + 'LOCATION': 'cache_table', + } +} + RAVEN_CONFIG = { 'dsn': os.environ.get('RAVEN_DSN'), # If you are using git, you can also automatically configure the diff --git a/RIGS/signals.py b/RIGS/signals.py index c764ec39..bc424e27 100644 --- a/RIGS/signals.py +++ b/RIGS/signals.py @@ -10,6 +10,7 @@ from PyPDF2 import PdfFileReader, PdfFileMerger from django.conf import settings from django.contrib.staticfiles.storage import staticfiles_storage from django.core.mail import EmailMessage, EmailMultiAlternatives +from django.core.cache import cache from django.template.loader import get_template from django.urls import reverse from django.utils import timezone @@ -18,6 +19,7 @@ from premailer import Premailer from z3c.rml import rml2pdf from RIGS import models +from versioning.versioning import models_for_feed def send_eventauthorisation_success_email(instance): @@ -138,3 +140,13 @@ def send_admin_awaiting_approval_email(user, request, **kwargs): user_activated.connect(send_admin_awaiting_approval_email) + +# TODO Move + + +def update_cache(sender, instance, created, **kwargs): + cache.clear() + + +for model in models_for_feed(): + post_save.connect(update_cache, sender=model) diff --git a/RIGS/templates/index.html b/RIGS/templates/index.html index 7d12d0f7..6274569f 100644 --- a/RIGS/templates/index.html +++ b/RIGS/templates/index.html @@ -1,4 +1,5 @@ {% extends 'base_rigs.html' %} + {% block title %}RIGS{% endblock %} {% block content %} diff --git a/RIGS/urls.py b/RIGS/urls.py index 05055e67..c0076f54 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -7,6 +7,7 @@ from PyRIGS.decorators import (api_key_required, has_oembed, permission_required_with_403) from RIGS import finance, ical, models, rigboard, views from versioning import versioning +from django.views.decorators.cache import cache_page urlpatterns = [ path('', login_required(views.Index.as_view()), name='index'), @@ -68,7 +69,7 @@ urlpatterns = [ path('rigboard/activity/', permission_required_with_403('RIGS.view_event')(versioning.ActivityTable.as_view()), name='activity_table'), path('rigboard/activity/feed/', - permission_required_with_403('RIGS.view_event')(versioning.ActivityFeed.as_view()), + cache_page(60 * 10)(permission_required_with_403('RIGS.view_event')(versioning.ActivityFeed.as_view())), name='activity_feed'), path('event//', has_oembed(oembed_view="event_oembed")(rigboard.EventDetail.as_view()), diff --git a/RIGS/views.py b/RIGS/views.py index a0cdd9ca..f1a358bc 100644 --- a/RIGS/views.py +++ b/RIGS/views.py @@ -21,12 +21,17 @@ from assets import models as asset_models from functools import reduce from PyRIGS.views import GenericListView +from django.views.decorators.cache import never_cache +from django.utils.decorators import method_decorator """ Displays the current rig count along with a few other bits and pieces """ +# Disable browser based caching + +@method_decorator(never_cache, name='dispatch') class Index(generic.TemplateView): template_name = 'index.html' diff --git a/versioning/versioning.py b/versioning/versioning.py index 76cbdba7..0b647b26 100644 --- a/versioning/versioning.py +++ b/versioning/versioning.py @@ -235,6 +235,10 @@ class ActivityTable(generic.ListView): return context +def models_for_feed(): + return [models.Event, models.Venue, models.Person, models.Organisation, models.EventAuthorisation, models.RiskAssessment, asset_models.Asset, asset_models.Supplier] + + # Appears on homepage class ActivityFeed(generic.ListView): model = RIGSVersion @@ -243,7 +247,7 @@ class ActivityFeed(generic.ListView): def get_queryset(self): versions = RIGSVersion.objects.get_for_multiple_models( - [models.Event, models.Venue, models.Person, models.Organisation, models.EventAuthorisation, models.RiskAssessment, asset_models.Asset, asset_models.Supplier]) + models_for_feed()) return versions.order_by("-revision__date_created") def get_context_data(self, **kwargs):