from django.core.cache import cache from django.utils import timezone from misago.monitor.models import Item class Monitor(object): def __init__(self): self._cache_deleted = False self._items = {} self.refresh() def refresh(self): self._items = cache.get('monitor') if not self._items: self._items = {} for i in Item.objects.all(): self._items[i.id] = [i.value, i.updated] cache.set('monitor', self._items) def __contains__(self, key): return key in self._items def __getitem__(self, key): return self._items[key][0] def __setitem__(self, key, value): self._items[key][0] = value cache.set('monitor', self._items) sync_item = Item(id=key, value=value, updated=timezone.now()) sync_item.save(force_update=True) return value def __delitem__(self, key): pass def get(self, key, default=None): if not key in self._items: return default return self._items[key][0] def get_updated(self, key): if key in self._items: return self._items[key][1] return None def has_key(self, key): return key in self._items def keys(self): return self._items.keys() def values(self): return self._items.values() def items(self): return self._items.items() def iterkeys(self): return self._items.iterkeys() def itervalues(self): return self._items.itervalues() def iteritems(self): return self._items.iteritems()