diff --git a/atst/utils/form_cache.py b/atst/utils/form_cache.py new file mode 100644 index 00000000..e8e249f5 --- /dev/null +++ b/atst/utils/form_cache.py @@ -0,0 +1,18 @@ +import os +import hashlib +import pickle + + +DEFAULT_CACHE_NAME = "formcache" + + +def cache_form_data(redis, formdata, expiry_seconds=3600, key_prefix=DEFAULT_CACHE_NAME): + value = pickle.dumps(formdata) + key = hashlib.sha1(os.urandom(64)).hexdigest() + redis.setex(name="{}:{}".format(key_prefix, key), value=value, time=expiry_seconds) + return key + + +def retrieve_form_data(redis, formdata_key, key_prefix="formcache"): + data = redis.get("{}:{}".format(key_prefix, formdata_key)) + return pickle.loads(data) diff --git a/tests/utils/test_form_cache.py b/tests/utils/test_form_cache.py new file mode 100644 index 00000000..7eaabeee --- /dev/null +++ b/tests/utils/test_form_cache.py @@ -0,0 +1,15 @@ +from werkzeug.datastructures import ImmutableDict + +from atst.utils.form_cache import DEFAULT_CACHE_NAME, cache_form_data, retrieve_form_data + +def test_cache_form_data(app): + data = ImmutableDict({"kessel_run": "12 parsecs"}) + key = cache_form_data(app.redis, data) + assert app.redis.get("{}:{}".format(DEFAULT_CACHE_NAME, key)) + + +def test_retrieve_form_data(app): + data = ImmutableDict({"class": "corellian"}) + key = cache_form_data(app.redis, data) + retrieved = retrieve_form_data(app.redis, key) + assert retrieved == data