Fix request_new

This commit is contained in:
richard-dds 2018-07-23 15:58:57 -04:00 committed by dandds
parent 8d477003db
commit 42cdf17ab6
3 changed files with 42 additions and 53 deletions

View File

@ -64,7 +64,7 @@ def make_app(config, deps, **kwargs):
RequestNew, RequestNew,
{ {
"page": "requests_new", "page": "requests_new",
"requests_client": deps["requests_client"], "db_session": deps["db_session"],
"fundz_client": deps["fundz_client"], "fundz_client": deps["fundz_client"],
}, },
name="request_new", name="request_new",
@ -74,7 +74,7 @@ def make_app(config, deps, **kwargs):
RequestNew, RequestNew,
{ {
"page": "requests_new", "page": "requests_new",
"requests_client": deps["requests_client"], "db_session": deps["db_session"],
"fundz_client": deps["fundz_client"], "fundz_client": deps["fundz_client"],
}, },
name="request_form_new", name="request_form_new",
@ -84,7 +84,7 @@ def make_app(config, deps, **kwargs):
RequestNew, RequestNew,
{ {
"page": "requests_new", "page": "requests_new",
"requests_client": deps["requests_client"], "db_session": deps["db_session"],
"fundz_client": deps["fundz_client"], "fundz_client": deps["fundz_client"],
}, },
name="request_form_update", name="request_form_update",

View File

@ -72,10 +72,10 @@ class Requests(object):
@tornado.gen.coroutine @tornado.gen.coroutine
def submit(self, request): def submit(self, request):
request.status_events.append(StatusEvent(new_status="submitted")) request.status_events.append(RequestStatusEvent(new_status="submitted"))
if Requests.should_auto_approve(request): if Requests.should_auto_approve(request):
request.status_events.append(StatusEvent(new_status="approved")) request.status_events.append(RequestStatusEvent(new_status="approved"))
self.db_session.add(request) self.db_session.add(request)
self.db_session.commit() self.db_session.commit()
@ -99,7 +99,7 @@ class Requests(object):
request.body = deep_merge(request_delta, request.body) request.body = deep_merge(request_delta, request.body)
if Requests.should_allow_submission(request): if Requests.should_allow_submission(request):
request.status_events.append(StatusEvent(new_status="pending_submission")) request.status_events.append(RequestStatusEvent(new_status="pending_submission"))
# Without this, sqlalchemy won't notice the change to request.body, # Without this, sqlalchemy won't notice the change to request.body,
# since it doesn't track dictionary mutations by default. # since it doesn't track dictionary mutations by default.

View File

@ -9,17 +9,16 @@ from atst.forms.review import ReviewForm
class RequestNew(BaseHandler): class RequestNew(BaseHandler):
def initialize(self, page, requests_client, fundz_client): def initialize(self, page, db_session, fundz_client):
self.page = page self.page = page
self.requests_client = requests_client self.requests_repo = Requests(db_session)
self.fundz_client = fundz_client self.fundz_client = fundz_client
@tornado.gen.coroutine
def get_existing_request(self, request_id): def get_existing_request(self, request_id):
if request_id is None: if request_id is None:
return {} return None
request = yield self.requests_client.get("/requests/{}".format(request_id)) request = self.requests_repo.get(request_id)
return request.json return request
@tornado.web.authenticated @tornado.web.authenticated
@tornado.gen.coroutine @tornado.gen.coroutine
@ -28,9 +27,9 @@ class RequestNew(BaseHandler):
screen = int(screen) screen = int(screen)
post_data = self.request.arguments post_data = self.request.arguments
current_user = self.get_current_user() current_user = self.get_current_user()
existing_request = yield self.get_existing_request(request_id) existing_request = self.get_existing_request(request_id)
jedi_flow = JEDIRequestFlow( jedi_flow = JEDIRequestFlow(
self.requests_client, self.requests_repo,
self.fundz_client, self.fundz_client,
screen, screen,
post_data=post_data, post_data=post_data,
@ -50,8 +49,7 @@ class RequestNew(BaseHandler):
) )
if jedi_flow.validate(): if jedi_flow.validate():
response = yield jedi_flow.create_or_update_request() request = jedi_flow.create_or_update_request()
if response.ok:
valid = yield jedi_flow.validate_warnings() valid = yield jedi_flow.validate_warnings()
if valid: if valid:
if jedi_flow.next_screen > len(jedi_flow.screens): if jedi_flow.next_screen > len(jedi_flow.screens):
@ -66,8 +64,6 @@ class RequestNew(BaseHandler):
"requests/screen-%d.html.to" % int(screen), "requests/screen-%d.html.to" % int(screen),
**rerender_args **rerender_args
) )
else:
self.set_status(response.code)
else: else:
self.render( self.render(
"requests/screen-%d.html.to" % int(screen), "requests/screen-%d.html.to" % int(screen),
@ -81,15 +77,10 @@ class RequestNew(BaseHandler):
request = None request = None
if request_id: if request_id:
response = yield self.requests_client.get( request = self.requests_repo.get(request_id)
"/requests/{}".format(request_id),
raise_error=False,
)
if response.ok:
request = response.json
jedi_flow = JEDIRequestFlow( jedi_flow = JEDIRequestFlow(
self.requests_client, self.fundz_client, screen, request, request_id=request_id self.requests_repo, self.fundz_client, screen, request, request_id=request_id
) )
self.render( self.render(
@ -108,7 +99,7 @@ class RequestNew(BaseHandler):
class JEDIRequestFlow(object): class JEDIRequestFlow(object):
def __init__( def __init__(
self, self,
requests_client, requests_repo,
fundz_client, fundz_client,
current_step, current_step,
request=None, request=None,
@ -117,7 +108,7 @@ class JEDIRequestFlow(object):
current_user=None, current_user=None,
existing_request=None, existing_request=None,
): ):
self.requests_client = requests_client self.requests_repo = requests_repo
self.fundz_client = fundz_client self.fundz_client = fundz_client
self.current_step = current_step self.current_step = current_step
@ -145,8 +136,13 @@ class JEDIRequestFlow(object):
@tornado.gen.coroutine @tornado.gen.coroutine
def validate_warnings(self): def validate_warnings(self):
existing_request_data = (
self.existing_request
and self.existing_request.body.get(self.form_section)
) or None
valid = yield self.form.perform_extra_validation( valid = yield self.form.perform_extra_validation(
self.existing_request.get('body', {}).get(self.form_section), existing_request_data,
self.fundz_client, self.fundz_client,
) )
return valid return valid
@ -171,15 +167,15 @@ class JEDIRequestFlow(object):
if self.request: if self.request:
if self.form_section == "review_submit": if self.form_section == "review_submit":
data = self.request["body"] data = self.request.body
else: else:
data = self.request["body"].get(self.form_section, {}) data = self.request.body.get(self.form_section, {})
return defaultdict(lambda: defaultdict(lambda: 'Input required'), data) return defaultdict(lambda: defaultdict(lambda: 'Input required'), data)
@property @property
def can_submit(self): def can_submit(self):
return self.request and self.request["status"] != "incomplete" return self.request and self.request.status != "incomplete"
@property @property
def next_screen(self): def next_screen(self):
@ -222,19 +218,12 @@ class JEDIRequestFlow(object):
}, },
] ]
@tornado.gen.coroutine
def create_or_update_request(self): def create_or_update_request(self):
request_data = { request_data = {
"creator_id": self.current_user["id"], self.form_section: self.form.data
"request": {self.form_section: self.form.data},
} }
if self.request_id: if self.request_id:
response = yield self.requests_client.patch( self.requests_repo.update(self.request_id, request_data)
"/requests/{}".format(self.request_id), json=request_data
)
else: else:
response = yield self.requests_client.post("/requests", json=request_data) request = self.requests_repo.create(self.current_user["id"], request_data)
self.request = response.json self.request_id = request.id
self.request_id = self.request["id"]
return response