You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.3 KiB
75 lines
2.3 KiB
"Base Cache class." |
|
|
|
from django.core.exceptions import ImproperlyConfigured |
|
|
|
class InvalidCacheBackendError(ImproperlyConfigured): |
|
pass |
|
|
|
class BaseCache(object): |
|
def __init__(self, params): |
|
timeout = params.get('timeout', 300) |
|
try: |
|
timeout = int(timeout) |
|
except (ValueError, TypeError): |
|
timeout = 300 |
|
self.default_timeout = timeout |
|
|
|
def add(self, key, value, timeout=None): |
|
""" |
|
Set a value in the cache if the key does not already exist. If |
|
timeout is given, that timeout will be used for the key; otherwise |
|
the default cache timeout will be used. |
|
|
|
Returns True if the value was stored, False otherwise. |
|
""" |
|
raise NotImplementedError |
|
|
|
def get(self, key, default=None): |
|
""" |
|
Fetch a given key from the cache. If the key does not exist, return |
|
default, which itself defaults to None. |
|
""" |
|
raise NotImplementedError |
|
|
|
def set(self, key, value, timeout=None): |
|
""" |
|
Set a value in the cache. If timeout is given, that timeout will be |
|
used for the key; otherwise the default cache timeout will be used. |
|
""" |
|
raise NotImplementedError |
|
|
|
def delete(self, key): |
|
""" |
|
Delete a key from the cache, failing silently. |
|
""" |
|
raise NotImplementedError |
|
|
|
def get_many(self, keys): |
|
""" |
|
Fetch a bunch of keys from the cache. For certain backends (memcached, |
|
pgsql) this can be *much* faster when fetching multiple values. |
|
|
|
Returns a dict mapping each key in keys to its value. If the given |
|
key is missing, it will be missing from the response dict. |
|
""" |
|
d = {} |
|
for k in keys: |
|
val = self.get(k) |
|
if val is not None: |
|
d[k] = val |
|
return d |
|
|
|
def has_key(self, key): |
|
""" |
|
Returns True if the key is in the cache and has not expired. |
|
""" |
|
return self.get(key) is not None |
|
|
|
def __contains__(self, key): |
|
""" |
|
Returns True if the key is in the cache and has not expired. |
|
""" |
|
# This is a separate method, rather than just a copy of has_key(), |
|
# so that it always has the same functionality as has_key(), even |
|
# if a subclass overrides it. |
|
return self.has_key(key)
|
|
|