revoke.py 981 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import time
  2. from UserDict import UserDict
  3. from carrot.connection import DjangoBrokerConnection
  4. from celery.messaging import BroadcastPublisher
  5. from celery.utils import noop
  6. REVOKES_MAX = 1000
  7. REVOKE_EXPIRES = 60 * 60 # one hour.
  8. class RevokeRegistry(UserDict):
  9. def __init__(self, maxlen=REVOKES_MAX, expires=REVOKE_EXPIRES):
  10. self.maxlen = maxlen
  11. self.expires = expires
  12. self.data = {}
  13. def add(self, uuid):
  14. self._expire_item()
  15. self[uuid] = time.time()
  16. def _expire_item(self):
  17. while 1:
  18. if len(self) > self.maxlen:
  19. uuid, when = self.oldest
  20. if time.time() > when + self.expires:
  21. try:
  22. self.pop(uuid, None)
  23. except TypeError:
  24. continue
  25. break
  26. @property
  27. def oldest(self):
  28. return sorted(self.items(), key=lambda (uuid, when): when)[0]
  29. revoked = RevokeRegistry()