Code style updates.

This commit is contained in:
Roberto Rosario
2015-08-12 03:55:50 -04:00
parent 3f84b8d839
commit 49ec79b36a
4 changed files with 126 additions and 65 deletions

View File

@@ -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)

View File

@@ -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(

View File

@@ -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<document_pk>\d+)/check/in/$', 'checkin_document',
r'^(?P<pk>\d+)/check/in/$', DocumentCheckinView.as_view(),
name='checkin_document'
),
url(

View File

@@ -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())