File diff b2d842037a63 → 5193ae7fc0e1
conntrackt/views.py
Show inline comments
 
@@ -27,12 +27,13 @@ import json
 
# Django imports.
 
from django.contrib.auth.decorators import permission_required
 
from django.contrib import messages
 
from django.core.exceptions import ValidationError
 
from django.core.urlresolvers import reverse, reverse_lazy
 
from django.db.models import Q
 
from django.db.models.deletion import Collector
 
from django.http import HttpResponse
 
from django.shortcuts import render_to_response, get_object_or_404
 
from django.views.generic import TemplateView, DetailView, CreateView, UpdateView, DeleteView, View
 

	
 
# Third-party application imports.
 
from braces.views import MultiplePermissionsRequiredMixin, SetHeadlineMixin
 
@@ -62,12 +63,49 @@ class RedirectToNextMixin(object):
 
        Returns the success URL to which the user will be redirected.
 
        """
 

	
 
        return self.request.GET.get(self.next_parameter, super(RedirectToNextMixin, self).get_success_url())
 

	
 

	
 
class RelatedItemsMixin(object):
 
    """
 
    View mixin that adds related items of a referenced model object to context
 
    data in form of a nested list, including the reference model object as the
 
    first element of a list.
 

	
 
    The context data will be passed using the "related_items" key.
 

	
 
    This data can be used in the template by passing it through the
 
    unordered_list template tag.
 

	
 
    The reference object is accessed via "object" property of calling view
 
    (i.e. self.object).
 

	
 
    For more details on implementation, see:
 

	
 
    RelatedCollectorMixin.get_dependant_objects_representation method
 
    """
 

	
 
    def get_context_data(self, **kwargs):
 
        """
 
        Adds the related items of a reference model object to context data.
 

	
 
        Returns:
 
          Context data.
 
        """
 

	
 
        # Set the context using the parent class.
 
        context = super(RelatedItemsMixin, self).get_context_data(**kwargs)
 

	
 
        # Add to context the nested list of string representations of related
 
        # items.
 
        context["related_items"] = self.object.get_dependant_objects_representation()
 

	
 
        return context
 

	
 

	
 
class IndexView(MultiplePermissionsRequiredMixin, TemplateView):
 
    """
 
    Custom view used for rendering the index page.
 
    """
 

	
 
    template_name = 'conntrackt/index.html'
 
@@ -334,13 +372,13 @@ class ProjectUpdateView(RedirectToNextMi
 
        Set headline based on project name.
 
        """
 

	
 
        return "Update project %s" % self.object.name
 

	
 

	
 
class ProjectDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
class ProjectDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
    """
 
    View for deleting a project.
 
    """
 

	
 
    model = Project
 
    template_name = "conntrackt/delete_form.html"
 
@@ -418,13 +456,13 @@ class LocationUpdateView(RedirectToNextM
 
        Set headline based on location name.
 
        """
 

	
 
        return "Update location %s" % self.object.name
 

	
 

	
 
class LocationDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
class LocationDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
    """
 
    View for deleting a location.
 
    """
 

	
 
    model = Location
 
    template_name = "conntrackt/delete_form.html"
 
@@ -535,13 +573,13 @@ class EntityUpdateView(RedirectToNextMix
 
        Set headline based on entity name.
 
        """
 

	
 
        return "Update entity %s" % self.object.name
 

	
 

	
 
class EntityDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
class EntityDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
    """
 
    View for deleting an entity.
 
    """
 

	
 
    model = Entity
 
    template_name = "conntrackt/delete_form.html"
 
@@ -691,13 +729,13 @@ class InterfaceUpdateView(RedirectToNext
 
        Set headline based on interface name.
 
        """
 

	
 
        return "Update interface %s" % self.object.name
 

	
 

	
 
class InterfaceDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
class InterfaceDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
    """
 
    View for deleting an interface.
 
    """
 

	
 
    model = Interface
 
    template_name = "conntrackt/delete_form.html"
 
@@ -884,13 +922,13 @@ class CommunicationUpdateView(RedirectTo
 
        Set headline based on communication.
 
        """
 

	
 
        return "Update communication %s" % self.object
 

	
 

	
 
class CommunicationDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
class CommunicationDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
 
    """
 
    View for deleting an communication.
 
    """
 

	
 
    model = Communication
 
    template_name = "conntrackt/delete_form.html"