Fix cache
* Disable cache on stations * Add cache wrapper helpermerge-requests/339/head
parent
d48de12346
commit
da388ba41d
|
@ -1,7 +1,10 @@
|
||||||
import math
|
import math
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
|
||||||
|
from django.core.cache import cache
|
||||||
|
|
||||||
|
|
||||||
def get_apikey(user):
|
def get_apikey(user):
|
||||||
try:
|
try:
|
||||||
|
@ -51,3 +54,28 @@ def resolve_overlaps(station, gs_data, start, end):
|
||||||
if datum.end >= end:
|
if datum.end >= end:
|
||||||
end = datum.start
|
end = datum.start
|
||||||
return start, end
|
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
|
||||||
|
|
|
@ -9,6 +9,7 @@ from django.db.models import Count, Case, When, F
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.core.cache import cache
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.http import JsonResponse, HttpResponseNotFound, HttpResponseServerError, HttpResponse
|
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.timezone import now, make_aware, utc
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.views.decorators.http import require_POST
|
from django.views.decorators.http import require_POST
|
||||||
from django.views.decorators.cache import cache_page
|
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
|
|
||||||
from rest_framework import serializers, viewsets
|
from rest_framework import serializers, viewsets
|
||||||
|
@ -59,10 +59,12 @@ def satellite_position(request, sat_id):
|
||||||
return JsonResponse(data, safe=False)
|
return JsonResponse(data, safe=False)
|
||||||
|
|
||||||
|
|
||||||
@cache_page(settings.CACHE_TTL)
|
|
||||||
def index(request):
|
def index(request):
|
||||||
"""View to render index page."""
|
"""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:
|
try:
|
||||||
featured_station = Station.objects.filter(active=True).latest('featured_date')
|
featured_station = Station.objects.filter(active=True).latest('featured_date')
|
||||||
except Station.DoesNotExist:
|
except Station.DoesNotExist:
|
||||||
|
@ -529,7 +531,6 @@ def stations_list(request):
|
||||||
{'stations': stations, 'form': form, 'antennas': antennas})
|
{'stations': stations, 'form': form, 'antennas': antennas})
|
||||||
|
|
||||||
|
|
||||||
@cache_page(settings.CACHE_TTL)
|
|
||||||
def station_view(request, id):
|
def station_view(request, id):
|
||||||
"""View for single station page."""
|
"""View for single station page."""
|
||||||
station = get_object_or_404(Station, id=id)
|
station = get_object_or_404(Station, id=id)
|
||||||
|
|
Loading…
Reference in New Issue