monitor.py 1.8 KB

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