aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/api/migrations/0002_remove_job_delta.py17
-rw-r--r--src/api/models.py3
-rw-r--r--src/api/views.py3
-rw-r--r--src/booking/views.py127
-rw-r--r--src/dashboard/tasks.py2
-rw-r--r--src/resource_inventory/admin.py2
-rw-r--r--src/resource_inventory/migrations/0004_auto_20181017_1532.py28
-rw-r--r--src/templates/resource/steps/meta_info.html18
-rw-r--r--src/workflow/booking_workflow.py1
9 files changed, 68 insertions, 133 deletions
diff --git a/src/api/migrations/0002_remove_job_delta.py b/src/api/migrations/0002_remove_job_delta.py
new file mode 100644
index 0000000..157a40f
--- /dev/null
+++ b/src/api/migrations/0002_remove_job_delta.py
@@ -0,0 +1,17 @@
+# Generated by Django 2.1 on 2018-10-17 15:32
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='job',
+ name='delta',
+ ),
+ ]
diff --git a/src/api/models.py b/src/api/models.py
index f1e9130..7448ac4 100644
--- a/src/api/models.py
+++ b/src/api/models.py
@@ -488,7 +488,8 @@ class NetworkConfig(TaskConfig):
return d
def clear_delta(self):
- pass
+ self.delta = json.dumps(self.to_dict())
+ self.save()
def add_interface(self, interface):
self.interfaces.add(interface)
diff --git a/src/api/views.py b/src/api/views.py
index cefd131..072354f 100644
--- a/src/api/views.py
+++ b/src/api/views.py
@@ -94,8 +94,7 @@ def specific_task(request, lab_name="", job_id="", task_id=""):
m['job'] = str(task.job)
m['message'] = task.message
d['meta'] = m
- response = json.dumps(d)
- return JsonResponse(response)
+ return JsonResponse(d, safe=False)
elif request.method == "GET":
return JsonResponse(get_task(task_id).config.get_delta())
diff --git a/src/booking/views.py b/src/booking/views.py
index c139b4c..9b9860f 100644
--- a/src/booking/views.py
+++ b/src/booking/views.py
@@ -19,7 +19,6 @@ from django.views.generic import TemplateView
from django.shortcuts import redirect, render
import json
-from booking.forms import BookingForm, BookingEditForm
from resource_inventory.models import ResourceBundle
from resource_inventory.resource_manager import ResourceManager
from booking.models import Booking, Installer, Opsys
@@ -42,132 +41,6 @@ def drop_filter(context):
context.update({'installer_filter': json.dumps(installer_filter), 'scenario_filter': json.dumps(scenario_filter)})
-class BookingFormView(FormView):
- template_name = "booking/booking_calendar.html"
- form_class = BookingForm
-
- def dispatch(self, request, *args, **kwargs):
- self.resource = get_object_or_404(ResourceBundle, id=self.kwargs['resource_id'])
- return super(BookingFormView, self).dispatch(request, *args, **kwargs)
-
- def get_context_data(self, **kwargs):
- title = 'Booking: ' + str(self.resource.id)
- context = super(BookingFormView, self).get_context_data(**kwargs)
- context.update({'title': title, 'resource': self.resource})
-
- drop_filter(context)
-
- return context
-
- def get_success_url(self):
- return reverse('booking:create', kwargs=self.kwargs)
-
- def form_valid(self, form):
- if not self.request.user.is_authenticated:
- messages.add_message(self.request, messages.ERROR,
- 'You need to be logged in to book a Pod.')
- return super(BookingFormView, self).form_invalid(form)
-
- if form.cleaned_data['end'] - form.cleaned_data['start'] > timezone.timedelta(days=21):
- messages.add_message(self.request, messages.ERROR,
- 'Bookings can be no more than 3 weeks long.')
- return super(BookingFormView, self).form_invalid(form)
-
- user = self.request.user
- booking = Booking(start=form.cleaned_data['start'],
- end=form.cleaned_data['end'],
- purpose=form.cleaned_data['purpose'],
- installer=form.cleaned_data['installer'],
- scenario=form.cleaned_data['scenario'],
- resource=self.resource,
- owner=user
- )
- try:
- booking.save()
- except ValueError as err:
- messages.add_message(self.request, messages.ERROR, err)
- return super(BookingFormView, self).form_invalid(form)
- messages.add_message(self.request, messages.SUCCESS, 'Booking saved')
- return super(BookingFormView, self).form_valid(form)
-
-
-class BookingEditFormView(FormView):
- template_name = "booking/booking_calendar.html"
- form_class = BookingEditForm
-
- def is_valid(self):
- return True
-
- def dispatch(self, request, *args, **kwargs):
- self.resource = get_object_or_404(ResourceBundle, id=self.kwargs['resource_id'])
- self.original_booking = get_object_or_404(Booking, id=self.kwargs['booking_id'])
- return super(BookingEditFormView, self).dispatch(request, *args, **kwargs)
-
- def get_context_data(self, **kwargs):
- title = 'Editing Booking on: ' + self.resource.name
- context = super(BookingEditFormView, self).get_context_data(**kwargs)
- context.update({'title': title, 'resource': self.resource, 'booking': self.original_booking})
-
- drop_filter(context)
-
- return context
-
- def get_form_kwargs(self):
- kwargs = super(BookingEditFormView, self).get_form_kwargs()
- kwargs['purpose'] = self.original_booking.purpose
- kwargs['start'] = self.original_booking.start
- kwargs['end'] = self.original_booking.end
- return kwargs
-
- def get_success_url(self):
- return reverse('booking:create', args=(self.resource.id,))
-
- def form_valid(self, form):
-
- if not self.request.user.is_authenticated:
- messages.add_message(self.request, messages.ERROR,
- 'You need to be logged in to book a Pod.')
- return super(BookingEditFormView, self).form_invalid(form)
-
- if not self.request.user == self.original_booking.user:
- messages.add_message(self.request, messages.ERROR,
- 'You are not the owner of this booking.')
- return super(BookingEditFormView, self).form_invalid(form)
-
- # Do Conflict Checks
- if self.original_booking.end != form.cleaned_data['end']:
- if form.cleaned_data['end'] - self.original_booking.end > timezone.timedelta(days=7):
- messages.add_message(self.request, messages.ERROR,
- 'Extensions can not be longer than one week.')
- return super(BookingEditFormView, self).form_invalid(form)
- elif self.original_booking.ext_count <= 0:
- messages.add_message(self.request, messages.ERROR,
- 'Cannot change end date after maximum number of extensions reached.')
- return super(BookingEditFormView, self).form_invalid(form)
-
- else:
- self.original_booking.ext_count -= 1
-
- if self.original_booking.start != form.cleaned_data['start']:
- if timezone.now() > form.cleaned_data['start']:
- messages.add_message(self.request, messages.ERROR,
- 'Cannot change start date after it has occurred.')
- return super(BookingEditFormView, self).form_invalid(form)
- self.original_booking.start = form.cleaned_data['start']
- self.original_booking.end = form.cleaned_data['end']
- self.original_booking.purpose = form.cleaned_data['purpose']
- self.original_booking.installer = form.cleaned_data['installer']
- self.original_booking.scenario = form.cleaned_data['scenario']
- self.original_booking.reset = form.cleaned_data['reset']
- try:
- self.original_booking.save()
- except ValueError as err:
- messages.add_message(self.request, messages.ERROR, err)
- return super(BookingEditFormView, self).form_invalid(form)
-
- return super(BookingEditFormView, self).form_valid(form)
-
-
class BookingView(TemplateView):
template_name = "booking/booking_detail.html"
diff --git a/src/dashboard/tasks.py b/src/dashboard/tasks.py
index 827c7c5..48008b6 100644
--- a/src/dashboard/tasks.py
+++ b/src/dashboard/tasks.py
@@ -43,7 +43,7 @@ def booking_poll():
network.clear_delta()
vlans = []
for interface in host.interfaces.all():
- for vlan in interface.config:
+ for vlan in interface.config.all():
if vlan.public:
try:
host.lab.vlan_manager.release_public_vlan(vlan.vlan_id)
diff --git a/src/resource_inventory/admin.py b/src/resource_inventory/admin.py
index 222877a..37b0c45 100644
--- a/src/resource_inventory/admin.py
+++ b/src/resource_inventory/admin.py
@@ -16,7 +16,7 @@ profiles = [HostProfile, InterfaceProfile, DiskProfile, CpuProfile, RamProfile]
admin.site.register(profiles)
-generics = [GenericResourceBundle, GenericResource, GenericHost, GenericPod, GenericInterface]
+generics = [GenericResourceBundle, GenericResource, GenericHost, GenericInterface]
admin.site.register(generics)
diff --git a/src/resource_inventory/migrations/0004_auto_20181017_1532.py b/src/resource_inventory/migrations/0004_auto_20181017_1532.py
new file mode 100644
index 0000000..3a7475c
--- /dev/null
+++ b/src/resource_inventory/migrations/0004_auto_20181017_1532.py
@@ -0,0 +1,28 @@
+# Generated by Django 2.1 on 2018-10-17 15:32
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resource_inventory', '0003_vlan_public'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='genericpod',
+ name='genericresource_ptr',
+ ),
+ migrations.RemoveField(
+ model_name='genericpod',
+ name='hosts',
+ ),
+ migrations.RemoveField(
+ model_name='genericpod',
+ name='networks',
+ ),
+ migrations.DeleteModel(
+ name='GenericPod',
+ ),
+ ]
diff --git a/src/templates/resource/steps/meta_info.html b/src/templates/resource/steps/meta_info.html
new file mode 100644
index 0000000..389ff6d
--- /dev/null
+++ b/src/templates/resource/steps/meta_info.html
@@ -0,0 +1,18 @@
+{% extends "workflow/viewport-element.html" %}
+{% load staticfiles %}
+
+{% load bootstrap3 %}
+
+{% block content %}
+
+<form id="resource_meta_form" method="post" action="/wf/workflow/">
+ {% csrf_token %}
+ <table>
+ {{form}}
+ </table>
+</form>
+{% endblock content %}
+
+{% block onleave %}
+document.getElementById("resource_meta_form").submit();
+{% endblock %}
diff --git a/src/workflow/booking_workflow.py b/src/workflow/booking_workflow.py
index 52fe36b..213b9e6 100644
--- a/src/workflow/booking_workflow.py
+++ b/src/workflow/booking_workflow.py
@@ -74,7 +74,6 @@ class Resource_Select(WorkflowStep):
context = self.get_context()
if form.is_valid():
data = form.cleaned_data['generic_resource_bundle']
- irint(str(data['user']))
data = data[2:-2]
if not data:
self.metastep.set_invalid("Please select a valid bundle")