1
0
Fork 0

Fix cache

* Disable cache on stations
* Add cache wrapper helper
merge-requests/339/head
Nikos Roussos 2017-05-10 23:38:26 +03:00
parent d48de12346
commit da388ba41d
No known key found for this signature in database
GPG Key ID: BADFF1767BA7C8E1
2 changed files with 33 additions and 4 deletions

View File

@ -1,7 +1,10 @@
import math
from datetime import timedelta
from rest_framework.authtoken.models import Token
from django.core.cache import cache
def get_apikey(user):
try:
@ -51,3 +54,28 @@ def resolve_overlaps(station, gs_data, start, end):
if datum.end >= end:
end = datum.start
return start, end
def cache_get_key(*args, **kwargs):
import hashlib
serialise = []
for arg in args:
serialise.append(str(arg))
for key, arg in kwargs.items():
serialise.append(str(key))
serialise.append(str(arg))
key = hashlib.md5("".join(serialise)).hexdigest()
return key
def cache_for(time):
def decorator(fn):
def wrapper(*args, **kwargs):
key = cache_get_key(fn.__name__, *args, **kwargs)
result = cache.get(key)
if not result:
result = fn(*args, **kwargs)
cache.set(key, result, time)
return result
return wrapper
return decorator

View File

@ -9,6 +9,7 @@ from django.db.models import Count, Case, When, F
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.cache import cache
from django.core.management import call_command
from django.core.urlresolvers import reverse
from django.http import JsonResponse, HttpResponseNotFound, HttpResponseServerError, HttpResponse
@ -16,7 +17,6 @@ from django.shortcuts import get_object_or_404, render, redirect
from django.utils.timezone import now, make_aware, utc
from django.utils.text import slugify
from django.views.decorators.http import require_POST
from django.views.decorators.cache import cache_page
from django.views.generic import ListView
from rest_framework import serializers, viewsets
@ -59,10 +59,12 @@ def satellite_position(request, sat_id):
return JsonResponse(data, safe=False)
@cache_page(settings.CACHE_TTL)
def index(request):
"""View to render index page."""
observations = Observation.objects.all()
observations = cache.get('observations')
if not observations:
observations = Observation.objects.all()
cache.set('observations', observations, settings.CACHE_TTL)
try:
featured_station = Station.objects.filter(active=True).latest('featured_date')
except Station.DoesNotExist:
@ -529,7 +531,6 @@ def stations_list(request):
{'stations': stations, 'form': form, 'antennas': antennas})
@cache_page(settings.CACHE_TTL)
def station_view(request, id):
"""View for single station page."""
station = get_object_or_404(Station, id=id)