diff options
author | maxbr <maxbr@mi.fu-berlin.de> | 2016-09-19 10:14:19 +0200 |
---|---|---|
committer | maxbr <maxbr@mi.fu-berlin.de> | 2016-09-19 10:14:19 +0200 |
commit | 3c8baae57206988fbdfc2d858ddc3f134e552f07 (patch) | |
tree | edddd6c005b399425785fc8af3f97a520485264c /tools | |
parent | 1375c1e7f9e21de9ea0a1c756d27caa652a7c2f2 (diff) |
Add a REST API for the dashboard
JIRA: PHAROS-265
Change-Id: Ic1b2d20415b0b84473d5915c4f26f3e65bbb1ecf
Signed-off-by: maxbr <maxbr@mi.fu-berlin.de>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/pharos-dashboard/api/__init__.py | 0 | ||||
-rw-r--r-- | tools/pharos-dashboard/api/serializers.py | 22 | ||||
-rw-r--r-- | tools/pharos-dashboard/api/urls.py | 28 | ||||
-rw-r--r-- | tools/pharos-dashboard/api/views.py | 23 | ||||
-rw-r--r-- | tools/pharos-dashboard/booking/models.py | 1 | ||||
-rw-r--r-- | tools/pharos-dashboard/dashboard/urls.py | 1 | ||||
-rw-r--r-- | tools/pharos-dashboard/pharos_dashboard/urls.py | 4 | ||||
-rw-r--r-- | tools/pharos-dashboard/templates/base.html | 5 | ||||
-rw-r--r-- | tools/pharos-dashboard/templates/rest_framework/api.html | 9 |
9 files changed, 92 insertions, 1 deletions
diff --git a/tools/pharos-dashboard/api/__init__.py b/tools/pharos-dashboard/api/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tools/pharos-dashboard/api/__init__.py 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"></i>Users </a> </li> + <li> + <a href="{% url 'api-root' %}"><i + class="fa fa-fw"></i>API + </a> + </li> </ul> </div> <!-- /.sidebar-collapse --> 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 %} + <a class='navbar-brand' rel="nofollow" href=#> + Pharos Dashboard API + </a> +{% endblock %}
\ No newline at end of file |