django.contrib.sessions.backends.cache: 43 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/django/contrib/sessions/backends/cache.py

Stats: 0 executed, 41 missed, 2 excluded, 23 ignored

  1. from django.contrib.sessions.backends.base import SessionBase, CreateError
  2. from django.core.cache import cache
  3. KEY_PREFIX = "django.contrib.sessions.cache"
  4. class SessionStore(SessionBase):
  5. """
  6. A cache-based session store.
  7. """
  8. def __init__(self, session_key=None):
  9. self._cache = cache
  10. super(SessionStore, self).__init__(session_key)
  11. @property
  12. def cache_key(self):
  13. return KEY_PREFIX + self._get_or_create_session_key()
  14. def load(self):
  15. try:
  16. session_data = self._cache.get(self.cache_key, None)
  17. except Exception:
  18. # Some backends (e.g. memcache) raise an exception on invalid
  19. # cache keys. If this happens, reset the session. See #17810.
  20. session_data = None
  21. if session_data is not None:
  22. return session_data
  23. self.create()
  24. return {}
  25. def create(self):
  26. # Because a cache can fail silently (e.g. memcache), we don't know if
  27. # we are failing to create a new session because of a key collision or
  28. # because the cache is missing. So we try for a (large) number of times
  29. # and then raise an exception. That's the risk you shoulder if using
  30. # cache backing.
  31. for i in xrange(10000):
  32. self._session_key = self._get_new_session_key()
  33. try:
  34. self.save(must_create=True)
  35. except CreateError:
  36. continue
  37. self.modified = True
  38. return
  39. raise RuntimeError("Unable to create a new session key.")
  40. def save(self, must_create=False):
  41. if must_create:
  42. func = self._cache.add
  43. else:
  44. func = self._cache.set
  45. result = func(self.cache_key,
  46. self._get_session(no_load=must_create),
  47. self.get_expiry_age())
  48. if must_create and not result:
  49. raise CreateError
  50. def exists(self, session_key):
  51. return (KEY_PREFIX + session_key) in self._cache
  52. def delete(self, session_key=None):
  53. if session_key is None:
  54. if self.session_key is None:
  55. return
  56. session_key = self.session_key
  57. self._cache.delete(KEY_PREFIX + session_key)