diff --git a/mayan/apps/events/api_views.py b/mayan/apps/events/api_views.py index 9882cc3ce6..37c56e6054 100644 --- a/mayan/apps/events/api_views.py +++ b/mayan/apps/events/api_views.py @@ -1,8 +1,15 @@ -from __future__ import unicode_literals +from __future__ import absolute_import, unicode_literals -from actstream.models import Action +from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import PermissionDenied +from django.http import Http404 +from django.shortcuts import get_object_or_404 + +from actstream.models import Action, any_stream from rest_framework import generics +from acls.models import AccessControlList +from permissions import Permission from rest_api.permissions import MayanPermission from .classes import Event @@ -10,6 +17,41 @@ from .permissions import permission_events_view from .serializers import EventSerializer, EventTypeSerializer +class APIObjectEventListView(generics.ListAPIView): + """ + Return a list of events for the specified object. + """ + + serializer_class = EventSerializer + + def get_object(self): + content_type = get_object_or_404( + ContentType, app_label=self.kwargs['app_label'], + model=self.kwargs['model'] + ) + + try: + return content_type.get_object_for_this_type( + pk=self.kwargs['object_id'] + ) + except content_type.model_class().DoesNotExist: + raise Http404 + + def get_queryset(self): + object = self.get_object() + + try: + Permission.check_permissions( + self.request.user, permissions=(permission_events_view,) + ) + except PermissionDenied: + AccessControlList.objects.check_access( + permission_events_view, self.request.user, object + ) + + return any_stream(object) + + class APIEventTypeListView(generics.ListAPIView): """ Returns a list of all the available event types. diff --git a/mayan/apps/events/urls.py b/mayan/apps/events/urls.py index 0641d17c31..0fb5673b0a 100644 --- a/mayan/apps/events/urls.py +++ b/mayan/apps/events/urls.py @@ -2,7 +2,9 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .api_views import APIEventListView, APIEventTypeListView +from .api_views import ( + APIEventListView, APIEventTypeListView, APIObjectEventListView +) from .views import EventListView, ObjectEventListView, VerbEventListView urlpatterns = patterns( @@ -21,4 +23,8 @@ urlpatterns = patterns( api_urls = [ url(r'^types/$', APIEventTypeListView.as_view(), name='event-type-list'), url(r'^events/$', APIEventListView.as_view(), name='event-list'), + url( + r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/events/$', + APIObjectEventListView.as_view(), name='object-event-list' + ), ]