django: cache value decorator
from functools import wraps
from django.core.cache import c
def cached_value(key=None, **kwargs):
"""
key で指定された値をキャッシュから取得して current に渡す
reset=True が指定されるとキャッシュデータを使わない
"""
def _cache_controller(original_func):
@wraps(original_func)
def _cache_controlled(*args, **kw):
current = None if kw.get("reset", False) else cache.get(key)
lastest = original_func(*args, current=current, **kw)
cache.set(key, lastest)
return lastest
return _cache_controlled
return _cache_controller
class PurchaseOrder:
@cached_value(key="webservice_accesstoken")
def get_accesstoken(self, current=None, reset=False):
return Token(self.company.credentials).update_token(current)