Automatically use cached form data

This commit is contained in:
richard-dds
2018-11-19 14:30:24 -05:00
parent 1d5bfed556
commit 26cd9b4cb0
4 changed files with 22 additions and 15 deletions

View File

@@ -1,6 +1,6 @@
from hashlib import sha256
import json
from werkzeug.datastructures import ImmutableMultiDict
from werkzeug.datastructures import MultiDict
DEFAULT_CACHE_NAME = "formcache"
@@ -16,10 +16,11 @@ class FormCache(object):
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_ = sha256().hexdigest()
hash_ = self._hash()
self.redis.setex(
name=self._key(key_prefix, hash_), value=value, time=expiry_seconds
)
@@ -28,8 +29,12 @@ class FormCache(object):
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 ImmutableMultiDict(dict_data)
return MultiDict(dict_data)
@staticmethod
def _key(prefix, hash_):
return "{}:{}".format(prefix, hash_)
@staticmethod
def _hash():
return sha256().hexdigest()