memcached.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import os
  2. from django.core.cache.backends import memcached
  3. class BMemcached(memcached.BaseMemcachedCache):
  4. """
  5. An implementation of a cache binding using python-binary-memcached
  6. A.K.A BMemcached.
  7. """
  8. def __init__(self, server, params):
  9. import bmemcached
  10. if not params.get('OPTIONS', None):
  11. params['OPTIONS'] = {}
  12. username = params['OPTIONS'].get('username',
  13. os.environ.get('MEMCACHE_USERNAME', None))
  14. if username:
  15. params['OPTIONS']['username'] = username
  16. password = params['OPTIONS'].get('password',
  17. os.environ.get('MEMCACHE_PASSWORD', None))
  18. if password:
  19. params['OPTIONS']['password'] = password
  20. if not server:
  21. server = tuple(os.environ.get('MEMCACHE_SERVERS', '').split(','))
  22. super(BMemcached, self).__init__(server, params,
  23. library=bmemcached,
  24. value_not_found_exception=ValueError)
  25. @property
  26. def _cache(self):
  27. client = getattr(self, '_client', None)
  28. if client:
  29. return client
  30. if self._options:
  31. client = self._lib.Client(self._servers,
  32. self._options.get('username', None),
  33. self._options.get('password', None))
  34. else:
  35. client = self._lib.Client(self._servers,)
  36. self._client = client
  37. return client