add cache keys

This commit is contained in:
Laura Klünder 2017-07-05 23:38:47 +02:00
parent 6406950263
commit 00a2366ae2
2 changed files with 25 additions and 8 deletions

View file

@ -6,6 +6,8 @@ from django.apps import apps
from django.conf import settings
from django.db import models, transaction
from django.urls import reverse
from django.utils.http import int_to_base36
from django.utils.timezone import make_naive
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from rest_framework.exceptions import PermissionDenied
@ -410,10 +412,18 @@ class ChangeSet(models.Model):
{'num': self.changed_objects_count})
@property
def cache_key(self):
if self.pk is None:
return None
return str(self.pk)+'-'+str(self.last_change)
def updates_cache_key(self):
pk, mapupdate = MapUpdate.last_update()
last_update = self.created if self.last_update_id is None else self.last_update.datetime
return (MapUpdate.cache_key() + '_' + int_to_base36(self.last_update_id or 0) + '_' +
int_to_base36(int(make_naive(last_update).timestamp())))
@property
def changes_cache_key(self):
pk, mapupdate = MapUpdate.last_update()
last_change = self.created if self.last_change_id is None else self.last_change.datetime
return (MapUpdate.cache_key() + '_' + int_to_base36(self.last_change_id or 0) + '_' +
int_to_base36(int(make_naive(last_change).timestamp())))
def get_absolute_url(self):
if self.pk is None:

View file

@ -3,6 +3,8 @@ from contextlib import contextmanager
from django.conf import settings
from django.core.cache import cache
from django.db import models, transaction
from django.utils.http import int_to_base36
from django.utils.timezone import make_naive
from django.utils.translation import ugettext_lazy as _
@ -26,9 +28,14 @@ class MapUpdate(models.Model):
if last_update is not None:
return last_update
with cls.lock():
last_update = cls.objects.latest().datetime
cache.set('mapdata:last_update', last_update, 900)
return last_update
last_update = cls.objects.latest()
cache.set('mapdata:last_update', (last_update.pk, last_update.datetime), 900)
return last_update.pk, last_update.datetime
@classmethod
def cache_key(cls):
pk, dt = cls.last_update()
return int_to_base36(pk)+'_'+int_to_base36(int(make_naive(dt).timestamp()))
@classmethod
@contextmanager
@ -40,4 +47,4 @@ class MapUpdate(models.Model):
if self.pk is not None:
raise TypeError
super().save(**kwargs)
cache.set('mapdata:last_update', self.datetime, 900)
cache.set('mapdata:last_update', (self.pk, self.datetime), 900)