1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- from datetime import timedelta
- from django.core.cache import cache
- from django.utils import timezone
- from misago.models import MonitorItem
- 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 MonitorItem.objects.all():
- self._items[i.id] = [i.value, i.updated, i.type]
- 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
- self._items[key][1] = timezone.now()
- cache.set('monitor', self._items)
- sync_item = MonitorItem(
- id=key,
- value=value,
- type=self._items[key][2],
- updated=timezone.now()
- )
- sync_item.save(force_update=True)
- return value
- def __delitem__(self, key):
- pass
- def increase(self, key, i=1):
- self[key] = self[key] + i
- def decrease(self, key, i=1):
- self[key] = self[key] - i
- 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 expired(self, key, seconds=5):
- return self._items[key][1] < (timezone.now() - timedelta(seconds=seconds))
- 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()
|