Implement event-based caching

This commit is contained in:
Raphael Michel
2014-10-07 00:06:11 +02:00
parent 3c6f8b77cb
commit 73e49e6423
3 changed files with 142 additions and 23 deletions

View File

@@ -284,6 +284,10 @@ class Event(models.Model):
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.get_cache().clear()
return super().save(self, *args, **kwargs)
def get_date_from_display(self):
return _date(
self.date_from,
@@ -298,6 +302,10 @@ class Event(models.Model):
"DATETIME_FORMAT" if self.show_times else "DATE_FORMAT"
)
def get_cache(self):
from tixlbase.cache import EventRelatedCache
return EventRelatedCache(self)
class EventPermission(models.Model):
"""
@@ -353,6 +361,11 @@ class ItemCategory(models.Model):
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if self.event:
self.event.get_cache().clear()
return super().save(self, *args, **kwargs)
class Property(models.Model):
"""
@@ -377,6 +390,11 @@ class Property(models.Model):
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if self.event:
self.event.get_cache().clear()
return super().save(self, *args, **kwargs)
class PropertyValue(models.Model):
"""
@@ -405,6 +423,11 @@ class PropertyValue(models.Model):
def __str__(self):
return "%s: %s" % (self.prop.name, self.value)
def save(self, *args, **kwargs):
if self.prop:
self.prop.event.get_cache().clear()
return super().save(self, *args, **kwargs)
class Question(models.Model):
"""
@@ -446,6 +469,11 @@ class Question(models.Model):
def __str__(self):
return self.question
def save(self, *args, **kwargs):
if self.event:
self.event.get_cache().clear()
return super().save(self, *args, **kwargs)
class Item(models.Model):
"""
@@ -529,6 +557,11 @@ class Item(models.Model):
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if self.event:
self.event.get_cache().clear()
return super().save(self, *args, **kwargs)
def delete(self):
self.deleted = True
self.active = False
@@ -569,9 +602,6 @@ class Item(models.Model):
return result
def get_cache(self):
return None
class ItemVariation(models.Model):
"""
@@ -614,6 +644,11 @@ class ItemVariation(models.Model):
verbose_name = _("Item variation")
verbose_name_plural = _("Item variations")
def save(self, *args, **kwargs):
if self.item:
self.item.event.get_cache().clear()
return super().save(self, *args, **kwargs)
class BaseRestriction(models.Model):
"""
@@ -621,6 +656,12 @@ class BaseRestriction(models.Model):
of Items or ItemVariations. This model is just an abstract base class to be
extended by restriction plugins.
"""
event = models.ForeignKey(
Event,
on_delete=models.CASCADE,
related_name="restrictions_%(app_label)s_%(class)s",
verbose_name=_("Event"),
)
items = models.ManyToManyField(
Item,
related_name="restrictions_%(app_label)s_%(class)s",
@@ -634,3 +675,8 @@ class BaseRestriction(models.Model):
abstract = True
verbose_name = _("Restriction")
verbose_name_plural = _("Restrictions")
def save(self, *args, **kwargs):
if self.event:
self.event.get_cache().clear()
return super().save(self, *args, **kwargs)