aboutsummaryrefslogtreecommitdiffstats
path: root/src/workflow
diff options
context:
space:
mode:
authorSawyer Bergeron <sbergeron@iol.unh.edu>2019-06-06 12:45:32 -0400
committerSawyer Bergeron <sbergeron@iol.unh.edu>2019-06-12 11:39:59 -0400
commitec2f0d1340d0548aedc5773788e241d1558fa1ed (patch)
tree45959a60d910a8d76e7cfc7130a972356245e8ff /src/workflow
parent48e42996ef463ca03664fbeafa047b1338998686 (diff)
redirect to booking detail on creation
Change-Id: I4e27f6a4a64314639b9ac83750b5b6add069399b Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
Diffstat (limited to 'src/workflow')
-rw-r--r--src/workflow/models.py10
-rw-r--r--src/workflow/views.py32
-rw-r--r--src/workflow/workflow_manager.py18
3 files changed, 41 insertions, 19 deletions
diff --git a/src/workflow/models.py b/src/workflow/models.py
index 43a9bf2..6c6bd9a 100644
--- a/src/workflow/models.py
+++ b/src/workflow/models.py
@@ -490,6 +490,9 @@ class Repository():
pass
JobFactory.makeSnapshotTask(image, booking, host)
+ self.el[self.RESULT] = image
+ self.el[self.HAS_RESULT] = True
+
def make_generic_resource_bundle(self):
owner = self.el[self.SESSION_USER]
if self.GRESOURCE_BUNDLE_MODELS in self.el:
@@ -556,6 +559,7 @@ class Repository():
return "GRB no models given. CODE:0x0001"
self.el[self.RESULT] = bundle
+ self.el[self.HAS_RESULT] = True
return False
def make_software_config_bundle(self):
@@ -667,6 +671,9 @@ class Repository():
except Exception as e:
return "BOOK, saving booking generated exception: " + str(e) + " CODE:0x0016"
+ self.el[self.RESULT] = booking
+ self.el[self.HAS_RESULT] = True
+
def make_opnfv_config(self):
opnfv_models = self.el[self.OPNFV_MODELS]
config_bundle = self.el[self.SELECTED_CONFIG_BUNDLE]
@@ -713,10 +720,13 @@ class Repository():
)
self.el[self.RESULT] = opnfv_config
+ self.el[self.HAS_RESULT] = True
def __init__(self):
self.el = {}
self.el[self.CONFIRMATION] = {}
self.el["active_step"] = 0
+ self.el[self.HAS_RESULT] = False
+ self.el[self.RESULT] = None
self.get_history = {}
self.put_history = {}
diff --git a/src/workflow/views.py b/src/workflow/views.py
index f2e37ef..7ed9031 100644
--- a/src/workflow/views.py
+++ b/src/workflow/views.py
@@ -8,12 +8,14 @@
##############################################################################
-from django.http import HttpResponse, HttpResponseGone
+from django.http import HttpResponseGone, JsonResponse
from django.shortcuts import render
+from django.urls import reverse
import uuid
from workflow.workflow_manager import ManagerTracker, SessionManager
+from booking.models import Booking
import logging
logger = logging.getLogger(__name__)
@@ -29,23 +31,33 @@ def attempt_auth(request):
return None
+def get_redirect_response(result):
+ if not result:
+ return {}
+
+ # need to get type of result, and switch on the type
+ # since has_result, result must be populated with a valid object
+ if isinstance(result, Booking):
+ return {
+ 'redir_url': reverse('booking:booking_detail', kwargs={'booking_id': result.id})
+ }
+ else:
+ return {}
+
+
def delete_session(request):
manager = attempt_auth(request)
if not manager:
return HttpResponseGone("No session found that relates to current request")
- if manager.pop_workflow():
- return HttpResponse('')
- else:
- del ManagerTracker.managers[request.session['manager_session']]
- return render(request, 'workflow/exit_redirect.html')
+ not_last_workflow, result = manager.pop_workflow()
- try:
+ if not_last_workflow: # this was not the last workflow, so don't redirect away
+ return JsonResponse({})
+ else:
del ManagerTracker.managers[request.session['manager_session']]
- return HttpResponse('')
- except Exception:
- return None
+ return JsonResponse(get_redirect_response(result))
def step_view(request):
diff --git a/src/workflow/workflow_manager.py b/src/workflow/workflow_manager.py
index 525aa6f..26f926e 100644
--- a/src/workflow/workflow_manager.py
+++ b/src/workflow/workflow_manager.py
@@ -64,15 +64,15 @@ class SessionManager():
)
def pop_workflow(self):
- if(len(self.workflows) <= 1):
- return False
-
- if self.workflows[-1].repository.el[self.workflows[-1].repository.HAS_RESULT]:
- key = self.workflows[-1].repository.el[self.workflows[-1].repository.RESULT_KEY]
- result = self.workflows[-1].repository.el[self.workflows[-1].repository.RESULT]
- self.workflows[-2].repository.el[key] = result
- self.workflows.pop()
- return True
+ multiple_wfs = len(self.workflows) > 1
+ if multiple_wfs:
+ if self.workflows[-1].repository.el[Repository.RESULT]: # move result
+ key = self.workflows[-1].repository.el[Repository.RESULT_KEY]
+ result = self.workflows[-1].repository.el[Repository.RESULT]
+ self.workflows[-2].repository.el[key] = result
+ self.workflows.pop()
+ current_repo = self.workflows[-1].repository
+ return (multiple_wfs, current_repo.el[current_repo.RESULT])
def status(self, request):
try: