Use form_cache.from_request

This commit is contained in:
richard-dds 2018-11-16 13:20:55 -05:00
parent 2f04571767
commit 7d78ba4d65
4 changed files with 22 additions and 13 deletions

View File

@ -91,20 +91,15 @@ class FinancialVerificationBase(object):
raise FormValidationError(form) raise FormValidationError(form)
def existing_form_data():
key = http_request.args.get("formCache")
if key:
return app.form_cache.read(key)
class GetFinancialVerificationForm(FinancialVerificationBase): class GetFinancialVerificationForm(FinancialVerificationBase):
def __init__(self, user, request, is_extended=False): def __init__(self, user, request, cached_data=None, is_extended=False):
self.user = user self.user = user
self.request = request self.request = request
self.cached_data = cached_data or {}
self.is_extended = is_extended self.is_extended = is_extended
def execute(self): def execute(self):
form = self._get_form(self.request, self.is_extended, formdata=existing_form_data()) form = self._get_form(self.request, self.is_extended, formdata=self.cached_data)
form.reset() form.reset()
return form return form
@ -199,7 +194,10 @@ def financial_verification(request_id):
) )
form = GetFinancialVerificationForm( form = GetFinancialVerificationForm(
g.current_user, request, is_extended=is_extended g.current_user,
request,
is_extended=is_extended,
cached_data=app.form_cache.from_request(http_request),
).execute() ).execute()
return render_template( return render_template(

View File

@ -1,4 +1,11 @@
from flask import g, redirect, render_template, url_for, request as http_request, current_app from flask import (
g,
redirect,
render_template,
url_for,
request as http_request,
current_app,
)
from . import requests_bp from . import requests_bp
from atst.domain.requests import Requests from atst.domain.requests import Requests
@ -30,7 +37,9 @@ def option_data():
@requests_bp.route("/requests/new/<int:screen>", methods=["GET"]) @requests_bp.route("/requests/new/<int:screen>", methods=["GET"])
def requests_form_new(screen): def requests_form_new(screen):
cached_data = current_app.form_cache.from_request(http_request) cached_data = current_app.form_cache.from_request(http_request)
jedi_flow = JEDIRequestFlow(screen, request=None, current_user=g.current_user, post_data=cached_data) jedi_flow = JEDIRequestFlow(
screen, request=None, current_user=g.current_user, post_data=cached_data
)
return render_template( return render_template(
"requests/screen-%d.html" % int(screen), "requests/screen-%d.html" % int(screen),

View File

@ -7,7 +7,6 @@ DEFAULT_CACHE_NAME = "formcache"
class FormCache(object): class FormCache(object):
def __init__(self, redis): def __init__(self, redis):
self.redis = redis self.redis = redis
@ -19,7 +18,9 @@ class FormCache(object):
def write(self, formdata, expiry_seconds=3600, key_prefix=DEFAULT_CACHE_NAME): def write(self, formdata, expiry_seconds=3600, key_prefix=DEFAULT_CACHE_NAME):
value = pickle.dumps(formdata) value = pickle.dumps(formdata)
hash_ = hashlib.sha1(os.urandom(64)).hexdigest() hash_ = hashlib.sha1(os.urandom(64)).hexdigest()
self.redis.setex(name=self._key(key_prefix, hash_), value=value, time=expiry_seconds) self.redis.setex(
name=self._key(key_prefix, hash_), value=value, time=expiry_seconds
)
return hash_ return hash_
def read(self, formdata_key, key_prefix=DEFAULT_CACHE_NAME): def read(self, formdata_key, key_prefix=DEFAULT_CACHE_NAME):

View File

@ -8,6 +8,7 @@ from atst.utils.form_cache import DEFAULT_CACHE_NAME, FormCache
def form_cache(app): def form_cache(app):
return FormCache(app.redis) return FormCache(app.redis)
def test_cache_form_data(app, form_cache): def test_cache_form_data(app, form_cache):
data = ImmutableDict({"kessel_run": "12 parsecs"}) data = ImmutableDict({"kessel_run": "12 parsecs"})
key = form_cache.write(data) key = form_cache.write(data)