Convert transformation views to CBV.

This commit is contained in:
Roberto Rosario
2015-07-11 03:46:01 -04:00
parent b5ede7c2d3
commit d10ad2eb74
2 changed files with 135 additions and 103 deletions

View File

@@ -2,10 +2,15 @@ from __future__ import unicode_literals
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from .views import (
TransformationCreateView, TransformationDeleteView, TransformationEditView,
TransformationListView
)
urlpatterns = patterns( urlpatterns = patterns(
'converter.views', 'converter.views',
url(r'^create_for/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/$', 'transformation_create', name='transformation_create'), url(r'^create_for/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/$', TransformationCreateView.as_view(), name='transformation_create'),
url(r'^list_for/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/$', 'transformation_list', name='transformation_list'), url(r'^list_for/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/$', TransformationListView.as_view(), name='transformation_list'),
url(r'^delete/(?P<object_id>\d+)/$', 'transformation_delete', name='transformation_delete'), url(r'^delete/(?P<pk>\d+)/$', TransformationDeleteView.as_view(), name='transformation_delete'),
url(r'^edit/(?P<object_id>\d+)/$', 'transformation_edit', name='transformation_edit'), url(r'^edit/(?P<pk>\d+)/$', TransformationEditView.as_view(), name='transformation_edit'),
) )

View File

@@ -2,20 +2,20 @@ from __future__ import absolute_import, unicode_literals
import logging import logging
from django.contrib import messages
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.models import AccessControlList from acls.models import AccessControlList
from common.utils import encapsulate from common.utils import encapsulate
from common.views import (
SingleObjectCreateView, SingleObjectDeleteView, SingleObjectEditView,
SingleObjectListView
)
from permissions import Permission from permissions import Permission
from .forms import TransformationForm
from .models import Transformation from .models import Transformation
from .permissions import ( from .permissions import (
permission_transformation_create, permission_transformation_delete, permission_transformation_create, permission_transformation_delete,
@@ -25,117 +25,144 @@ from .permissions import (
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def transformation_list(request, app_label, model, object_id): class TransformationDeleteView(SingleObjectDeleteView):
content_type = get_object_or_404(ContentType, app_label=app_label, model=model) model = Transformation
try: def dispatch(self, request, *args, **kwargs):
content_object = content_type.get_object_for_this_type(pk=object_id) self.transformation = get_object_or_404(Transformation, pk=self.kwargs['pk'])
except content_type.model_class().DoesNotExist:
raise Http404
try: try:
Permission.check_permissions(request.user, [permission_transformation_view]) Permission.check_permissions(request.user, [permission_transformation_delete])
except PermissionDenied: except PermissionDenied:
AccessControlList.objects.check_access(permission_transformation_view, request.user, content_object) AccessControlList.objects.check_access(permission_transformation_delete, request.user, self.transformation.content_object)
context = { return super(TransformationDeleteView, self).dispatch(request, *args, **kwargs)
'object_list': Transformation.objects.get_for_model(content_object),
'content_object': content_object, def get_post_action_redirect(self):
'navigation_object_list': ['content_object'], return reverse('converter:transformation_list', args=[self.transformation.content_type.app_label, self.transformation.content_type.model, self.transformation.object_id])
'title': _('Transformations for: %s') % content_object,
'extra_columns': [ def get_extra_context(self):
{'name': _('Order'), 'attribute': 'order'}, return {
{'name': _('Transformation'), 'attribute': encapsulate(lambda x: unicode(x))}, 'content_object': self.transformation.content_object,
{'name': _('Arguments'), 'attribute': 'arguments'} 'navigation_object_list': ['content_object', 'transformation'],
], 'previous': reverse('converter:transformation_list', args=[self.transformation.content_type.app_label, self.transformation.content_type.model, self.transformation.object_id]),
'hide_link': True, 'title': _('Delete transformation "%(transformation)s" for: %(content_object)s?') % {
'hide_object': True, 'transformation': self.transformation,
} 'content_object': self.transformation.content_object},
return render_to_response( 'transformation': self.transformation,
'appearance/generic_list.html', context, context_instance=RequestContext(request) }
)
def transformation_create(request, app_label, model, object_id): class TransformationCreateView(SingleObjectCreateView):
content_type = get_object_or_404(ContentType, app_label=app_label, model=model) fields = ('name', 'arguments', 'order')
try: def dispatch(self, request, *args, **kwargs):
content_object = content_type.get_object_for_this_type(pk=object_id) content_type = get_object_or_404(ContentType, app_label=self.kwargs['app_label'], model=self.kwargs['model'])
except content_type.model_class().DoesNotExist:
raise Http404
try: try:
Permission.check_permissions(request.user, [permission_transformation_create]) self.content_object = content_type.get_object_for_this_type(pk=self.kwargs['object_id'])
except PermissionDenied: except content_type.model_class().DoesNotExist:
AccessControlList.objects.check_access(permission_transformation_create, request.user, content_object) raise Http404
if request.method == 'POST': try:
form = TransformationForm(request.POST, initial={'content_object': content_object}) Permission.check_permissions(request.user, [permission_transformation_create])
if form.is_valid(): except PermissionDenied:
instance = form.save(commit=False) AccessControlList.objects.check_access(permission_transformation_create, request.user, self.content_object)
instance.content_object = content_object
return super(TransformationCreateView, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
instance = form.save(commit=False)
instance.content_object = self.content_object
try:
instance.full_clean()
instance.save() instance.save()
messages.success(request, _('Transformation created successfully.')) except:
return HttpResponseRedirect(reverse('converter:transformation_list', args=[app_label, model, object_id])) return super(TransformationCreateView, self).form_invalid(form)
else: else:
form = TransformationForm(initial={'content_object': content_object}) return super(TransformationCreateView, self).form_valid(form)
return render_to_response('appearance/generic_form.html', { def get_post_action_redirect(self):
'form': form, return reverse('converter:transformation_list', args=[self.kwargs['app_label'], self.kwargs['model'], self.kwargs['object_id']])
'content_object': content_object,
'navigation_object_list': ['content_object'], def get_queryset(self):
'title': _('Create new transformation for: %s') % content_object, return Transformation.objects.get_for_model(self.content_object)
}, context_instance=RequestContext(request))
def get_extra_context(self):
return {
'content_object': self.content_object,
'navigation_object_list': ['content_object'],
'title': _('Create new transformation for: %s') % self.content_object,
}
def transformation_delete(request, object_id): class TransformationEditView(SingleObjectEditView):
transformation = get_object_or_404(Transformation, pk=object_id) fields = ('name', 'arguments', 'order')
model = Transformation
try: def dispatch(self, request, *args, **kwargs):
Permission.check_permissions(request.user, [permission_transformation_delete]) self.transformation = get_object_or_404(Transformation, pk=self.kwargs['pk'])
except PermissionDenied:
AccessControlList.objects.check_access(permission_transformation_delete, request.user, transformation.content_object)
if request.method == 'POST': try:
transformation.delete() Permission.check_permissions(request.user, [permission_transformation_edit])
messages.success(request, _('Transformation deleted successfully.')) except PermissionDenied:
return HttpResponseRedirect(reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id])) AccessControlList.objects.check_access(permission_transformation_edit, request.user, self.transformation.content_object)
return render_to_response('appearance/generic_confirm.html', { return super(TransformationEditView, self).dispatch(request, *args, **kwargs)
'content_object': transformation.content_object,
'delete_view': True, def form_valid(self, form):
'navigation_object_list': ['content_object', 'transformation'], instance = form.save(commit=False)
'previous': reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id]), try:
'title': _('Are you sure you wish to delete transformation "%(transformation)s" for: %(content_object)s') % { instance.full_clean()
'transformation': transformation, instance.save()
'content_object': transformation.content_object}, except:
'transformation': transformation, return super(TransformationEditView, self).form_invalid(form)
}, context_instance=RequestContext(request)) else:
return super(TransformationEditView, self).form_valid(form)
def get_post_action_redirect(self):
return reverse('converter:transformation_list', args=[self.transformation.content_type.app_label, self.transformation.content_type.model, self.transformation.object_id])
def get_extra_context(self):
return {
'content_object': self.transformation.content_object,
'navigation_object_list': ['content_object', 'transformation'],
'title': _('Edit transformation "%(transformation)s" for: %(content_object)s') % {
'transformation': self.transformation,
'content_object': self.transformation.content_object},
'transformation': self.transformation,
}
def transformation_edit(request, object_id): class TransformationListView(SingleObjectListView):
transformation = get_object_or_404(Transformation, pk=object_id) def dispatch(self, request, *args, **kwargs):
content_type = get_object_or_404(ContentType, app_label=self.kwargs['app_label'], model=self.kwargs['model'])
try: try:
Permission.check_permissions(request.user, [permission_transformation_edit]) self.content_object = content_type.get_object_for_this_type(pk=self.kwargs['object_id'])
except PermissionDenied: except content_type.model_class().DoesNotExist:
AccessControlList.objects.check_access(permission_transformation_edit, request.user, transformation.content_object) raise Http404
if request.method == 'POST': try:
form = TransformationForm(request.POST, instance=transformation) Permission.check_permissions(request.user, [permission_transformation_view])
if form.is_valid(): except PermissionDenied:
form.save() AccessControlList.objects.check_access(permission_transformation_view, request.user, self.content_object)
messages.success(request, _('Transformation edited successfully.'))
return HttpResponseRedirect(reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id]))
else:
form = TransformationForm(instance=transformation)
return render_to_response('appearance/generic_form.html', { return super(TransformationListView, self).dispatch(request, *args, **kwargs)
'content_object': transformation.content_object,
'form': form, def get_queryset(self):
'navigation_object_list': ['content_object', 'transformation'], return Transformation.objects.get_for_model(self.content_object)
'title': _('Edit transformation "%(transformation)s" for: %(content_object)s') % {
'transformation': transformation, def get_extra_context(self):
'content_object': transformation.content_object}, return {
'transformation': transformation, 'content_object': self.content_object,
}, context_instance=RequestContext(request)) 'extra_columns': [
{'name': _('Order'), 'attribute': 'order'},
{'name': _('Transformation'), 'attribute': encapsulate(lambda transformation: unicode(transformation))},
{'name': _('Arguments'), 'attribute': 'arguments'}
],
'hide_link': True,
'hide_object': True,
'navigation_object_list': ['content_object'],
'title': _('Transformations for: %s') % self.content_object,
}