summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-02-17 12:55:07 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-02-17 12:55:07 +0100
commit5e47cbfcbeb090762547042d809016074bf1c679 (patch)
tree5e80fbe23775e8bfe2986f9201c6e32005c2f7ec /ishtar_common/models.py
parenta37e0f6e2e116b63fbf2a4e6fd7f94b848f35040 (diff)
downloadIshtar-5e47cbfcbeb090762547042d809016074bf1c679.tar.bz2
Ishtar-5e47cbfcbeb090762547042d809016074bf1c679.zip
Fix cache for multiple instance of ishtar - Database changes for managing modules via profile
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py92
1 files changed, 66 insertions, 26 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index d7e63856b..bcd1881d6 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -249,7 +249,21 @@ class OwnPerms:
return cls.objects.filter(query).order_by(*cls._meta.ordering)
-class GeneralType(models.Model):
+class Cached(object):
+ @classmethod
+ def get_cache(cls, slug):
+ cache_key, value = get_cache(cls, slug)
+ if value:
+ return value
+ try:
+ obj = cls.objects.get(txt_idx=slug)
+ cache.set(cache_key, obj, settings.CACHE_TIMEOUT)
+ return obj
+ except cls.DoesNotExist:
+ return None
+
+
+class GeneralType(models.Model, Cached):
"""
Abstract class for "types"
"""
@@ -457,18 +471,6 @@ class GeneralType(models.Model):
for item in cls.objects.all():
item.generate_key()
- @classmethod
- def get_cache(cls, slug):
- cache_key, value = get_cache(cls, slug)
- if value:
- return value
- try:
- obj = cls.objects.get(txt_idx=slug)
- cache.set(cache_key, obj, settings.CACHE_TIMEOUT)
- return obj
- except cls.DoesNotExist:
- return None
-
class ItemKey(models.Model):
key = models.CharField(_(u"Key"), max_length=100)
@@ -765,7 +767,57 @@ class LightHistorizedItem(BaseHistorizedItem):
return True
-class GlobalVar(models.Model):
+class IshtarSiteProfile(models.Model, Cached):
+ label = models.TextField(_(u"Name"))
+ slug = models.SlugField(_(u"Slug"), unique=True)
+ description = models.TextField(_(u"Description"), null=True, blank=True)
+ files = models.BooleanField(_(u"Files module"), default=False)
+ context_record = models.BooleanField(_(u"Context records module"),
+ default=False)
+ find = models.BooleanField(_(u"Finds module"), default=False,
+ help_text=_(u"Need context records module"))
+ warehouse = models.BooleanField(
+ _(u"Warehouses module"), default=False,
+ help_text=_(u"Need finds module"))
+ active = models.BooleanField(_(u"Current active"), default=False)
+
+ class Meta:
+ verbose_name = _(u"Ishtar site profile")
+ verbose_name_plural = _(u"Ishtar site profiles")
+ ordering = ['label']
+
+ def __unicode__(self):
+ return unicode(self.label)
+
+ def save(self, *args, **kwargs):
+ raw = False
+ if 'raw' in kwargs:
+ raw = kwargs.pop('raw')
+ super(IshtarSiteProfile, self).save(*args, **kwargs)
+ obj = self
+ if raw:
+ return obj
+ q = self.__class__.objects.filter(active=True).exclude(pk=self.pk)
+ if obj.active and q.count():
+ for profile in q.all():
+ profile.active = False
+ profile.save(raw=True)
+ changed = False
+ if not obj.active and not q.count():
+ obj.active = True
+ changed = True
+ if obj.warehouse and not obj.find:
+ obj.find = True
+ changed = True
+ if obj.find and not obj.context_record:
+ obj.context_record = True
+ changed = True
+ if changed:
+ obj = obj.save(raw=True)
+ return obj
+
+
+class GlobalVar(models.Model, Cached):
slug = models.SlugField(_(u"Variable name"), unique=True)
description = models.TextField(_(u"Description of the variable"),
null=True, blank=True)
@@ -779,18 +831,6 @@ class GlobalVar(models.Model):
def __unicode__(self):
return unicode(self.slug)
- @classmethod
- def get_cache(cls, slug):
- cache_key, value = get_cache(cls, slug)
- if value:
- return value
- try:
- obj = cls.objects.get(slug=slug)
- cache.set(cache_key, obj.value, settings.CACHE_TIMEOUT)
- return obj.value
- except cls.DoesNotExist:
- return None
-
def cached_globalvar_changed(sender, **kwargs):
if not kwargs['instance']: