FormCache class

This commit is contained in:
richard-dds 2018-11-15 16:03:29 -05:00
parent e06a28c918
commit a475cb3156
2 changed files with 27 additions and 0 deletions

View File

@ -24,6 +24,7 @@ from atst.models.permissions import Permissions
from atst.eda_client import MockEDAClient from atst.eda_client import MockEDAClient
from atst.uploader import Uploader from atst.uploader import Uploader
from atst.utils import mailer from atst.utils import mailer
from atst.utils.form_cache import FormCache
from atst.queue import queue from atst.queue import queue
@ -67,6 +68,8 @@ def make_app(config):
if ENV != "prod": if ENV != "prod":
app.register_blueprint(dev_routes) app.register_blueprint(dev_routes)
app.form_cache = FormCache(app.redis)
apply_authentication(app) apply_authentication(app)
return app return app

View File

@ -16,3 +16,27 @@ def cache_form_data(redis, formdata, expiry_seconds=3600, key_prefix=DEFAULT_CAC
def retrieve_form_data(redis, formdata_key, key_prefix="formcache"): def retrieve_form_data(redis, formdata_key, key_prefix="formcache"):
data = redis.get("{}:{}".format(key_prefix, formdata_key)) data = redis.get("{}:{}".format(key_prefix, formdata_key))
return pickle.loads(data) return pickle.loads(data)
class FormCache(object):
def __init__(self, redis):
self.redis = redis
def from_request(self, http_request):
cache_key = http_request.args.get("formCache")
if cache_key:
return self.read(cache_key)
def write(self, formdata, expiry_seconds=3600, key_prefix="formcache"):
value = pickle.dumps(formdata)
hash_ = hashlib.sha1(os.urandom(64)).hexdigest()
self.redis.setex(name=self._key(key_prefix, hash_), value=value, time=expiry_seconds)
def read(self, formdata_key, key_prefix="formcache"):
data = self.redis.get(self._key(key_prefix, formdata_key))
return pickle.loads(data)
@staticmethod
def _key(prefix, hash_):
return "{}:{}".format(prefix, hash_)