From b07bbdba03fe9b1c3da2f69b8bc28b8071d99ec1 Mon Sep 17 00:00:00 2001 From: Trevor Bramwell Date: Fri, 22 Sep 2017 12:23:36 -0700 Subject: Rename pharos-dashboard and pharos-validator As subdirectories of the pharos-tools repo, there is little need to keep the pharos prefix. Change-Id: Ica3d79411f409df638647300036c0664183c2725 Signed-off-by: Trevor Bramwell --- src/api/__init__.py | 10 ++++++++ src/api/migrations/__init__.py | 10 ++++++++ src/api/serializers.py | 39 +++++++++++++++++++++++++++++++ src/api/urls.py | 40 +++++++++++++++++++++++++++++++ src/api/views.py | 53 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 152 insertions(+) create mode 100644 src/api/__init__.py create mode 100644 src/api/migrations/__init__.py create mode 100644 src/api/serializers.py create mode 100644 src/api/urls.py create mode 100644 src/api/views.py (limited to 'src/api') diff --git a/src/api/__init__.py b/src/api/__init__.py new file mode 100644 index 0000000..b5914ce --- /dev/null +++ b/src/api/__init__.py @@ -0,0 +1,10 @@ +############################################################################## +# Copyright (c) 2016 Max Breitenfeldt and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + diff --git a/src/api/migrations/__init__.py b/src/api/migrations/__init__.py new file mode 100644 index 0000000..b5914ce --- /dev/null +++ b/src/api/migrations/__init__.py @@ -0,0 +1,10 @@ +############################################################################## +# Copyright (c) 2016 Max Breitenfeldt and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + diff --git a/src/api/serializers.py b/src/api/serializers.py new file mode 100644 index 0000000..237ca02 --- /dev/null +++ b/src/api/serializers.py @@ -0,0 +1,39 @@ +############################################################################## +# Copyright (c) 2016 Max Breitenfeldt and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + +from rest_framework import serializers + +from booking.models import Booking +from dashboard.models import Server, Resource, ResourceStatus + +class BookingSerializer(serializers.ModelSerializer): + installer_name = serializers.CharField(source='installer.name') + scenario_name = serializers.CharField(source='scenario.name') + + class Meta: + model = Booking + fields = ('id', 'resource_id', 'start', 'end', 'installer_name', 'scenario_name', 'purpose') + + +class ServerSerializer(serializers.ModelSerializer): + class Meta: + model = Server + fields = ('id', 'resource_id', 'name', 'model', 'cpu', 'ram', 'storage') + + +class ResourceSerializer(serializers.ModelSerializer): + class Meta: + model = Resource + fields = ('id', 'name', 'description', 'url', 'server_set') + +class ResourceStatusSerializer(serializers.ModelSerializer): + class Meta: + model = ResourceStatus + fields = ('id', 'resource', 'timestamp','type', 'title', 'content') diff --git a/src/api/urls.py b/src/api/urls.py new file mode 100644 index 0000000..a4a4b2f --- /dev/null +++ b/src/api/urls.py @@ -0,0 +1,40 @@ +############################################################################## +# Copyright (c) 2016 Max Breitenfeldt and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + +"""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) +router.register(r'resource_status', ResourceStatusViewSet) + +urlpatterns = [ + url(r'^', include(router.urls)), + url(r'^token$', GenerateTokenView.as_view(), name='generate_token'), +] \ No newline at end of file diff --git a/src/api/views.py b/src/api/views.py new file mode 100644 index 0000000..84fa1b5 --- /dev/null +++ b/src/api/views.py @@ -0,0 +1,53 @@ +############################################################################## +# Copyright (c) 2016 Max Breitenfeldt and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + +from django.contrib.auth.decorators import login_required +from django.shortcuts import redirect +from django.utils.decorators import method_decorator +from django.views import View +from rest_framework import viewsets +from rest_framework.authtoken.models import Token + +from api.serializers import * +from booking.models import Booking +from dashboard.models import Resource, Server, ResourceStatus + + +class BookingViewSet(viewsets.ModelViewSet): + queryset = Booking.objects.all() + serializer_class = BookingSerializer + filter_fields = ('resource', 'id') + + +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', 'id') + +class ResourceStatusViewSet(viewsets.ModelViewSet): + queryset = ResourceStatus.objects.all() + serializer_class = ResourceStatusSerializer + + +@method_decorator(login_required, name='dispatch') +class GenerateTokenView(View): + def get(self, request, *args, **kwargs): + user = self.request.user + token, created = Token.objects.get_or_create(user=user) + if not created: + token.delete() + Token.objects.create(user=user) + return redirect('account:settings') -- cgit 1.2.3-korg