Automatically use cached form data
This commit is contained in:
@@ -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()
|
||||
|
Reference in New Issue
Block a user