Convert events app views to CBV.

This commit is contained in:
Roberto Rosario
2015-07-10 02:54:59 -04:00
parent 76c3ff7374
commit aec8263ad8
5 changed files with 86 additions and 76 deletions

View File

@@ -22,6 +22,7 @@ from converter.permissions import (
permission_transformation_delete, permission_transformation_edit, permission_transformation_delete, permission_transformation_edit,
permission_transformation_view, permission_transformation_view,
) )
from events.links import link_events_for_object
from events.permissions import permission_events_view from events.permissions import permission_events_view
from mayan.celery import app from mayan.celery import app
from navigation import SourceColumn from navigation import SourceColumn
@@ -32,11 +33,10 @@ from .handlers import create_default_document_type
from .links import ( from .links import (
link_clear_image_cache, link_document_clear_transformations, link_clear_image_cache, link_document_clear_transformations,
link_document_delete, link_document_document_type_edit, link_document_delete, link_document_document_type_edit,
link_document_events_view, link_document_multiple_document_type_edit, link_document_multiple_document_type_edit, link_document_download,
link_document_download, link_document_edit, link_document_list, link_document_edit, link_document_list, link_document_list_deleted,
link_document_list_deleted, link_document_list_recent, link_document_list_recent, link_document_multiple_delete,
link_document_multiple_delete, link_document_multiple_trash, link_document_multiple_trash, link_document_multiple_clear_transformations,
link_document_multiple_clear_transformations,
link_document_multiple_download, link_document_multiple_restore, link_document_multiple_download, link_document_multiple_restore,
link_document_multiple_update_page_count, link_document_multiple_update_page_count,
link_document_page_navigation_first, link_document_page_navigation_last, link_document_page_navigation_first, link_document_page_navigation_last,
@@ -147,7 +147,7 @@ class DocumentsApp(MayanAppConfig):
menu_facet.bind_links(links=[link_acl_list], sources=[Document]) menu_facet.bind_links(links=[link_acl_list], sources=[Document])
menu_facet.bind_links(links=[link_document_preview], sources=[Document], position=0) menu_facet.bind_links(links=[link_document_preview], sources=[Document], position=0)
menu_facet.bind_links(links=[link_document_properties], sources=[Document], position=2) menu_facet.bind_links(links=[link_document_properties], sources=[Document], position=2)
menu_facet.bind_links(links=[link_document_events_view, link_document_version_list], sources=[Document], position=2) menu_facet.bind_links(links=[link_events_for_object, link_document_version_list], sources=[Document], position=2)
menu_facet.bind_links(links=[link_document_pages], sources=[Document]) menu_facet.bind_links(links=[link_document_pages], sources=[Document])
# Document actions # Document actions

View File

@@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from converter.permissions import permission_transformation_delete from converter.permissions import permission_transformation_delete
from events.permissions import permission_events_view
from navigation import Link from navigation import Link
from .permissions import ( from .permissions import (
@@ -39,7 +38,6 @@ def is_min_zoom(context):
# Facet # Facet
link_document_events_view = Link(permissions=[permission_events_view], text=_('Events'), view='events:events_for_object', args=['"documents"', '"document"', 'object.id'])
link_document_preview = Link(permissions=[permission_document_view], text=_('Preview'), view='documents:document_preview', args='object.id') link_document_preview = Link(permissions=[permission_document_view], text=_('Preview'), view='documents:document_preview', args='object.id')
link_document_properties = Link(permissions=[permission_document_view], text=_('Properties'), view='documents:document_properties', args='object.id') link_document_properties = Link(permissions=[permission_document_view], text=_('Properties'), view='documents:document_properties', args='object.id')
link_document_version_list = Link(permissions=[permission_document_view], text=_('Versions'), view='documents:document_version_list', args='object.pk') link_document_version_list = Link(permissions=[permission_document_view], text=_('Versions'), view='documents:document_version_list', args='object.pk')

View File

@@ -1,7 +1,20 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation import Link from navigation import Link
link_events_list = Link(icon='fa fa-list-ol', text=_('Events'), view='events:events_list') from .permissions import permission_events_view
def get_kwargs_factory(variable_name):
def get_kwargs(context):
content_type = ContentType.objects.get_for_model(context[variable_name])
return {'app_label': '"{}"'.format(content_type.app_label), 'model': '"{}"'.format(content_type.model), 'object_id': '{}.pk'.format(variable_name)}
return get_kwargs
link_events_list = Link(icon='fa fa-list-ol', permissions=[permission_events_view], text=_('Events'), view='events:events_list')
link_events_for_object = Link(permissions=[permission_events_view], text=_('Events'), view='events:events_for_object', kwargs=get_kwargs_factory('resolved_object'))

View File

@@ -2,9 +2,11 @@ from __future__ import unicode_literals
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from .views import EventListView, ObjectEventListView, VerbEventListView
urlpatterns = patterns( urlpatterns = patterns(
'events.views', 'events.views',
url(r'^all/$', 'events_list', name='events_list'), url(r'^all/$', EventListView.as_view(), name='events_list'),
url(r'^for_object/(?P<app_label>[\w\-]+)/(?P<module_name>[\w\-]+)/(?P<object_id>\d+)/$', 'events_list', name='events_for_object'), url(r'^for/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/$', ObjectEventListView.as_view(), name='events_for_object'),
url(r'^by_verb/(?P<verb>[\w\-]+)/$', 'events_list', name='events_by_verb'), url(r'^by_verb/(?P<verb>[\w\-]+)/$', VerbEventListView.as_view(), name='events_by_verb'),
) )

View File

@@ -1,5 +1,6 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db.models.loading import get_model from django.db.models.loading import get_model
from django.http import Http404 from django.http import Http404
@@ -11,6 +12,7 @@ from actstream.models import Action, any_stream
from acls.models import AccessControlList from acls.models import AccessControlList
from common.utils import encapsulate from common.utils import encapsulate
from common.views import SingleObjectListView
from permissions import Permission from permissions import Permission
from .classes import Event from .classes import Event
@@ -18,71 +20,66 @@ from .permissions import permission_events_view
from .widgets import event_object_link from .widgets import event_object_link
def events_list(request, app_label=None, module_name=None, object_id=None, verb=None): class EventListView(SingleObjectListView):
extra_columns = [] view_permission = permission_events_view
context = { def get_queryset(self):
'extra_columns': extra_columns, return Action.objects.all()
'hide_object': True,
}
if app_label and module_name and object_id: def get_extra_context(self):
model = get_model(app_label, module_name) return {
if not model: 'extra_columns': [
raise Http404
content_object = get_object_or_404(model, pk=object_id)
try:
Permission.check_permissions(request.user, [permission_events_view])
except PermissionDenied:
AccessControlList.objects.check_access(permission_events_view, request.user, content_object)
context.update({
'object_list': any_stream(content_object),
'title': _('Events for: %s') % content_object,
'object': content_object
})
elif verb:
pre_object_list = Action.objects.filter(verb=verb)
try:
Permission.check_permissions(request.user, [permission_events_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 = AccessControlList.objects.filter_by_access(permission_events_view, request.user, pre_object_list, related='content_object')
else:
object_list = pre_object_list
context.update({
'title': _('Events of type: %s') % Event.get_label(verb),
'object_list': object_list
})
else:
pre_object_list = Action.objects.all()
try:
Permission.check_permissions(request.user, [permission_events_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 = AccessControlList.objects.filter_by_access(permission_events_view, request.user, pre_object_list, related='content_object')
else:
object_list = pre_object_list
context.update({
'title': _('Events'),
'object_list': object_list
})
if not (app_label and module_name and object_id):
extra_columns.append(
{ {
'name': _('Target'), 'name': _('Target'),
'attribute': encapsulate(lambda entry: event_object_link(entry)) 'attribute': encapsulate(lambda entry: event_object_link(entry))
} }
) ],
return render_to_response('appearance/generic_list.html', context, 'hide_object': True,
context_instance=RequestContext(request)) 'title': _('Events'),
}
class ObjectEventListView(EventListView):
view_permissions = None
def dispatch(self, request, *args, **kwargs):
self.content_type = get_object_or_404(ContentType, app_label=self.kwargs['app_label'], model=self.kwargs['model'])
try:
self.content_object = self.content_type.get_object_for_this_type(pk=self.kwargs['object_id'])
except self.content_type.model_class().DoesNotExist:
raise Http404
try:
Permission.check_permissions(request.user, permissions=(permission_events_view,))
except PermissionDenied:
AccessControlList.objects.check_access(permission_events_view, request.user, self.content_object)
return super(ObjectEventListView, self).dispatch(request, *args, **kwargs)
def get_queryset(self):
return any_stream(self.content_object)
def extra_context(self):
return {
'hide_object': True,
'object': self.content_object,
'title': _('Events for: %s') % self.content_object,
}
class VerbEventListView(SingleObjectListView):
def get_queryset(self):
return Action.objects.filter(verb=self.kwargs['verb'])
def get_extra_context(self):
return {
'extra_columns': [
{
'name': _('Target'),
'attribute': encapsulate(lambda entry: event_object_link(entry))
}
],
'hide_object': True,
'title': _('Events of type: %s') % Event.get_label(self.kwargs['verb']),
}