12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- from django.core.cache import cache
- from django.db import models
- from django.utils.datastructures import SortedDict
- from misago.thread import local
- _thread_local = local()
- class WarnLevelManager(models.Manager):
- def get_levels(self):
- try:
- return _thread_local._misago_warning_levels
- except AttributeError:
- _thread_local._misago_warning_levels = self.fetch_levels()
- return _thread_local._misago_warning_levels
- def get_level(self, level):
- return self.get_levels().get(level)
- def fetch_levels(self):
- from_cache = cache.get('warning_levels', 'nada')
- if from_cache != 'nada':
- return from_cache
- from_db = self.fetch_levels_from_db()
- cache.set('warning_levels', from_db)
- return from_db
- def fetch_levels_from_db(self):
- fetched_levels = SortedDict()
- for level in self.order_by('warning_level').iterator():
- fetched_levels[level.warning_level] = level
- return fetched_levels
- class WarnLevel(models.Model):
- name = models.CharField(max_length=255)
- slug = models.SlugField(max_length=255)
- description = models.TextField(null=True, blank=True)
- warning_level = models.PositiveIntegerField(default=1, db_index=True)
- expires_after_minutes = models.PositiveIntegerField(default=0)
- inhibit_posting_replies = models.PositiveIntegerField(default=0)
- inhibit_posting_threads = models.PositiveIntegerField(default=0)
- objects = WarnLevelManager()
- class Meta:
- app_label = 'misago'
- def save(self, *args, **kwargs):
- super(WarnLevel, self).save(*args, **kwargs)
- cache.delete('warning_levels')
- def delete(self, *args, **kwargs):
- super(WarnLevel, self).delete(*args, **kwargs)
- cache.delete('warning_levels')
|