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']: | 
