41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
from hashlib import sha256
|
|
import json
|
|
from werkzeug.datastructures import MultiDict
|
|
|
|
|
|
DEFAULT_CACHE_NAME = "formcache"
|
|
|
|
|
|
class FormCache(object):
|
|
PARAM_NAME = "formCache"
|
|
|
|
def __init__(self, redis):
|
|
self.redis = redis
|
|
|
|
def from_request(self, http_request):
|
|
cache_key = http_request.args.get(self.PARAM_NAME)
|
|
if cache_key:
|
|
return self.read(cache_key)
|
|
return MultiDict()
|
|
|
|
def write(self, formdata, expiry_seconds=3600, key_prefix=DEFAULT_CACHE_NAME):
|
|
value = json.dumps(formdata)
|
|
hash_ = self._hash()
|
|
self.redis.setex(
|
|
name=self._key(key_prefix, hash_), value=value, time=expiry_seconds
|
|
)
|
|
return hash_
|
|
|
|
def read(self, formdata_key, key_prefix=DEFAULT_CACHE_NAME):
|
|
data = self.redis.get(self._key(key_prefix, formdata_key))
|
|
dict_data = json.loads(data) if data is not None else {}
|
|
return MultiDict(dict_data)
|
|
|
|
@staticmethod
|
|
def _key(prefix, hash_):
|
|
return "{}:{}".format(prefix, hash_)
|
|
|
|
@staticmethod
|
|
def _hash():
|
|
return sha256().hexdigest()
|