from __future__ import absolute_import, unicode_literals import logging from django.contrib import messages from django.contrib.contenttypes.models import ContentType from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.http import Http404, HttpResponseRedirect 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 acls.models import AccessEntry from common.utils import encapsulate from permissions import Permission from .forms import TransformationForm from .models import Transformation from .permissions import ( permission_transformation_create, permission_transformation_delete, permission_transformation_edit, permission_transformation_view ) logger = logging.getLogger(__name__) def transformation_list(request, app_label, model, object_id): content_type = get_object_or_404(ContentType, app_label=app_label, model=model) try: content_object = content_type.get_object_for_this_type(pk=object_id) except content_type.model_class().DoesNotExist: raise Http404 try: Permission.check_permissions(request.user, [permission_transformation_view]) except PermissionDenied: AccessEntry.objects.check_access(permission_transformation_view, request.user, content_object) context = { 'object_list': Transformation.objects.get_for_model(content_object), 'content_object': content_object, 'navigation_object_list': ['content_object'], 'title': _('Transformations for: %s') % content_object, 'extra_columns': [ {'name': _('Order'), 'attribute': 'order'}, {'name': _('Transformation'), 'attribute': encapsulate(lambda x: unicode(x))}, {'name': _('Arguments'), 'attribute': 'arguments'} ], 'hide_link': True, 'hide_object': True, } return render_to_response( 'appearance/generic_list.html', context, context_instance=RequestContext(request) ) def transformation_create(request, app_label, model, object_id): content_type = get_object_or_404(ContentType, app_label=app_label, model=model) try: content_object = content_type.get_object_for_this_type(pk=object_id) except content_type.model_class().DoesNotExist: raise Http404 try: Permission.check_permissions(request.user, [permission_transformation_create]) except PermissionDenied: AccessEntry.objects.check_access(permission_transformation_create, request.user, content_object) if request.method == 'POST': form = TransformationForm(request.POST, initial={'content_object': content_object}) if form.is_valid(): instance = form.save(commit=False) instance.content_object = content_object instance.save() messages.success(request, _('Transformation created successfully.')) return HttpResponseRedirect(reverse('converter:transformation_list', args=[app_label, model, object_id])) else: form = TransformationForm(initial={'content_object': content_object}) return render_to_response('appearance/generic_form.html', { 'form': form, 'content_object': content_object, 'navigation_object_list': ['content_object'], 'title': _('Create new transformation for: %s') % content_object, }, context_instance=RequestContext(request)) def transformation_delete(request, object_id): transformation = get_object_or_404(Transformation, pk=object_id) try: Permission.check_permissions(request.user, [permission_transformation_delete]) except PermissionDenied: AccessEntry.objects.check_access(permission_transformation_delete, request.user, transformation.content_object) if request.method == 'POST': transformation.delete() messages.success(request, _('Transformation deleted successfully.')) return HttpResponseRedirect(reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id])) return render_to_response('appearance/generic_confirm.html', { 'content_object': transformation.content_object, 'delete_view': True, 'navigation_object_list': ['content_object', 'transformation'], 'previous': reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id]), 'title': _('Are you sure you wish to delete transformation "%(transformation)s" for: %(content_object)s') % { 'transformation': transformation, 'content_object': transformation.content_object}, 'transformation': transformation, }, context_instance=RequestContext(request)) def transformation_edit(request, object_id): transformation = get_object_or_404(Transformation, pk=object_id) try: Permission.check_permissions(request.user, [permission_transformation_edit]) except PermissionDenied: AccessEntry.objects.check_access(permission_transformation_edit, request.user, transformation.content_object) if request.method == 'POST': form = TransformationForm(request.POST, instance=transformation) if form.is_valid(): form.save() 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', { 'content_object': transformation.content_object, 'form': form, 'navigation_object_list': ['content_object', 'transformation'], 'title': _('Edit transformation "%(transformation)s" for: %(content_object)s') % { 'transformation': transformation, 'content_object': transformation.content_object}, 'transformation': transformation, }, context_instance=RequestContext(request))