Replace function views with class based views

This commit is contained in:
Roberto Rosario
2015-04-06 20:24:18 -04:00
parent 1fa8514367
commit d79f36bfcb
6 changed files with 49 additions and 65 deletions

View File

@@ -3,12 +3,13 @@ from __future__ import unicode_literals
from django.conf.urls import patterns, url
from .api_views import APICheckedoutDocumentListView, APICheckedoutDocumentView
from .views import CheckoutListView
urlpatterns = patterns('checkouts.views',
url(r'^list/$', 'checkout_list', (), 'checkout_list'),
url(r'^(?P<document_pk>\d+)/check/out/$', 'checkout_document', (), 'checkout_document'),
url(r'^(?P<document_pk>\d+)/check/in/$', 'checkin_document', (), 'checkin_document'),
url(r'^(?P<document_pk>\d+)/check/info/$', 'checkout_info', (), 'checkout_info'),
url(r'^list/$', CheckoutListView.as_view(), name='checkout_list'),
url(r'^(?P<document_pk>\d+)/check/out/$', 'checkout_document', name='checkout_document'),
url(r'^(?P<document_pk>\d+)/check/in/$', 'checkin_document', name='checkin_document'),
url(r'^(?P<document_pk>\d+)/check/info/$', 'checkout_info', name='checkout_info'),
)
api_urls = patterns('',

View File

@@ -10,7 +10,7 @@ from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
from documents.models import Document
from documents.views import document_list
from documents.views import DocumentListView
from acls.models import AccessEntry
from common.utils import encapsulate, get_object_name
@@ -26,19 +26,18 @@ from .permissions import (
)
def checkout_list(request):
return document_list(
request,
object_list=DocumentCheckout.objects.checked_out_documents(),
title=_('Documents checked out'),
extra_context={
'extra_columns': [
{'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object, display_object_type=False))},
{'name': _('Checkout time and date'), 'attribute': encapsulate(lambda document: document.checkout_info().checkout_datetime)},
{'name': _('Checkout expiration'), 'attribute': encapsulate(lambda document: document.checkout_info().expiration_datetime)},
],
}
)
class CheckoutListView(DocumentListView):
queryset = DocumentCheckout.objects.checked_out_documents()
extra_context = {
'title': _('Documents checked out'),
'hide_links': True,
'extra_columns': [
{'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object, display_object_type=False))},
{'name': _('Checkout time and date'), 'attribute': encapsulate(lambda document: document.checkout_info().checkout_datetime)},
{'name': _('Checkout expiration'), 'attribute': encapsulate(lambda document: document.checkout_info().expiration_datetime)},
],
}
def checkout_info(request, document_pk):

View File

@@ -10,11 +10,11 @@ from .api_views import (
APIRecentDocumentListView
)
from .settings import PRINT_SIZE, DISPLAY_SIZE
from .views import DocumentListView
from .views import DocumentListView, RecentDocumentListView
urlpatterns = patterns('documents.views',
url(r'^list/$', DocumentListView.as_view(), name='document_list'),
url(r'^list/recent/$', 'document_list_recent', (), 'document_list_recent'),
url(r'^list/recent/$', RecentDocumentListView.as_view(), name='document_list_recent'),
url(r'^(?P<document_id>\d+)/preview/$', 'document_preview', (), 'document_preview'),
url(r'^(?P<document_id>\d+)/content/$', 'document_content', (), 'document_content'),

View File

@@ -21,8 +21,10 @@ from common.compressed_files import CompressedFile
from common.utils import encapsulate, pretty_size, parse_range, urlquote
from common.views import SingleObjectListView
from common.widgets import two_state_template
from converter.literals import (DEFAULT_FILE_FORMAT_MIMETYPE, DEFAULT_PAGE_NUMBER,
DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL)
from converter.literals import (
DEFAULT_FILE_FORMAT_MIMETYPE, DEFAULT_PAGE_NUMBER, DEFAULT_ROTATION,
DEFAULT_ZOOM_LEVEL
)
from filetransfers.api import serve_file
from permissions.models import Permission
@@ -61,13 +63,23 @@ logger = logging.getLogger(__name__)
class DocumentListView(SingleObjectListView):
queryset = Document.objects.all()
object_permission = PERMISSION_DOCUMENT_VIEW
extra_context = {
'title': _('All documents'),
'hide_links': True,
'title': _('All documents'),
}
object_permission = PERMISSION_DOCUMENT_VIEW
queryset = Document.objects.all()
class RecentDocumentListView(DocumentListView):
extra_context = {
'hide_links': True,
'recent_count': RECENT_COUNT,
'title': _('Recent documents'),
}
def get_queryset(self):
return RecentDocument.objects.get_for_user(self.request.user)
def document_list(request, object_list=None, title=None, extra_context=None):
@@ -708,17 +720,6 @@ def document_page_navigation_last(request, document_page_id):
return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=[document_page.pk]), request.GET.urlencode()))
def document_list_recent(request):
return document_list(
request,
object_list=RecentDocument.objects.get_for_user(request.user),
title=_('Recent documents'),
extra_context={
'recent_count': RECENT_COUNT
}
)
def transform_page(request, document_page_id, zoom_function=None, rotation_function=None):
document_page = get_object_or_404(DocumentPage, pk=document_page_id)

View File

@@ -9,6 +9,7 @@ from .api_views import (
APIDocumentTypeMetadataTypeRequiredView, APIMetadataTypeListView,
APIMetadataTypeView
)
from .views import MissingRequiredMetadataDocumentListView
urlpatterns = patterns('metadata.views',
url(r'^(?P<document_id>\d+)/edit/$', 'metadata_edit', (), 'metadata_edit'),
@@ -27,7 +28,7 @@ urlpatterns = patterns('metadata.views',
url(r'^setup/document/type/(?P<document_type_id>\d+)/metadata/edit/$', 'setup_document_type_metadata', (), 'setup_document_type_metadata'),
url(r'^setup/document/type/(?P<document_type_id>\d+)/metadata/edit/required/$', 'setup_document_type_metadata_required', (), 'setup_document_type_metadata_required'),
url(r'^tools/missing_required_metadata/$', 'documents_missing_required_metadata', (), 'documents_missing_required_metadata'),
url(r'^tools/missing_required_metadata/$', MissingRequiredMetadataDocumentListView.as_view(), name='documents_missing_required_metadata'),
)
api_urls = patterns('',

View File

@@ -15,7 +15,7 @@ from documents.models import Document, DocumentType
from documents.permissions import (
PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_VIEW
)
from documents.views import document_list
from documents.views import DocumentListView
from permissions.models import Permission
from common.utils import encapsulate, generate_choices_w_labels
@@ -34,6 +34,14 @@ from .permissions import (
)
class MissingRequiredMetadataDocumentListView(DocumentListView):
extra_context = {
'hide_links': True,
'title': _('Documents missing required metadata'),
}
queryset = Document.objects.filter(document_type__metadata__required=True, metadata__value__isnull=True)
def metadata_edit(request, document_id=None, document_id_list=None):
if document_id:
document_id_list = unicode(document_id)
@@ -338,32 +346,6 @@ def metadata_view(request, document_id):
}, context_instance=RequestContext(request))
def documents_missing_required_metadata(request):
pre_object_list = Document.objects.filter(document_type__metadata__required=True, metadata__value__isnull=True)
try:
Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
except PermissionDenied:
# If user doesn't have global permission, get a list of document
# for which he/she does hace access use it to filter the
# provided object_list
object_list = AccessEntry.objects.filter_objects_by_access(
PERMISSION_DOCUMENT_VIEW, request.user, pre_object_list)
else:
object_list = pre_object_list
context = {
'object_list': object_list,
'title': _('Documents missing required metadata'),
'hide_links': True,
}
return document_list(
request,
extra_context=context
)
# Setup views
def setup_metadata_type_list(request):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_VIEW])