diff --git a/symposion_project/apps/conference/models.py b/symposion_project/apps/conference/models.py index b09c94bff2ff4d492bc43f26984597cf7548b855..bd792a10d41d01abd987e2b6a3e6752c5085f1c5 100644 --- a/symposion_project/apps/conference/models.py +++ b/symposion_project/apps/conference/models.py @@ -3,6 +3,9 @@ from django.db import models from timezones.fields import TimeZoneField +CONFERENCE_CACHE = {} + + class Conference(models.Model): """ the full conference for a specific year, e.g. US PyCon 2012. @@ -19,6 +22,19 @@ class Conference(models.Model): def __unicode__(self): return self.title + + def save(self, *args, **kwargs): + super(Conference, self).save(*args, **kwargs) + if self.id in CONFERENCE_CACHE: + del CONFERENCE_CACHE[self.id] + + def delete(self): + pk = self.pk + super(Conference, self).delete() + try: + del CONFERENCE_CACHE[pk] + except KeyError: + pass class Section(models.Model): @@ -38,3 +54,18 @@ class Section(models.Model): def __unicode__(self): return self.name + + +def current_conference(): + from django.conf import settings + try: + conf_id = settings.CONFERENCE_ID + except AttributeError: + from django.core.exceptions import ImproperlyConfigured + raise ImproperlyConfigured("You must set the CONFERENCE_ID setting.") + try: + current_conf = CONFERENCE_CACHE[conf_id] + except KeyError: + current_conf = Conference.objects.get(pk=conf_id) + CONFERENCE_CACHE[conf_id] = current_conf + return current_conf diff --git a/symposion_project/settings.py b/symposion_project/settings.py index bb2ffcc67d6d68b5f768d5eabc2ffc039edd45d1..ca21bcf49af6c04fc69f2bd133cd3bea2119f3c6 100644 --- a/symposion_project/settings.py +++ b/symposion_project/settings.py @@ -199,6 +199,8 @@ DEBUG_TOOLBAR_CONFIG = { "INTERCEPT_REDIRECTS": False, } +CONFERENCE_ID = 1 + # local_settings.py can be used to override environment-specific settings # like database and email that differ between development and production. try: