|
import os
import hashlib
def deco_args_recent_cache(category='dumps'):
'''
裝飾器,返回最新cache的資料
'''
def deco_recent_cache(func):
def func_wrapper(*args, **kargs):
sig = _mk_cache_sig(*args, **kargs)
data = _get_recent_cache(category, func.__name__, sig)
if data is not None:
return data
data = func(*args, **kargs)
if data is not None:
_set_recent_cache(category, func.__name__, sig, data)
return data
return func_wrapper
return deco_recent_cache
def _mk_cache_sig(*args, **kargs):
'''
通過傳入參數,產生唯一標識
'''
src_data = repr(args) + repr(kargs)
m = hashlib.md5(src_data)
sig = m.hexdigest()
return sig
def _get_recent_cache(category, func_name, sig):
full_file_path = '%s/%s/%s' % (category, func_name, sig)
if os.path.isfile(full_file_path):
return eval(file(full_file_path,'r').read())
else:
return None
def _set_recent_cache(category, func_name, sig, data):
full_dir_path = '%s/%s' % (category, func_name)
if not os.path.isdir(full_dir_path):
os.makedirs(full_dir_path)
full_file_path = '%s/%s/%s' % (category, func_name, sig)
f = file(full_file_path, 'w+')
f.write(repr(data))
f.close()
|