Run 2to3-3.4
[mygpo.git] / mygpo / cache.py
blobd9a28b0d3cb67207b212aaf060eb37c182ef138f
1 from hashlib import sha1
2 from django.core.cache import cache
3 from functools import wraps
6 NOT_IN_CACHE = object()
9 def cache_result(**cache_kwargs):
10 """ Decorator to cache the result of a function call
12 Usage
14 @cache_result('myfunc', timeout=60)
15 def my_function(a, b, c):
16 pass
17 """
19 def _wrapper(f):
21 @wraps(f)
22 def _get(*args, **kwargs):
24 key = sha1(str(f.__module__) + str(f.__name__) +
25 str(args) + str(kwargs)).hexdigest()
27 # the timeout parameter can't be used when getting from a cache
28 get_kwargs = dict(cache_kwargs)
29 get_kwargs.pop('timeout', None)
31 value = cache.get(key, NOT_IN_CACHE, **get_kwargs)
33 if value is NOT_IN_CACHE:
34 value = f(*args, **kwargs)
36 cache.set(key, value, **cache_kwargs)
38 return value
40 return _get
42 return _wrapper