From 49ec79b36a4f761d3417a982de3821af1eac550d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 12 Aug 2015 03:55:50 -0400 Subject: [PATCH] Code style updates. --- mayan/apps/checkouts/api_views.py | 80 +++++++++++++++++++------- mayan/apps/checkouts/apps.py | 12 +++- mayan/apps/checkouts/urls.py | 4 +- mayan/apps/checkouts/views.py | 95 ++++++++++++++++++------------- 4 files changed, 126 insertions(+), 65 deletions(-) diff --git a/mayan/apps/checkouts/api_views.py b/mayan/apps/checkouts/api_views.py index cbdef55976..090f9962e5 100644 --- a/mayan/apps/checkouts/api_views.py +++ b/mayan/apps/checkouts/api_views.py @@ -14,8 +14,13 @@ from documents.permissions import permission_document_view from permissions import Permission from .models import DocumentCheckout -from .permissions import permission_document_checkout, permission_document_checkin, permission_document_checkin_override -from .serializers import DocumentCheckoutSerializer, NewDocumentCheckoutSerializer +from .permissions import ( + permission_document_checkout, permission_document_checkin, + permission_document_checkin_override +) +from .serializers import ( + DocumentCheckoutSerializer, NewDocumentCheckoutSerializer +) class APICheckedoutDocumentListView(generics.ListCreateAPIView): @@ -29,44 +34,65 @@ class APICheckedoutDocumentListView(generics.ListCreateAPIView): documents = DocumentCheckout.objects.checked_out_documents() try: - Permission.check_permissions(self.request.user, [permission_document_view]) + Permission.check_permissions( + self.request.user, (permission_document_view,) + ) except PermissionDenied: - filtered_documents = AccessControlList.objects.filter_by_access([permission_document_view], self.request.user, documents) + filtered_documents = AccessControlList.objects.filter_by_access( + (permission_document_view,), self.request.user, documents + ) else: filtered_documents = documents - return DocumentCheckout.objects.filter(document__pk__in=filtered_documents.values_list('pk', flat=True)) + return DocumentCheckout.objects.filter( + document__pk__in=filtered_documents.values_list('pk', flat=True) + ) def get(self, request, *args, **kwargs): """ Returns a list of all the documents that are currently checked out. """ - return super(APICheckedoutDocumentListView, self).get(request, *args, **kwargs) + + return super( + APICheckedoutDocumentListView, self + ).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): """ Checkout a document. """ + serializer = self.get_serializer(data=request.DATA, files=request.FILES) if serializer.is_valid(): - document = get_object_or_404(Document, pk=serializer.data['document']) + document = get_object_or_404( + Document, pk=serializer.data['document'] + ) try: - Permission.check_permissions(request.user, [permission_document_checkout]) + Permission.check_permissions( + request.user, (permission_document_checkout,) + ) except PermissionDenied: - AccessControlList.objects.check_access(permission_document_checkout, request.user, document) + AccessControlList.objects.check_access( + permission_document_checkout, request.user, document + ) timezone = pytz.utc try: DocumentCheckout.objects.create( document=document, - expiration_datetime=timezone.localize(serializer.data['expiration_datetime']), + expiration_datetime=timezone.localize( + serializer.data['expiration_datetime'] + ), user=request.user, block_new_version=serializer.data['block_new_version'] ) except Exception as exception: - return Response(data={'exception': unicode(exception)}, status=status.HTTP_400_BAD_REQUEST) + return Response( + data={'exception': unicode(exception)}, + status=status.HTTP_400_BAD_REQUEST + ) return Response(status=status.HTTP_201_CREATED) @@ -81,13 +107,19 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): documents = DocumentCheckout.objects.checked_out_documents() try: - Permission.check_permissions(self.request.user, [permission_document_view]) + Permission.check_permissions( + self.request.user, (permission_document_view,) + ) except PermissionDenied: - filtered_documents = AccessControlList.objects.filter_by_access([permission_document_view], self.request.user, documents) + filtered_documents = AccessControlList.objects.filter_by_access( + (permission_document_view,), self.request.user, documents + ) else: filtered_documents = documents - return DocumentCheckout.objects.filter(document__pk__in=filtered_documents.values_list('pk', flat=True)) + return DocumentCheckout.objects.filter( + document__pk__in=filtered_documents.values_list('pk', flat=True) + ) elif self.request.method == 'DELETE': return DocumentCheckout.objects.all() @@ -96,7 +128,9 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): Retrieve the details of the selected checked out document entry. """ - return super(APICheckedoutDocumentView, self).get(request, *args, **kwargs) + return super( + APICheckedoutDocumentView, self).get(request, *args, **kwargs + ) def delete(self, request, *args, **kwargs): """ @@ -107,13 +141,21 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): if document.checkout_info().user == request.user: try: - Permission.check_permissions(request.user, [permission_document_checkin]) + Permission.check_permissions( + request.user, (permission_document_checkin,) + ) except PermissionDenied: - AccessControlList.objects.check_access(permission_document_checkin, request.user, document) + AccessControlList.objects.check_access( + permission_document_checkin, request.user, document + ) else: try: - Permission.check_permissions(request.user, [permission_document_checkin_override]) + Permission.check_permissions( + request.user, (permission_document_checkin_override,) + ) except PermissionDenied: - AccessControlList.objects.check_access(permission_document_checkin_override, request.user, document) + AccessControlList.objects.check_access( + permission_document_checkin_override, request.user, document + ) return super(APICheckedoutDocumentView, self).delete(request, *args, **kwargs) diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index 021df978ef..7885598626 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -43,15 +43,21 @@ class CheckoutsApp(MayanAppConfig): ) Document.add_to_class( 'checkout_info', - lambda document: DocumentCheckout.objects.document_checkout_info(document) + lambda document: DocumentCheckout.objects.document_checkout_info( + document + ) ) Document.add_to_class( 'checkout_state', - lambda document: DocumentCheckout.objects.document_checkout_state(document) + lambda document: DocumentCheckout.objects.document_checkout_state( + document + ) ) Document.add_to_class( 'is_checked_out', - lambda document: DocumentCheckout.objects.is_document_checked_out(document) + lambda document: DocumentCheckout.objects.is_document_checked_out( + document + ) ) ModelPermission.register( diff --git a/mayan/apps/checkouts/urls.py b/mayan/apps/checkouts/urls.py index 845e0f2196..5027aa4e83 100644 --- a/mayan/apps/checkouts/urls.py +++ b/mayan/apps/checkouts/urls.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url from .api_views import APICheckedoutDocumentListView, APICheckedoutDocumentView -from .views import CheckoutDocumentView, CheckoutListView +from .views import CheckoutDocumentView, CheckoutListView, DocumentCheckinView urlpatterns = patterns( 'checkouts.views', @@ -13,7 +13,7 @@ urlpatterns = patterns( name='checkout_document' ), url( - r'^(?P\d+)/check/in/$', 'checkin_document', + r'^(?P\d+)/check/in/$', DocumentCheckinView.as_view(), name='checkin_document' ), url( diff --git a/mayan/apps/checkouts/views.py b/mayan/apps/checkouts/views.py index 802be49a0b..d79628e0d5 100644 --- a/mayan/apps/checkouts/views.py +++ b/mayan/apps/checkouts/views.py @@ -13,8 +13,8 @@ from documents.models import Document from documents.views import DocumentListView from acls.models import AccessControlList +from common.generics import ConfirmView, SingleObjectCreateView from common.utils import encapsulate -from common.views import SingleObjectCreateView from permissions import Permission from .exceptions import DocumentAlreadyCheckedOut, DocumentNotCheckedOut @@ -42,7 +42,9 @@ class CheckoutDocumentView(SingleObjectCreateView): permission_document_checkout, request.user, self.document ) - return super(CheckoutDocumentView, self).dispatch(request, *args, **kwargs) + return super( + CheckoutDocumentView, self + ).dispatch(request, *args, **kwargs) def form_valid(self, form): try: @@ -148,55 +150,66 @@ def checkout_info(request, document_pk): ) -def checkin_document(request, document_pk): - document = get_object_or_404(Document, pk=document_pk) - post_action_redirect = reverse( - 'checkouts:checkout_info', args=[document.pk] - ) +class DocumentCheckinView(ConfirmView): + def get_object(self): + return get_object_or_404(Document, pk=self.kwargs['pk']) - previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) - next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) + def get_extra_context(self): + document = self.get_object() - if not document.is_checked_out(): - messages.error(request, _('Document has not been checked out.')) - return HttpResponseRedirect(previous) + context = { + 'object': document, + } - # If the user trying to check in the document is the same as the check out - # user just check for the normal permission otherwise check for the forceful - # checkin permission - if document.checkout_info().user == request.user: - try: - Permission.check_permissions(request.user, [permission_document_checkin]) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_checkin, request.user, document) - else: - try: - Permission.check_permissions(request.user, [permission_document_checkin_override]) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_checkin_override, request.user, document) + if document.checkout_info().user != self.request.user: + context['title'] = _( + 'You didn\'t originally checked out this document. ' + 'Forcefully check in the document: %s?' + ) % document + else: + context['title'] = _('Check in the document: %s?') % document + + return context + + def object_action(self, request, obj): + document = obj + + if document.checkout_info().user == request.user: + try: + Permission.check_permissions( + request.user, (permission_document_checkin,) + ) + except PermissionDenied: + AccessControlList.objects.check_access( + permission_document_checkin, request.user, document + ) + else: + try: + Permission.check_permissions( + request.user, (permission_document_checkin_override,) + ) + except PermissionDenied: + AccessControlList.objects.check_access( + permission_document_checkin_override, request.user, document + ) - if request.method == 'POST': try: document.check_in(user=request.user) except DocumentNotCheckedOut: messages.error(request, _('Document has not been checked out.')) except Exception as exception: - messages.error(request, _('Error trying to check in document; %s') % exception) + messages.error( + request, _('Error trying to check in document; %s') % exception + ) else: - messages.success(request, _('Document "%s" checked in successfully.') % document) - return HttpResponseRedirect(next) + messages.success( + request, _('Document "%s" checked in successfully.') % document + ) - context = { - 'delete_view': False, - 'previous': previous, - 'next': next, - 'object': document, - } + def get_post_action_redirect(self): + return reverse('checkouts:checkout_info', args=(self.get_object().pk,)) - if document.checkout_info().user != request.user: - context['title'] = _('You didn\'t originally checked out this document. Forcefully check in the document: %s?') % document - else: - context['title'] = _('Check in the document: %s?') % document + def post(self, request, *args, **kwargs): + self.object_action(request=request, obj=self.get_object()) - return render_to_response('appearance/generic_confirm.html', context, - context_instance=RequestContext(request)) + return HttpResponseRedirect(self.get_success_url())