aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/gui/app/views.py
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2012-11-22 01:30:58 +0000
committerMichael Elkins <melkins@tislabs.com>2012-11-22 01:30:58 +0000
commit266c85e9f4334628916ded4af2deab8c95467aea (patch)
tree0c70f9d7ca2edf15e3db6baae9c9ae05d0fdfbc2 /rpkid/rpki/gui/app/views.py
parentd36646a01f822c6c2798cd0986594a88003f52f2 (diff)
commiting work in progress
svn path=/branches/tk329/; revision=4894
Diffstat (limited to 'rpkid/rpki/gui/app/views.py')
-rw-r--r--rpkid/rpki/gui/app/views.py161
1 files changed, 61 insertions, 100 deletions
diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py
index 1d825000..3778e361 100644
--- a/rpkid/rpki/gui/app/views.py
+++ b/rpkid/rpki/gui/app/views.py
@@ -32,9 +32,9 @@ from django import http
from django.views.generic.list_detail import object_detail
from django.core.urlresolvers import reverse, reverse_lazy
from django.contrib.auth.models import User
-from django.contrib.formtools.preview import FormPreview
from django.views.generic import (DetailView, ListView, CreateView, UpdateView,
- DeleteView)
+ DeleteView, FormView)
+from django.views.generic.detail import SingleObjectMixin
from rpki.irdb import Zookeeper, ChildASN, ChildNet
from rpki.gui.app import models, forms, glue, range_list
@@ -296,56 +296,23 @@ def child_import(request):
return generic_import(request, conf.children, Zookeeper.configure_child)
-class ObjectActionPreview(FormPreview):
- """Generic base class for confirming an action of an object.
-
- Subclasses should define:
- - template_name
-
- """
-
- def __init__(self, *args, **kwargs):
- """
- The docstring for FormPreview says we should not redefine this method, but
- I don't see how we can set extra information in this class otherwise.
-
- """
- self.form_object = kwargs.pop('form_object')
- self.logstream = kwargs.pop('logstream')
- # use the same template for both form edit and preview
- self.form_template = self.template_name
- self.preview_template = self.template_name
- super(ObjectActionPreview, self).__init__(*args, **kwargs)
-
- def get_context(self, *args, **kwargs):
- """"
- Override the superclass method to add context variables needed by the
- form template.
-
- """
- d = super(ObjectActionPreview, self).get_context(*args, **kwargs)
- d['object'] = self.form_object
- d['form_label'] = self.form_label
- return d
-
- def process_preview(self, request, form, context):
- # set a boolean flag so that the template knows this is a preview
- context['is_preview'] = True
-
+class ChildAddPrefix(FormView, SingleObjectMixin):
+ form_class = forms.AddNetForm
+ template_name = 'app/app_form.html'
-class ChildAddResourcePreview(ObjectActionPreview):
- """
- Base class for handling preview of AS/Prefix additions to a child.
- Subclasses implement the 'done' method to perform actual work on IRDB.
+ def get_queryset(self):
+ return self.request.session['handle'].children
- """
- template_name = 'app/child_detail.html'
- form_label = 'Add Resource'
+ def get_form_kwargs(self):
+ kwargs = super(ChildAddPrefix, self).get_form_kwargs()
+ kwargs['child'] = self.get_object()
+ return kwargs
+ # FormMixin
+ def form_valid(self, form):
+ r = super(ChildAddPrefix, self).form_valid(form)
-class ChildAddPrefixPreview(ChildAddResourcePreview):
- def done(self, request, cleaned_data):
- address_range = cleaned_data.get('address_range')
+ address_range = form.cleaned_data.get('address_range')
if ':' in address_range:
r = resource_range_ipv6.parse_str(address_range)
version = 'IPv6'
@@ -355,33 +322,35 @@ class ChildAddPrefixPreview(ChildAddResourcePreview):
self.child.address_ranges.create(start_ip=str(r.min), end_ip=str(r.max),
version=version)
Zookeeper(handle=self.child.issuer.handle, logstream=self.logstream).run_rpkid_now()
- return http.HttpResponseRedirect(self.child.get_absolute_url())
+ return r
-@handle_required
-def child_add_address(request, pk):
- logstream = request.META['wsgi.errors']
- conf = request.session['handle']
- child = get_object_or_404(models.Child, issuer=conf, pk=pk)
- form = forms.AddNetForm(child)
- preview = ChildAddPrefixPreview(form, form_object=child, logstream=logstream)
- return preview(request)
-class ChildAddASNPreview(ChildAddResourcePreview):
- def done(self, request, cleaned_data):
- asns = cleaned_data.get('asns')
+
+class ChildAddASN(FormView, SingleObjectMixin):
+ form_class = forms.AddASNForm
+ template_name = 'app/app_form.html'
+
+ def get_queryset(self):
+ return self.request.session['handle'].children
+
+ def get_form_kwargs(self):
+ kwargs = super(ChildAddASN, self).get_form_kwargs()
+ kwargs['child'] = self.get_object()
+ return kwargs
+
+ # FormMixin
+ def form_valid(self, form):
+ resp = super(ChildAddASN, self).form_valid(form)
+
+ asns = form.cleaned_data.get('asns')
r = resource_range_as.parse_str(asns)
- self.child.asns.create(start_as=r.min, end_as=r.max)
- Zookeeper(handle=self.child.issuer.handle, logstream=self.logstream).run_rpkid_now()
- return http.HttpResponseRedirect(self.child.get_absolute_url())
+ self.get_object().asns.create(start_as=r.min, end_as=r.max)
+
+ return resp
+
+ def get_success_url(self):
+ return self.get_object().get_absolute_url()
-@handle_required
-def child_add_asn(request, pk):
- logstream = request.META['wsgi.errors']
- conf = request.session['handle']
- child = get_object_or_404(models.Child, issuer=conf, pk=pk)
- form = forms.AddASNForm(child)
- preview = ChildAddASNPreview(form, form_object=child, logstream=logstream)
- return preview(request)
@handle_required
def child_view(request, pk):
@@ -434,30 +403,30 @@ def child_response(request, pk):
return resp
-class ChildDeletePreview(ObjectActionPreview):
- template_name = 'app/child_detail.html'
- form_label = 'Delete Child'
+class GenericDeleteView(DeleteView):
+ """Subclasses should implement the get_queryset() method.
+
+ """
+ template_name = 'app/object_confirm_delete.html'
+ success_url = reverse_lazy(dashboard)
+
+ def get_context_data(self, **kwargs):
+ context = super(GenericDeleteView, self).get_context_data(**kwargs)
+ context['parent_template'] = 'app/%s_detail.html' % self.object.__class__.__name__.lower()
+ return context
+
- def __init__(self, *args, **kwargs):
- self.conf = kwargs.pop('conf')
- super(ChildDeletePreview, self).__init__(*args, **kwargs)
+class ChildDeleteView(GenericDeleteView):
+ def get_queryset(self):
+ return self.request.session['handle'].children
- def done(self, request, cleaned_data):
- z = Zookeeper(handle=self.conf.handle)
- z.delete_child(self.form_object.handle)
+ # override DeletionMixin.delete()
+ def delete(self, request, *args, **kwargs):
+ z = Zookeeper(handle=request.session['handle'])
+ z.delete_child(self.get_object().handle)
z.synchronize()
- return http.HttpResponseRedirect(reverse(dashboard))
+ return http.HttpResponseRedirect(self.get_success_url())
-@handle_required
-def child_delete(request, pk):
- log = request.META['wsgi.errors']
- conf = request.session['handle']
- # verify this child belongs to the current user
- obj = get_object_or_404(conf.children, pk=pk)
- form_class = forms.UserDeleteForm # FIXME
- preview = ChildDeletePreview(form_class, conf=conf, form_object=obj,
- logstream=log)
- return preview(request)
@handle_required
def roa_create(request):
@@ -609,18 +578,10 @@ class GhostbusterDetailView(DetailView):
return self.request.session['handle'].ghostbusters
-class GhostbusterDeleteView(DeleteView):
- template_name = 'app/object_confirm_delete.html'
- success_url = reverse_lazy(dashboard)
-
+class GhostbusterDeleteView(GenericDeleteView):
def get_queryset(self):
return self.request.session['handle'].ghostbusters
- def get_context_data(self, **kwargs):
- context = super(GhostbusterDeleteView, self).get_context_data(**kwargs)
- context['parent_template'] = 'app/ghostbusterrequest_detail.html'
- return context
-
class GhostbusterCreateView(CreateView):
form_class = forms.GhostbusterRequestForm