Commit 83f92285 by Chif Gergő

Refactor views to viewsets

parent 4f79bde7
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from instance import views from instance import views
from rest_framework import routers
urlpatterns = [ router = routers.SimpleRouter()
path("instances/", views.InstanceList.as_view()), router.register(r'instances', views.InstanceViewSet, basename='instance')
path("instances/<int:pk>/", views.InstanceDetail.as_view()), router.register(r'flavors', views.FlavorViewSet, basename='flavor')
# path('instances/<int:pk>/action/', views.InstanceAction.as_view())
path("flavors/", views.FlavorListView.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
urlpatterns = router.urls
from instance.serializers import InstanceSerializer, FlavorSerializer from instance.serializers import InstanceSerializer, FlavorSerializer
from django.http import Http404 from django.http import Http404
from django.conf import settings from django.conf import settings
from rest_framework.views import APIView from rest_framework.viewsets import ViewSet
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from interface_openstack.implementation.vm.instance import ( from interface_openstack.implementation.vm.instance import (
...@@ -11,12 +11,19 @@ from template.models import InstanceTemplate ...@@ -11,12 +11,19 @@ from template.models import InstanceTemplate
from instance.models import Instance, Flavor, Lease from instance.models import Instance, Flavor, Lease
class InstanceList(APIView): class InstanceViewSet(ViewSet):
def get(self, request, format=None):
def get_object(self, pk):
try:
return Instance.objects.get(pk=pk)
except Instance.DoesNotExist:
raise Http404
def list(self, request):
instances = Instance.objects.all() instances = Instance.objects.all()
return Response(InstanceSerializer(instances, many=True).data) return Response(InstanceSerializer(instances, many=True).data)
def post(self, request, format=None): def create(self, request):
data = request.data data = request.data
template = InstanceTemplate.objects.get(pk=data["template"]) template = InstanceTemplate.objects.get(pk=data["template"])
flavor = Flavor.objects.get(pk=data["flavor"]) flavor = Flavor.objects.get(pk=data["flavor"])
...@@ -37,19 +44,7 @@ class InstanceList(APIView): ...@@ -37,19 +44,7 @@ class InstanceList(APIView):
) )
return Response(newInstance.pk) return Response(newInstance.pk)
def retrieve(self, request):
class InstanceDetail(APIView):
"""
Retrieve, update or delete a snippet instance.
"""
def get_object(self, pk):
try:
return Instance.objects.get(pk=pk)
except Instance.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
instance = self.get_object(pk) instance = self.get_object(pk)
instanceDict = InstanceSerializer(instance).data instanceDict = InstanceSerializer(instance).data
...@@ -61,7 +56,7 @@ class InstanceDetail(APIView): ...@@ -61,7 +56,7 @@ class InstanceDetail(APIView):
return Response(merged_dict) return Response(merged_dict)
def put(self, request, pk, format=None): def update(self, request, pk, format=None):
instance = self.get_object(pk) instance = self.get_object(pk)
serializer = InstanceSerializer(instance, data=request.data) serializer = InstanceSerializer(instance, data=request.data)
if serializer.is_valid(): if serializer.is_valid():
...@@ -69,22 +64,28 @@ class InstanceDetail(APIView): ...@@ -69,22 +64,28 @@ class InstanceDetail(APIView):
return Response(serializer.data) return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk, format=None): def destroy(self, request, pk, format=None):
instance = self.get_object(pk) instance = self.get_object(pk)
instance.delete() instance.delete()
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
class FlavorListView(APIView): class FlavorViewSet(ViewSet):
""" """
Create, update or delete a flavor. Create, update or delete a flavor.
""" """
def get(self, request, format=None): def get_object(self, pk):
try:
return Flavor.objects.get(pk=pk)
except Flavor.DoesNotExist:
raise Http404
def list(self, request, format=None):
flavors = Flavor.objects.all() flavors = Flavor.objects.all()
return Response(FlavorSerializer(flavors, many=True).data) return Response(FlavorSerializer(flavors, many=True).data)
def post(self, request, format=None): def create(self, request, format=None):
data = request.data data = request.data
new_flavor = Flavor.create(name=data["name"], new_flavor = Flavor.create(name=data["name"],
description=data["description"], description=data["description"],
...@@ -94,3 +95,14 @@ class FlavorListView(APIView): ...@@ -94,3 +95,14 @@ class FlavorListView(APIView):
priority=data["priority"]) priority=data["priority"])
return Response(new_flavor.pk) return Response(new_flavor.pk)
def update(self, request, pk):
return Response(status=status.HTTP_400_BAD_REQUEST)
def partial_update(self, request, pk):
return Response(status=status.HTTP_400_BAD_REQUEST)
def destroy(self, request, pk):
flavor = self.get_object(pk)
flavor.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
Subproject commit 7b2647531e54da62fcf1db4c61a5e0530e977da4 Subproject commit e01d873c78ac17fed0438936f979de3cbaca6a5e
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment