diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 92 |
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']: |