diff options
author | Sawyer Bergeron <sawyerbergeron@gmail.com> | 2018-12-14 16:05:47 -0500 |
---|---|---|
committer | Sawyer Bergeron <sawyerbergeron@gmail.com> | 2019-01-03 10:34:13 -0500 |
commit | f27e25c199c3c5c9433463732b776ae9b4357cf8 (patch) | |
tree | d684ed4b89355db5050021b4aaaf505d4de70bc8 /src/workflow/booking_workflow.py | |
parent | e26a8259dbe879d722d5e619f9d6efe0b113d1cd (diff) |
Implement Segmented Workflows
A major source of bugs has been how we've approached inlining
workflows. We no longer inline them as of this commit, and instead
use a stack structure. This commits the result of workflows to the
database before other workflows try to read them, so we don't have
to maintain a code path for when something is or isn't committed
to db.
This patchset allows for workflows to pass limited information
to preset selections
Change-Id: I3d040c7f3024c7420017ae4ec66a23219303dcb6
Signed-off-by: Sawyer Bergeron <sawyerbergeron@gmail.com>
Diffstat (limited to 'src/workflow/booking_workflow.py')
-rw-r--r-- | src/workflow/booking_workflow.py | 73 |
1 files changed, 26 insertions, 47 deletions
diff --git a/src/workflow/booking_workflow.py b/src/workflow/booking_workflow.py index cd12ab6..76950b8 100644 --- a/src/workflow/booking_workflow.py +++ b/src/workflow/booking_workflow.py @@ -33,32 +33,15 @@ class Resource_Select(WorkflowStep): self.repo_check_key = False self.confirm_key = "booking" - def get_default_entry(self): - return None - def get_context(self): context = super(Resource_Select, self).get_context() default = [] - chosen_bundle = None - default_bundle = self.get_default_entry() - if default_bundle: - context['disabled'] = True - chosen_bundle = default_bundle - if chosen_bundle.id: - default.append(chosen_bundle.id) - else: - default.append("repo bundle") - else: - chosen_bundle = self.repo_get(self.repo_key, False) - if chosen_bundle: - if chosen_bundle.id: - default.append(chosen_bundle.id) - else: - default.append("repo bundle") - - bundle = default_bundle - if not bundle: - bundle = chosen_bundle + + chosen_bundle = self.repo_get(self.repo_key, False) + if chosen_bundle: + default.append(chosen_bundle.id) + + bundle = chosen_bundle edit = self.repo_get(self.repo.EDIT, False) user = self.repo_get(self.repo.SESSION_USER) context['form'] = ResourceSelectorForm( @@ -79,6 +62,9 @@ class Resource_Select(WorkflowStep): self.metastep.set_invalid("Please select a valid bundle") return render(request, self.template, context) selected_bundle = json.loads(data) + if len(selected_bundle) < 1: + self.metastep.set_invalid("Please select a valid bundle") + return render(request, self.template, context) selected_id = selected_bundle[0]['id'] gresource_bundle = None try: @@ -112,23 +98,9 @@ class Booking_Resource_Select(Resource_Select): def __init__(self, *args, **kwargs): super(Booking_Resource_Select, self).__init__(*args, **kwargs) - self.repo_key = self.repo.BOOKING_SELECTED_GRB + self.repo_key = self.repo.SELECTED_GRESOURCE_BUNDLE self.confirm_key = "booking" - def get_default_entry(self): - default = self.repo_get(self.repo.GRESOURCE_BUNDLE_MODELS, {}).get("bundle") - mine = self.repo_get(self.repo_key) - if mine: - return None - try: - config_bundle = self.repo_get(self.repo.BOOKING_MODELS)['booking'].config_bundle - if default: - return default # select created grb, even if preselected config bundle - return config_bundle.bundle - except: - pass - return default - def get_context(self): context = super(Booking_Resource_Select, self).get_context() return context @@ -166,12 +138,20 @@ class SWConfig_Select(WorkflowStep): self.metastep.set_invalid("Please select a valid config") return self.render(request) bundle_json = json.loads(bundle_json) + if len(bundle_json) < 1: + self.metastep.set_invalid("Please select a valid config") + return self.render(request) bundle = None - try: - id = int(bundle_json[0]['id']) - bundle = ConfigBundle.objects.get(id=id) - except ValueError: - bundle = self.repo_get(self.repo.CONFIG_MODELS).get("bundle") + id = int(bundle_json[0]['id']) + bundle = ConfigBundle.objects.get(id=id) + + grb = self.repo_get(self.repo.SELECTED_GRESOURCE_BUNDLE) + + if grb and bundle.bundle != grb: + self.metastep.set_invalid("Incompatible config selected for resource bundle") + return self.render(request) + if not grb: + self.repo_set(self.repo.SELECTED_GRESOURCE_BUNDLE, bundle.bundle) models = self.repo_get(self.repo.BOOKING_MODELS, {}) if "booking" not in models: @@ -196,7 +176,7 @@ class SWConfig_Select(WorkflowStep): default = [] bundle = None chosen_bundle = None - created_bundle = self.repo_get(self.repo.CONFIG_MODELS, {}).get("bundle", False) + created_bundle = self.repo_get(self.repo.SELECTED_CONFIG_BUNDLE) booking = self.repo_get(self.repo.BOOKING_MODELS, {}).get("booking", False) try: chosen_bundle = booking.config_bundle @@ -204,11 +184,10 @@ class SWConfig_Select(WorkflowStep): bundle = chosen_bundle except: if created_bundle: - default.append("repo bundle") + default.append(created_bundle.id) bundle = created_bundle - context['disabled'] = True edit = self.repo_get(self.repo.EDIT, False) - grb = self.repo_get(self.repo.BOOKING_SELECTED_GRB) + grb = self.repo_get(self.repo.SELECTED_GRESOURCE_BUNDLE) context['form'] = SWConfigSelectorForm(chosen_software=default, bundle=bundle, edit=edit, resource=grb) return context |