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 ++++++++++++++++++ tools/pharos-dashboard/booking/models.py | 1 + tools/pharos-dashboard/dashboard/urls.py | 1 - tools/pharos-dashboard/pharos_dashboard/urls.py | 4 ++++ tools/pharos-dashboard/templates/base.html | 5 ++++ .../templates/rest_framework/api.html | 9 +++++++ 9 files changed, 92 insertions(+), 1 deletion(-) 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 create mode 100644 tools/pharos-dashboard/templates/rest_framework/api.html 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 diff --git a/tools/pharos-dashboard/booking/models.py b/tools/pharos-dashboard/booking/models.py index e772fb5b..fed35e3f 100644 --- a/tools/pharos-dashboard/booking/models.py +++ b/tools/pharos-dashboard/booking/models.py @@ -6,6 +6,7 @@ from jira import JIRAError from dashboard.models import Resource from django.conf import settings + class Booking(models.Model): id = models.AutoField(primary_key=True) user = models.ForeignKey(User, models.CASCADE) # delete if user is deleted diff --git a/tools/pharos-dashboard/dashboard/urls.py b/tools/pharos-dashboard/dashboard/urls.py index baa2d633..35c64636 100644 --- a/tools/pharos-dashboard/dashboard/urls.py +++ b/tools/pharos-dashboard/dashboard/urls.py @@ -14,7 +14,6 @@ Including another URLconf 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url - from dashboard.views import * urlpatterns = [ diff --git a/tools/pharos-dashboard/pharos_dashboard/urls.py b/tools/pharos-dashboard/pharos_dashboard/urls.py index d8bf5608..4a9d9149 100644 --- a/tools/pharos-dashboard/pharos_dashboard/urls.py +++ b/tools/pharos-dashboard/pharos_dashboard/urls.py @@ -18,12 +18,16 @@ from django.conf.urls import url, include from django.conf.urls.static import static from django.contrib import admin + urlpatterns = [ url(r'^', include('dashboard.urls', namespace='dashboard')), url(r'^booking/', include('booking.urls', namespace='booking')), url(r'^accounts/', include('account.urls', namespace='account')), url(r'^admin/', admin.site.urls), + url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), + + url(r'^api/', include('api.urls')) ] if settings.DEBUG is True: diff --git a/tools/pharos-dashboard/templates/base.html b/tools/pharos-dashboard/templates/base.html index 42156e3b..c5da483d 100644 --- a/tools/pharos-dashboard/templates/base.html +++ b/tools/pharos-dashboard/templates/base.html @@ -76,6 +76,11 @@ class="fa fa-fw">Users +
  • + API + +
  • diff --git a/tools/pharos-dashboard/templates/rest_framework/api.html b/tools/pharos-dashboard/templates/rest_framework/api.html new file mode 100644 index 00000000..9c6c4f7d --- /dev/null +++ b/tools/pharos-dashboard/templates/rest_framework/api.html @@ -0,0 +1,9 @@ +{% extends "rest_framework/base.html" %} + +{% block title %}Pharos Dashboard API{% endblock %} + +{% block branding %} + + Pharos Dashboard API + +{% endblock %} \ No newline at end of file -- cgit 1.2.3-korg