103 lines
3.4 KiB
Python
103 lines
3.4 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
from actstream.models import any_stream
|
|
from rest_framework import viewsets
|
|
from rest_framework.decorators import action
|
|
from rest_framework.response import Response
|
|
|
|
from mayan.apps.common.mixins import ContentTypeViewMixin
|
|
from mayan.apps.rest_api.mixins import ExternalObjectAPIViewSetMixin
|
|
from mayan.apps.rest_api.viewsets import MayanAPIReadOnlyModelViewSet
|
|
|
|
from .classes import EventTypeNamespace
|
|
from .models import Notification
|
|
from .permissions import permission_events_view
|
|
from .serializers import (
|
|
EventSerializer, EventTypeNamespaceSerializer, EventTypeSerializer,
|
|
NotificationSerializer
|
|
)
|
|
|
|
|
|
class EventTypeNamespaceAPIViewSet(viewsets.ReadOnlyModelViewSet):
|
|
lookup_field = 'name'
|
|
lookup_url_kwarg = 'event_type_namespace_name'
|
|
serializer_class = EventTypeNamespaceSerializer
|
|
|
|
def get_object(self):
|
|
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
|
|
filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
|
|
return EventTypeNamespace.get(**filter_kwargs)
|
|
|
|
@action(
|
|
detail=True, serializer_class=EventTypeSerializer,
|
|
url_name='event_type-list', url_path='event_types'
|
|
)
|
|
def event_type_list(self, request, *args, **kwargs):
|
|
queryset = self.get_object().event_types
|
|
page = self.paginate_queryset(queryset)
|
|
|
|
serializer = self.get_serializer(
|
|
queryset, many=True, context={'request': request}
|
|
)
|
|
|
|
if page is not None:
|
|
return self.get_paginated_response(serializer.data)
|
|
|
|
return Response(serializer.data)
|
|
|
|
def get_queryset(self):
|
|
return EventTypeNamespace.all()
|
|
|
|
|
|
class EventTypeAPIViewSet(viewsets.ReadOnlyModelViewSet):
|
|
lookup_field = 'id'
|
|
lookup_url_kwarg = 'event_type_id'
|
|
lookup_value_regex = r'[\w\.]+'
|
|
serializer_class = EventTypeSerializer
|
|
|
|
def get_object(self):
|
|
namespace = EventTypeNamespace.get(name=self.kwargs['event_type_namespace_name'])
|
|
event_types = namespace.get_event_types()
|
|
return event_types.get(self.kwargs['event_type_id'])
|
|
|
|
|
|
class NotificationAPIViewSet(MayanAPIReadOnlyModelViewSet):
|
|
serializer_class = NotificationSerializer
|
|
|
|
def get_queryset(self):
|
|
query_parameter = 'read'
|
|
parameter_read = self.request.GET.get(query_parameter)
|
|
|
|
if self.request.user.is_authenticated:
|
|
queryset = Notification.objects.filter(user=self.request.user)
|
|
else:
|
|
queryset = Notification.objects.none()
|
|
|
|
if parameter_read == 'True':
|
|
queryset = queryset.filter(read=True)
|
|
elif parameter_read == 'False':
|
|
queryset = queryset.filter(read=False)
|
|
|
|
return queryset
|
|
|
|
|
|
class ObjectEventAPIViewSet(ContentTypeViewMixin, ExternalObjectAPIViewSetMixin, MayanAPIReadOnlyModelViewSet):
|
|
content_type_url_kw_args = {
|
|
'app_label': 'app_label',
|
|
'model': 'model_name'
|
|
}
|
|
|
|
external_object_permission = permission_events_view
|
|
external_object_pk_url_kwarg = 'object_id'
|
|
serializer_class = EventSerializer
|
|
|
|
def get_external_object_queryset(self):
|
|
# Here we get a queryset the object model for which the event
|
|
# will be accessed.
|
|
return self.get_content_type().get_all_objects_for_this_type()
|
|
|
|
def get_queryset(self):
|
|
obj = self.get_external_object()
|
|
|
|
return any_stream(obj)
|