diff --git a/mayan/apps/events/api_views.py b/mayan/apps/events/api_views.py new file mode 100644 index 0000000000..a317c64c15 --- /dev/null +++ b/mayan/apps/events/api_views.py @@ -0,0 +1,15 @@ +from __future__ import unicode_literals + +from rest_framework import generics + +from .classes import Event +from .serializers import EventSerializer + + +class APIEventTypeList(generics.ListAPIView): + """ + Returns a list of all the available event types. + """ + + serializer_class = EventSerializer + queryset = sorted(Event.all(), key=lambda event: event.name) diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py index 74a6ddc661..190382c352 100644 --- a/mayan/apps/events/apps.py +++ b/mayan/apps/events/apps.py @@ -6,8 +6,8 @@ from actstream.models import Action from common import MayanAppConfig, menu_tools from common.classes import Package - from navigation import SourceColumn +from rest_api.classes import APIEndPoint from .links import link_events_list from .widgets import event_type_link @@ -21,6 +21,8 @@ class EventsApp(MayanAppConfig): def ready(self): super(EventsApp, self).ready() + APIEndPoint(app=self, version_string='1') + Package(label='django-activity-stream', license_text=''' Copyright (c) 2010-2015, Justin Quick All rights reserved. diff --git a/mayan/apps/events/classes.py b/mayan/apps/events/classes.py index 07b76c9617..d986bfb52b 100644 --- a/mayan/apps/events/classes.py +++ b/mayan/apps/events/classes.py @@ -7,20 +7,33 @@ from actstream import action class Event(object): - _labels = {} + _registry = {} + + @classmethod + def all(cls): + return cls._registry.values() + + @classmethod + def get(cls, name): + try: + return cls._registry[name] + except KeyError: + raise KeyError( + _('Unknown or obsolete event type: {0}'.format(name)) + ) @classmethod def get_label(cls, name): try: - return cls._labels[name] - except KeyError: - return _('Unknown or obsolete event type: {0}'.format(name)) + return cls.get(name=name).label + except KeyError as exception: + return unicode(exception) def __init__(self, name, label): self.name = name self.label = label self.event_type = None - self.__class__._labels[name] = label + self.__class__._registry[name] = self def commit(self, actor=None, action_object=None, target=None): model = apps.get_model('events', 'EventType') diff --git a/mayan/apps/events/serializers.py b/mayan/apps/events/serializers.py new file mode 100644 index 0000000000..6223363413 --- /dev/null +++ b/mayan/apps/events/serializers.py @@ -0,0 +1,8 @@ +from __future__ import unicode_literals + +from rest_framework import serializers + + +class EventSerializer(serializers.Serializer): + label = serializers.CharField() + name = serializers.CharField() diff --git a/mayan/apps/events/tests/test_api.py b/mayan/apps/events/tests/test_api.py new file mode 100644 index 0000000000..dadc0f531a --- /dev/null +++ b/mayan/apps/events/tests/test_api.py @@ -0,0 +1,11 @@ +from __future__ import unicode_literals + +from django.core.urlresolvers import reverse + +from rest_framework.test import APITestCase + + +class EventAPITestCase(APITestCase): + def test_evet_type_list_view(self): + response = self.client.get(reverse('rest_api:event-type-list')) + self.assertEqual(response.status_code, 200) diff --git a/mayan/apps/events/urls.py b/mayan/apps/events/urls.py index 3f87a57e58..b256e1585e 100644 --- a/mayan/apps/events/urls.py +++ b/mayan/apps/events/urls.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url +from .api_views import APIEventTypeList from .views import EventListView, ObjectEventListView, VerbEventListView urlpatterns = patterns( @@ -16,3 +17,7 @@ urlpatterns = patterns( name='events_by_verb' ), ) + +api_urls = [ + url(r'^$', APIEventTypeList.as_view(), name='event-type-list'), +]