import json
from datetime import timedelta
-from account.models import UserProfile
from booking.models import Booking
from workflow.models import WorkflowStep
-from workflow.forms import ResourceSelectorForm, SWConfigSelectorForm, BookingMetaForm, ConfirmationForm
+from workflow.forms import ResourceSelectorForm, SWConfigSelectorForm, BookingMetaForm
from resource_inventory.models import GenericResourceBundle, ResourceBundle, ConfigBundle
+
class Resource_Select(WorkflowStep):
template = 'booking/steps/resource_select.html'
title = "Select Resource"
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(
- data={"user": user},
- chosen_resource=default,
- bundle=bundle,
- edit=edit
- )
+ data={"user": user},
+ chosen_resource=default,
+ bundle=bundle,
+ edit=edit
+ )
return context
- def post_render(self, request):
+ def post_render(self, request):
form = ResourceSelectorForm(request.POST)
context = self.get_context()
if form.is_valid():
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:
gresource_bundle = GenericResourceBundle.objects.get(id=selected_id)
except ValueError:
# we want the bundle in the repo
- gresource_bundle = self.repo_get(self.repo.GRESOURCE_BUNDLE_MODELS,{}).get("bundle", GenericResourceBundle())
+ gresource_bundle = self.repo_get(
+ self.repo.GRESOURCE_BUNDLE_MODELS,
+ {}
+ ).get("bundle", GenericResourceBundle())
self.repo_put(
- self.repo_key,
- gresource_bundle
- )
+ self.repo_key,
+ gresource_bundle
+ )
confirm = self.repo_get(self.repo.CONFIRMATION)
if self.confirm_key not in confirm:
confirm[self.confirm_key] = {}
self.metastep.set_invalid("Please complete the fields highlighted in red to continue")
return render(request, self.template, context)
+
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
if resource:
try:
booking.resource.template = resource
- except:
+ except Exception:
booking.resource = ResourceBundle(template=resource)
models['booking'] = booking
self.repo_put(self.repo.BOOKING_MODELS, models)
return response
+
class SWConfig_Select(WorkflowStep):
template = 'booking/steps/swconfig_select.html'
title = "Select Software Configuration"
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:
return self.render(request)
-
def get_context(self):
context = super(SWConfig_Select, self).get_context()
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
default.append(chosen_bundle.id)
- bundle=chosen_bundle
- except:
+ bundle = chosen_bundle
+ except Exception:
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
+
class Booking_Meta(WorkflowStep):
template = 'booking/steps/booking_meta.html'
title = "Extra Info"
users = models.get("collaborators", [])
for user in users:
default.append(user.id)
- except Exception as e:
+ except Exception:
pass
default_user = self.repo_get(self.repo.SESSION_USER)
user_data = form.cleaned_data['users']
confirm['booking']['collaborators'] = []
- user_data = user_data[2:-2] #fixes malformed string from querydict
+ user_data = user_data[2:-2] # fixes malformed string from querydict
if user_data:
form_users = json.loads(user_data)
for user_json in form_users: