From 3c8baae57206988fbdfc2d858ddc3f134e552f07 Mon Sep 17 00:00:00 2001 From: maxbr Date: Mon, 19 Sep 2016 10:14:19 +0200 Subject: Add a REST API for the dashboard JIRA: PHAROS-265 Change-Id: Ic1b2d20415b0b84473d5915c4f26f3e65bbb1ecf Signed-off-by: maxbr --- tools/pharos-dashboard/api/__init__.py | 0 tools/pharos-dashboard/api/serializers.py | 22 ++++++++++++++++++++++ tools/pharos-dashboard/api/urls.py | 28 ++++++++++++++++++++++++++++ tools/pharos-dashboard/api/views.py | 23 +++++++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 tools/pharos-dashboard/api/__init__.py create mode 100644 tools/pharos-dashboard/api/serializers.py create mode 100644 tools/pharos-dashboard/api/urls.py create mode 100644 tools/pharos-dashboard/api/views.py (limited to 'tools/pharos-dashboard/api') diff --git a/tools/pharos-dashboard/api/__init__.py b/tools/pharos-dashboard/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tools/pharos-dashboard/api/serializers.py b/tools/pharos-dashboard/api/serializers.py new file mode 100644 index 00000000..c3875cca --- /dev/null +++ b/tools/pharos-dashboard/api/serializers.py @@ -0,0 +1,22 @@ +from rest_framework import serializers + +from booking.models import Booking +from dashboard.models import Server, Resource + + +class BookingSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Booking + fields = ('id', 'resource', 'start', 'end', 'purpose') + + +class ServerSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Server + fields = ('id', 'resource', 'name', 'model', 'cpu', 'ram', 'storage') + + +class ResourceSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Resource + fields = ('id', 'name', 'description', 'url', 'server_set') diff --git a/tools/pharos-dashboard/api/urls.py b/tools/pharos-dashboard/api/urls.py new file mode 100644 index 00000000..22f12eb6 --- /dev/null +++ b/tools/pharos-dashboard/api/urls.py @@ -0,0 +1,28 @@ +"""pharos_dashboard URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.10/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from rest_framework import routers + +from api.views import * + +router = routers.DefaultRouter() +router.register(r'resources', ResourceViewSet) +router.register(r'servers', ServerViewSet) +router.register(r'bookings', BookingViewSet) + +urlpatterns = [ + url(r'^', include(router.urls)), +] \ No newline at end of file diff --git a/tools/pharos-dashboard/api/views.py b/tools/pharos-dashboard/api/views.py new file mode 100644 index 00000000..78d7b8a9 --- /dev/null +++ b/tools/pharos-dashboard/api/views.py @@ -0,0 +1,23 @@ +from rest_framework import viewsets + +from api.serializers import ResourceSerializer, ServerSerializer, BookingSerializer +from booking.models import Booking +from dashboard.models import Resource, Server + + +class BookingViewSet(viewsets.ModelViewSet): + queryset = Booking.objects.all() + serializer_class = BookingSerializer + filter_fields = ('resource', 'user') + + +class ServerViewSet(viewsets.ModelViewSet): + queryset = Server.objects.all() + serializer_class = ServerSerializer + filter_fields = ('resource', 'name') + + +class ResourceViewSet(viewsets.ModelViewSet): + queryset = Resource.objects.all() + serializer_class = ResourceSerializer + filter_fields = ('name',) \ No newline at end of file -- cgit 1.2.3-korg