monitor.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from django.core.cache import cache
  2. from django.utils import timezone
  3. from misago.monitor.models import Item
  4. class Monitor(object):
  5. def __init__(self):
  6. self._cache_deleted = False
  7. self._items = {}
  8. self.refresh()
  9. def refresh(self):
  10. self._items = cache.get('monitor')
  11. if not self._items:
  12. self._items = {}
  13. for i in Item.objects.all():
  14. self._items[i.id] = [i.value, i.updated]
  15. cache.set('monitor', self._items)
  16. def __contains__(self, key):
  17. return key in self._items
  18. def __getitem__(self, key):
  19. return self._items[key][0]
  20. def __setitem__(self, key, value):
  21. self._items[key][0] = value
  22. cache.set('monitor', self._items)
  23. sync_item = Item(id=key, value=value, updated=timezone.now())
  24. sync_item.save(force_update=True)
  25. return value
  26. def __delitem__(self, key):
  27. pass
  28. def get(self, key, default=None):
  29. if not key in self._items:
  30. return default
  31. return self._items[key][0]
  32. def get_updated(self, key):
  33. if key in self._items:
  34. return self._items[key][1]
  35. return None
  36. def has_key(self, key):
  37. return key in self._items
  38. def keys(self):
  39. return self._items.keys()
  40. def values(self):
  41. return self._items.values()
  42. def items(self):
  43. return self._items.items()
  44. def iterkeys(self):
  45. return self._items.iterkeys()
  46. def itervalues(self):
  47. return self._items.itervalues()
  48. def iteritems(self):
  49. return self._items.iteritems()