From 7180d41d76168025e14e073e7eef788df66a6c5f Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Tue, 7 Oct 2014 00:10:17 -0700 Subject: [PATCH] support fine-grained permission checks in API --- planetstack/apigen/api.template.py | 63 +- planetstack/genapi.py | 1287 ++++++++++++---------------- 2 files changed, 594 insertions(+), 756 deletions(-) diff --git a/planetstack/apigen/api.template.py b/planetstack/apigen/api.template.py index e9dbeb8..f595d2b 100644 --- a/planetstack/apigen/api.template.py +++ b/planetstack/apigen/api.template.py @@ -3,6 +3,7 @@ from rest_framework.response import Response from rest_framework.reverse import reverse from rest_framework import serializers from rest_framework import generics +from rest_framework import status from core.models import * from django.forms import widgets from rest_framework import filters @@ -70,6 +71,51 @@ serializerLookUp = { None: None, } +class PlanetStackRetrieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView): + + # To handle fine-grained field permissions, we have to check can_update + # the object has been updated but before it has been saved. + + def update(self, request, *args, **kwargs): + partial = kwargs.pop('partial', False) + self.object = self.get_object_or_none() + + serializer = self.get_serializer(self.object, data=request.DATA, + files=request.FILES, partial=partial) + + if not serializer.is_valid(): + print "UpdateModelMixin: not serializer.is_valid" + print serializer.errors + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + try: + self.pre_save(serializer.object) + except ValidationError as err: + # full_clean on model instance may be called in pre_save, + # so we have to handle eventual errors. + return Response(err.message_dict, status=status.HTTP_400_BAD_REQUEST) + + if serializer.object is not None: + if not serializer.object.can_update(request.user): + return Response(status=status.HTTP_400_BAD_REQUEST) + + if self.object is None: + self.object = serializer.save(force_insert=True) + self.post_save(self.object, created=True) + return Response(serializer.data, status=status.HTTP_201_CREATED) + + self.object = serializer.save(force_update=True) + self.post_save(self.object, created=False) + return Response(serializer.data, status=status.HTTP_200_OK) + + def destroy(self, request, *args, **kwargs): + obj = self.get_object() + if obj.can_update(request.user): + return super({{ object.camel }}Detail, self).destroy(request, *args, **kwargs) + else: + return Response(status=status.HTTP_400_BAD_REQUEST) + + # Based on core/views/*.py {% for object in generator.all %} @@ -99,7 +145,7 @@ class {{ object.camel }}List(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class {{ object.camel }}Detail(generics.RetrieveUpdateDestroyAPIView): +class {{ object.camel }}Detail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = {{ object.camel }}.objects.select_related().all() serializer_class = {{ object.camel }}Serializer id_serializer_class = {{ object.camel }}IdSerializer @@ -114,19 +160,8 @@ class {{ object.camel }}Detail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return {{ object.camel }}.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super({{ object.camel }}Detail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super({{ object.camel }}Detail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView {% endfor %} diff --git a/planetstack/genapi.py b/planetstack/genapi.py index 7791b73..d633b2d 100644 --- a/planetstack/genapi.py +++ b/planetstack/genapi.py @@ -3,6 +3,7 @@ from rest_framework.response import Response from rest_framework.reverse import reverse from rest_framework import serializers from rest_framework import generics +from rest_framework import status from core.models import * from django.forms import widgets from rest_framework import filters @@ -33,10 +34,12 @@ def api_root(request, format=None): 'sliceroles': reverse('slicerole-list', request=request, format=format), 'tags': reverse('tag-list', request=request, format=format), 'invoices': reverse('invoice-list', request=request, format=format), - 'planetstackroles': reverse('planetstackrole-list', request=request, format=format), 'sliceprivileges': reverse('sliceprivilege-list', request=request, format=format), + 'planetstackroles': reverse('planetstackrole-list', request=request, format=format), 'networkslivers': reverse('networksliver-list', request=request, format=format), 'networkdeploymentses': reverse('networkdeployments-list', request=request, format=format), + 'flavors': reverse('flavor-list', request=request, format=format), + 'projects': reverse('project-list', request=request, format=format), 'slices': reverse('slice-list', request=request, format=format), 'networks': reverse('network-list', request=request, format=format), 'services': reverse('service-list', request=request, format=format), @@ -46,6 +49,7 @@ def api_root(request, format=None): 'roles': reverse('role-list', request=request, format=format), 'usableobjects': reverse('usableobject-list', request=request, format=format), 'siteroles': reverse('siterole-list', request=request, format=format), + 'slicecredentials': reverse('slicecredential-list', request=request, format=format), 'slivers': reverse('sliver-list', request=request, format=format), 'nodes': reverse('node-list', request=request, format=format), 'dashboardviews': reverse('dashboardview-list', request=request, format=format), @@ -63,10 +67,11 @@ def api_root(request, format=None): 'userdeploymentses': reverse('userdeployments-list', request=request, format=format), 'accounts': reverse('account-list', request=request, format=format), 'networkparametertypes': reverse('networkparametertype-list', request=request, format=format), - 'sitedeploymentses': reverse('sitedeployments-list', request=request, format=format), + 'sitecredentials': reverse('sitecredential-list', request=request, format=format), 'deploymentprivileges': reverse('deploymentprivilege-list', request=request, format=format), 'deploymentroles': reverse('deploymentrole-list', request=request, format=format), - 'projects': reverse('project-list', request=request, format=format), + 'usercredentials': reverse('usercredential-list', request=request, format=format), + 'sitedeploymentses': reverse('sitedeployments-list', request=request, format=format), 'slicetags': reverse('slicetag-list', request=request, format=format), 'networktemplates': reverse('networktemplate-list', request=request, format=format), 'routers': reverse('router-list', request=request, format=format), @@ -166,48 +171,16 @@ class SliceRoleIdSerializer(serializers.ModelSerializer): class TagSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field() - - sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail') - - - - slices = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='slice-detail') - - - - slivers = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='sliver-detail') - - - - nodes = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='node-detail') - - class Meta: model = Tag - fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id','sites','slices','slivers','nodes',) + fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id',) class TagIdSerializer(serializers.ModelSerializer): id = serializers.Field() - - sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail') - - - - slices = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='slice-detail') - - - - slivers = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='sliver-detail') - - - - nodes = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='node-detail') - - class Meta: model = Tag - fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id','sites','slices','slivers','nodes',) + fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id',) @@ -229,36 +202,36 @@ class InvoiceIdSerializer(serializers.ModelSerializer): -class PlanetStackRoleSerializer(serializers.HyperlinkedModelSerializer): +class SlicePrivilegeSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field() class Meta: - model = PlanetStackRole - fields = ('id','created','updated','enacted','backend_status','deleted','role',) + model = SlicePrivilege + fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',) -class PlanetStackRoleIdSerializer(serializers.ModelSerializer): +class SlicePrivilegeIdSerializer(serializers.ModelSerializer): id = serializers.Field() class Meta: - model = PlanetStackRole - fields = ('id','created','updated','enacted','backend_status','deleted','role',) + model = SlicePrivilege + fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',) -class SlicePrivilegeSerializer(serializers.HyperlinkedModelSerializer): +class PlanetStackRoleSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field() class Meta: - model = SlicePrivilege - fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',) + model = PlanetStackRole + fields = ('id','created','updated','enacted','backend_status','deleted','role',) -class SlicePrivilegeIdSerializer(serializers.ModelSerializer): +class PlanetStackRoleIdSerializer(serializers.ModelSerializer): id = serializers.Field() class Meta: - model = SlicePrivilege - fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',) + model = PlanetStackRole + fields = ('id','created','updated','enacted','backend_status','deleted','role',) @@ -297,6 +270,40 @@ class NetworkDeploymentsIdSerializer(serializers.ModelSerializer): +class FlavorSerializer(serializers.HyperlinkedModelSerializer): + id = serializers.Field() + + class Meta: + model = Flavor + fields = ('id','created','updated','enacted','backend_status','deleted','name','description','flavor','order','default',) + +class FlavorIdSerializer(serializers.ModelSerializer): + id = serializers.Field() + + class Meta: + model = Flavor + fields = ('id','created','updated','enacted','backend_status','deleted','name','description','flavor','order','default',) + + + + +class ProjectSerializer(serializers.HyperlinkedModelSerializer): + id = serializers.Field() + + class Meta: + model = Project + fields = ('id','created','updated','enacted','backend_status','deleted','name',) + +class ProjectIdSerializer(serializers.ModelSerializer): + id = serializers.Field() + + class Meta: + model = Project + fields = ('id','created','updated','enacted','backend_status','deleted','name',) + + + + class SliceSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field() @@ -514,6 +521,23 @@ class SiteRoleIdSerializer(serializers.ModelSerializer): +class SliceCredentialSerializer(serializers.HyperlinkedModelSerializer): + id = serializers.Field() + + class Meta: + model = SliceCredential + fields = ('id','created','updated','enacted','backend_status','deleted','slice','name','key_id','enc_value',) + +class SliceCredentialIdSerializer(serializers.ModelSerializer): + id = serializers.Field() + + class Meta: + model = SliceCredential + fields = ('id','created','updated','enacted','backend_status','deleted','slice','name','key_id','enc_value',) + + + + class SliverSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field() @@ -527,7 +551,7 @@ class SliverSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Sliver - fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','userData','networks','networks',) + fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','flavor','userData','networks','networks',) class SliverIdSerializer(serializers.ModelSerializer): id = serializers.Field() @@ -542,7 +566,7 @@ class SliverIdSerializer(serializers.ModelSerializer): class Meta: model = Sliver - fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','userData','networks','networks',) + fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','flavor','userData','networks','networks',) @@ -694,9 +718,17 @@ class DeploymentSerializer(serializers.HyperlinkedModelSerializer): sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail') + + flavors = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='flavor-detail') + + + + flavors = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='flavor-detail') + + class Meta: model = Deployment - fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','accessControl','sites','sites',) + fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','backend_type','availability_zone','accessControl','sites','sites','flavors','flavors',) class DeploymentIdSerializer(serializers.ModelSerializer): id = serializers.Field() @@ -709,9 +741,17 @@ class DeploymentIdSerializer(serializers.ModelSerializer): sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail') + + flavors = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='flavor-detail') + + + + flavors = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='flavor-detail') + + class Meta: model = Deployment - fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','accessControl','sites','sites',) + fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','backend_type','availability_zone','accessControl','sites','sites','flavors','flavors',) @@ -835,19 +875,19 @@ class NetworkParameterTypeIdSerializer(serializers.ModelSerializer): -class SiteDeploymentsSerializer(serializers.HyperlinkedModelSerializer): +class SiteCredentialSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field() class Meta: - model = SiteDeployments - fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',) + model = SiteCredential + fields = ('id','created','updated','enacted','backend_status','deleted','site','name','key_id','enc_value',) -class SiteDeploymentsIdSerializer(serializers.ModelSerializer): +class SiteCredentialIdSerializer(serializers.ModelSerializer): id = serializers.Field() class Meta: - model = SiteDeployments - fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',) + model = SiteCredential + fields = ('id','created','updated','enacted','backend_status','deleted','site','name','key_id','enc_value',) @@ -886,19 +926,36 @@ class DeploymentRoleIdSerializer(serializers.ModelSerializer): -class ProjectSerializer(serializers.HyperlinkedModelSerializer): +class UserCredentialSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field() class Meta: - model = Project - fields = ('id','created','updated','enacted','backend_status','deleted','name',) + model = UserCredential + fields = ('id','created','updated','enacted','backend_status','deleted','user','name','key_id','enc_value',) -class ProjectIdSerializer(serializers.ModelSerializer): +class UserCredentialIdSerializer(serializers.ModelSerializer): id = serializers.Field() class Meta: - model = Project - fields = ('id','created','updated','enacted','backend_status','deleted','name',) + model = UserCredential + fields = ('id','created','updated','enacted','backend_status','deleted','user','name','key_id','enc_value',) + + + + +class SiteDeploymentsSerializer(serializers.HyperlinkedModelSerializer): + id = serializers.Field() + + class Meta: + model = SiteDeployments + fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',) + +class SiteDeploymentsIdSerializer(serializers.ModelSerializer): + id = serializers.Field() + + class Meta: + model = SiteDeployments + fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',) @@ -987,14 +1044,18 @@ serializerLookUp = { Invoice: InvoiceSerializer, - PlanetStackRole: PlanetStackRoleSerializer, - SlicePrivilege: SlicePrivilegeSerializer, + PlanetStackRole: PlanetStackRoleSerializer, + NetworkSliver: NetworkSliverSerializer, NetworkDeployments: NetworkDeploymentsSerializer, + Flavor: FlavorSerializer, + + Project: ProjectSerializer, + Slice: SliceSerializer, Network: NetworkSerializer, @@ -1013,6 +1074,8 @@ serializerLookUp = { SiteRole: SiteRoleSerializer, + SliceCredential: SliceCredentialSerializer, + Sliver: SliverSerializer, Node: NodeSerializer, @@ -1047,13 +1110,15 @@ serializerLookUp = { NetworkParameterType: NetworkParameterTypeSerializer, - SiteDeployments: SiteDeploymentsSerializer, + SiteCredential: SiteCredentialSerializer, DeploymentPrivilege: DeploymentPrivilegeSerializer, DeploymentRole: DeploymentRoleSerializer, - Project: ProjectSerializer, + UserCredential: UserCredentialSerializer, + + SiteDeployments: SiteDeploymentsSerializer, SliceTag: SliceTagSerializer, @@ -1066,6 +1131,51 @@ serializerLookUp = { None: None, } +class PlanetStackRetrieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView): + + # To handle fine-grained field permissions, we have to check can_update + # the object has been updated but before it has been saved. + + def update(self, request, *args, **kwargs): + partial = kwargs.pop('partial', False) + self.object = self.get_object_or_none() + + serializer = self.get_serializer(self.object, data=request.DATA, + files=request.FILES, partial=partial) + + if not serializer.is_valid(): + print "UpdateModelMixin: not serializer.is_valid" + print serializer.errors + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + try: + self.pre_save(serializer.object) + except ValidationError as err: + # full_clean on model instance may be called in pre_save, + # so we have to handle eventual errors. + return Response(err.message_dict, status=status.HTTP_400_BAD_REQUEST) + + if serializer.object is not None: + if not serializer.object.can_update(request.user): + return Response(status=status.HTTP_400_BAD_REQUEST) + + if self.object is None: + self.object = serializer.save(force_insert=True) + self.post_save(self.object, created=True) + return Response(serializer.data, status=status.HTTP_201_CREATED) + + self.object = serializer.save(force_update=True) + self.post_save(self.object, created=False) + return Response(serializer.data, status=status.HTTP_200_OK) + + def destroy(self, request, *args, **kwargs): + obj = self.get_object() + if obj.can_update(request.user): + return super(Detail, self).destroy(request, *args, **kwargs) + else: + return Response(status=status.HTTP_400_BAD_REQUEST) + + # Based on core/views/*.py @@ -1095,7 +1205,7 @@ class ServiceAttributeList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ServiceAttributeDetail(generics.RetrieveUpdateDestroyAPIView): +class ServiceAttributeDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = ServiceAttribute.objects.select_related().all() serializer_class = ServiceAttributeSerializer id_serializer_class = ServiceAttributeIdSerializer @@ -1110,20 +1220,9 @@ class ServiceAttributeDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return ServiceAttribute.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceAttributeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceAttributeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1153,7 +1252,7 @@ class ImageList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ImageDetail(generics.RetrieveUpdateDestroyAPIView): +class ImageDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Image.objects.select_related().all() serializer_class = ImageSerializer id_serializer_class = ImageIdSerializer @@ -1168,20 +1267,9 @@ class ImageDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Image.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ImageDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ImageDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1211,7 +1299,7 @@ class NetworkParameterList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NetworkParameterDetail(generics.RetrieveUpdateDestroyAPIView): +class NetworkParameterDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = NetworkParameter.objects.select_related().all() serializer_class = NetworkParameterSerializer id_serializer_class = NetworkParameterIdSerializer @@ -1226,20 +1314,9 @@ class NetworkParameterDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return NetworkParameter.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkParameterDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkParameterDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1269,7 +1346,7 @@ class SiteList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SiteDetail(generics.RetrieveUpdateDestroyAPIView): +class SiteDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Site.objects.select_related().all() serializer_class = SiteSerializer id_serializer_class = SiteIdSerializer @@ -1284,20 +1361,9 @@ class SiteDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Site.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SiteDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SiteDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1327,7 +1393,7 @@ class SliceRoleList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SliceRoleDetail(generics.RetrieveUpdateDestroyAPIView): +class SliceRoleDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = SliceRole.objects.select_related().all() serializer_class = SliceRoleSerializer id_serializer_class = SliceRoleIdSerializer @@ -1342,20 +1408,9 @@ class SliceRoleDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return SliceRole.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceRoleDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceRoleDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1364,7 +1419,7 @@ class TagList(generics.ListCreateAPIView): serializer_class = TagSerializer id_serializer_class = TagIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id','sites','slices','slivers','nodes',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -1385,7 +1440,7 @@ class TagList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class TagDetail(generics.RetrieveUpdateDestroyAPIView): +class TagDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Tag.objects.select_related().all() serializer_class = TagSerializer id_serializer_class = TagIdSerializer @@ -1400,20 +1455,9 @@ class TagDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Tag.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(TagDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(TagDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1443,7 +1487,7 @@ class InvoiceList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class InvoiceDetail(generics.RetrieveUpdateDestroyAPIView): +class InvoiceDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Invoice.objects.select_related().all() serializer_class = InvoiceSerializer id_serializer_class = InvoiceIdSerializer @@ -1458,20 +1502,56 @@ class InvoiceDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Invoice.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(InvoiceDetail, self).update(request, *args, **kwargs) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + + +class SlicePrivilegeList(generics.ListCreateAPIView): + queryset = SlicePrivilege.objects.select_related().all() + serializer_class = SlicePrivilegeSerializer + id_serializer_class = SlicePrivilegeIdSerializer + filter_backends = (filters.DjangoFilterBackend,) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',) + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class else: - return Response(status=status.HTTP_400_BAD_REQUEST) + return self.serializer_class - def destroy(self, request, *args, **kwargs): + def get_queryset(self): + return SlicePrivilege.select_by_user(self.request.user) + + def create(self, request, *args, **kwargs): + #obj = SlicePrivilege().update(request.DATA) obj = self.get_object() + obj.caller = request.user if obj.can_update(request.user): - return super(InvoiceDetail, self).destroy(request, *args, **kwargs) + return super(SlicePrivilegeList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) - + +class SlicePrivilegeDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = SlicePrivilege.objects.select_related().all() + serializer_class = SlicePrivilegeSerializer + id_serializer_class = SlicePrivilegeIdSerializer + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class + else: + return self.serializer_class + + def get_queryset(self): + return SlicePrivilege.select_by_user(self.request.user) + + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1501,7 +1581,7 @@ class PlanetStackRoleList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class PlanetStackRoleDetail(generics.RetrieveUpdateDestroyAPIView): +class PlanetStackRoleDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = PlanetStackRole.objects.select_related().all() serializer_class = PlanetStackRoleSerializer id_serializer_class = PlanetStackRoleIdSerializer @@ -1516,29 +1596,18 @@ class PlanetStackRoleDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return PlanetStackRole.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PlanetStackRoleDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PlanetStackRoleDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView -class SlicePrivilegeList(generics.ListCreateAPIView): - queryset = SlicePrivilege.objects.select_related().all() - serializer_class = SlicePrivilegeSerializer - id_serializer_class = SlicePrivilegeIdSerializer +class NetworkSliverList(generics.ListCreateAPIView): + queryset = NetworkSliver.objects.select_related().all() + serializer_class = NetworkSliverSerializer + id_serializer_class = NetworkSliverIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','sliver','ip','port_id',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -1548,21 +1617,21 @@ class SlicePrivilegeList(generics.ListCreateAPIView): return self.serializer_class def get_queryset(self): - return SlicePrivilege.select_by_user(self.request.user) + return NetworkSliver.select_by_user(self.request.user) def create(self, request, *args, **kwargs): - #obj = SlicePrivilege().update(request.DATA) + #obj = NetworkSliver().update(request.DATA) obj = self.get_object() obj.caller = request.user if obj.can_update(request.user): - return super(SlicePrivilegeList, self).create(request, *args, **kwargs) + return super(NetworkSliverList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SlicePrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): - queryset = SlicePrivilege.objects.select_related().all() - serializer_class = SlicePrivilegeSerializer - id_serializer_class = SlicePrivilegeIdSerializer +class NetworkSliverDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = NetworkSliver.objects.select_related().all() + serializer_class = NetworkSliverSerializer + id_serializer_class = NetworkSliverIdSerializer def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -1572,31 +1641,20 @@ class SlicePrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): return self.serializer_class def get_queryset(self): - return SlicePrivilege.select_by_user(self.request.user) + return NetworkSliver.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SlicePrivilegeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SlicePrivilegeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView -class NetworkSliverList(generics.ListCreateAPIView): - queryset = NetworkSliver.objects.select_related().all() - serializer_class = NetworkSliverSerializer - id_serializer_class = NetworkSliverIdSerializer +class NetworkDeploymentsList(generics.ListCreateAPIView): + queryset = NetworkDeployments.objects.select_related().all() + serializer_class = NetworkDeploymentsSerializer + id_serializer_class = NetworkDeploymentsIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','sliver','ip','port_id',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','deployment','net_id','router_id','subnet_id','subnet',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -1606,21 +1664,21 @@ class NetworkSliverList(generics.ListCreateAPIView): return self.serializer_class def get_queryset(self): - return NetworkSliver.select_by_user(self.request.user) + return NetworkDeployments.select_by_user(self.request.user) def create(self, request, *args, **kwargs): - #obj = NetworkSliver().update(request.DATA) + #obj = NetworkDeployments().update(request.DATA) obj = self.get_object() obj.caller = request.user if obj.can_update(request.user): - return super(NetworkSliverList, self).create(request, *args, **kwargs) + return super(NetworkDeploymentsList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NetworkSliverDetail(generics.RetrieveUpdateDestroyAPIView): - queryset = NetworkSliver.objects.select_related().all() - serializer_class = NetworkSliverSerializer - id_serializer_class = NetworkSliverIdSerializer +class NetworkDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = NetworkDeployments.objects.select_related().all() + serializer_class = NetworkDeploymentsSerializer + id_serializer_class = NetworkDeploymentsIdSerializer def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -1630,31 +1688,20 @@ class NetworkSliverDetail(generics.RetrieveUpdateDestroyAPIView): return self.serializer_class def get_queryset(self): - return NetworkSliver.select_by_user(self.request.user) + return NetworkDeployments.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkSliverDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkSliverDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView -class NetworkDeploymentsList(generics.ListCreateAPIView): - queryset = NetworkDeployments.objects.select_related().all() - serializer_class = NetworkDeploymentsSerializer - id_serializer_class = NetworkDeploymentsIdSerializer +class FlavorList(generics.ListCreateAPIView): + queryset = Flavor.objects.select_related().all() + serializer_class = FlavorSerializer + id_serializer_class = FlavorIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','deployment','net_id','router_id','subnet_id','subnet',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','description','flavor','order','default',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -1664,21 +1711,21 @@ class NetworkDeploymentsList(generics.ListCreateAPIView): return self.serializer_class def get_queryset(self): - return NetworkDeployments.select_by_user(self.request.user) + return Flavor.select_by_user(self.request.user) def create(self, request, *args, **kwargs): - #obj = NetworkDeployments().update(request.DATA) + #obj = Flavor().update(request.DATA) obj = self.get_object() obj.caller = request.user if obj.can_update(request.user): - return super(NetworkDeploymentsList, self).create(request, *args, **kwargs) + return super(FlavorList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NetworkDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): - queryset = NetworkDeployments.objects.select_related().all() - serializer_class = NetworkDeploymentsSerializer - id_serializer_class = NetworkDeploymentsIdSerializer +class FlavorDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = Flavor.objects.select_related().all() + serializer_class = FlavorSerializer + id_serializer_class = FlavorIdSerializer def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -1688,22 +1735,58 @@ class NetworkDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): return self.serializer_class def get_queryset(self): - return NetworkDeployments.select_by_user(self.request.user) + return Flavor.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkDeploymentsDetail, self).update(request, *args, **kwargs) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + + +class ProjectList(generics.ListCreateAPIView): + queryset = Project.objects.select_related().all() + serializer_class = ProjectSerializer + id_serializer_class = ProjectIdSerializer + filter_backends = (filters.DjangoFilterBackend,) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','name',) + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class else: - return Response(status=status.HTTP_400_BAD_REQUEST) + return self.serializer_class - def destroy(self, request, *args, **kwargs): + def get_queryset(self): + return Project.select_by_user(self.request.user) + + def create(self, request, *args, **kwargs): + #obj = Project().update(request.DATA) obj = self.get_object() + obj.caller = request.user if obj.can_update(request.user): - return super(NetworkDeploymentsDetail, self).destroy(request, *args, **kwargs) + return super(ProjectList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) - + +class ProjectDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = Project.objects.select_related().all() + serializer_class = ProjectSerializer + id_serializer_class = ProjectIdSerializer + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class + else: + return self.serializer_class + + def get_queryset(self): + return Project.select_by_user(self.request.user) + + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1733,7 +1816,7 @@ class SliceList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SliceDetail(generics.RetrieveUpdateDestroyAPIView): +class SliceDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Slice.objects.select_related().all() serializer_class = SliceSerializer id_serializer_class = SliceIdSerializer @@ -1748,20 +1831,9 @@ class SliceDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Slice.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1791,7 +1863,7 @@ class NetworkList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NetworkDetail(generics.RetrieveUpdateDestroyAPIView): +class NetworkDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Network.objects.select_related().all() serializer_class = NetworkSerializer id_serializer_class = NetworkIdSerializer @@ -1806,20 +1878,9 @@ class NetworkDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Network.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1849,7 +1910,7 @@ class ServiceList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ServiceDetail(generics.RetrieveUpdateDestroyAPIView): +class ServiceDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Service.objects.select_related().all() serializer_class = ServiceSerializer id_serializer_class = ServiceIdSerializer @@ -1864,20 +1925,9 @@ class ServiceDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Service.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1907,7 +1957,7 @@ class ServiceClassList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ServiceClassDetail(generics.RetrieveUpdateDestroyAPIView): +class ServiceClassDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = ServiceClass.objects.select_related().all() serializer_class = ServiceClassSerializer id_serializer_class = ServiceClassIdSerializer @@ -1922,20 +1972,9 @@ class ServiceClassDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return ServiceClass.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceClassDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceClassDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -1965,7 +2004,7 @@ class PaymentList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class PaymentDetail(generics.RetrieveUpdateDestroyAPIView): +class PaymentDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Payment.objects.select_related().all() serializer_class = PaymentSerializer id_serializer_class = PaymentIdSerializer @@ -1980,20 +2019,9 @@ class PaymentDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Payment.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PaymentDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PaymentDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2023,7 +2051,7 @@ class ChargeList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ChargeDetail(generics.RetrieveUpdateDestroyAPIView): +class ChargeDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Charge.objects.select_related().all() serializer_class = ChargeSerializer id_serializer_class = ChargeIdSerializer @@ -2038,20 +2066,9 @@ class ChargeDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Charge.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ChargeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ChargeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2081,7 +2098,7 @@ class RoleList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class RoleDetail(generics.RetrieveUpdateDestroyAPIView): +class RoleDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Role.objects.select_related().all() serializer_class = RoleSerializer id_serializer_class = RoleIdSerializer @@ -2096,20 +2113,9 @@ class RoleDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Role.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(RoleDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(RoleDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2139,7 +2145,7 @@ class UsableObjectList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class UsableObjectDetail(generics.RetrieveUpdateDestroyAPIView): +class UsableObjectDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = UsableObject.objects.select_related().all() serializer_class = UsableObjectSerializer id_serializer_class = UsableObjectIdSerializer @@ -2154,20 +2160,9 @@ class UsableObjectDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return UsableObject.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UsableObjectDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UsableObjectDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2197,7 +2192,7 @@ class SiteRoleList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SiteRoleDetail(generics.RetrieveUpdateDestroyAPIView): +class SiteRoleDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = SiteRole.objects.select_related().all() serializer_class = SiteRoleSerializer id_serializer_class = SiteRoleIdSerializer @@ -2212,20 +2207,56 @@ class SiteRoleDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return SiteRole.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SiteRoleDetail, self).update(request, *args, **kwargs) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + + +class SliceCredentialList(generics.ListCreateAPIView): + queryset = SliceCredential.objects.select_related().all() + serializer_class = SliceCredentialSerializer + id_serializer_class = SliceCredentialIdSerializer + filter_backends = (filters.DjangoFilterBackend,) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','slice','name','key_id','enc_value',) + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class else: - return Response(status=status.HTTP_400_BAD_REQUEST) + return self.serializer_class - def destroy(self, request, *args, **kwargs): + def get_queryset(self): + return SliceCredential.select_by_user(self.request.user) + + def create(self, request, *args, **kwargs): + #obj = SliceCredential().update(request.DATA) obj = self.get_object() + obj.caller = request.user if obj.can_update(request.user): - return super(SiteRoleDetail, self).destroy(request, *args, **kwargs) + return super(SliceCredentialList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) - + +class SliceCredentialDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = SliceCredential.objects.select_related().all() + serializer_class = SliceCredentialSerializer + id_serializer_class = SliceCredentialIdSerializer + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class + else: + return self.serializer_class + + def get_queryset(self): + return SliceCredential.select_by_user(self.request.user) + + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2234,7 +2265,7 @@ class SliverList(generics.ListCreateAPIView): serializer_class = SliverSerializer id_serializer_class = SliverIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','userData','networks','networks',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','flavor','userData','networks','networks',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -2255,7 +2286,7 @@ class SliverList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SliverDetail(generics.RetrieveUpdateDestroyAPIView): +class SliverDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Sliver.objects.select_related().all() serializer_class = SliverSerializer id_serializer_class = SliverIdSerializer @@ -2270,20 +2301,9 @@ class SliverDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Sliver.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliverDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliverDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2313,7 +2333,7 @@ class NodeList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NodeDetail(generics.RetrieveUpdateDestroyAPIView): +class NodeDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Node.objects.select_related().all() serializer_class = NodeSerializer id_serializer_class = NodeIdSerializer @@ -2328,20 +2348,9 @@ class NodeDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Node.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NodeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NodeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2371,7 +2380,7 @@ class DashboardViewList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class DashboardViewDetail(generics.RetrieveUpdateDestroyAPIView): +class DashboardViewDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = DashboardView.objects.select_related().all() serializer_class = DashboardViewSerializer id_serializer_class = DashboardViewIdSerializer @@ -2386,20 +2395,9 @@ class DashboardViewDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return DashboardView.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DashboardViewDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DashboardViewDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2429,7 +2427,7 @@ class ImageDeploymentsList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ImageDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): +class ImageDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = ImageDeployments.objects.select_related().all() serializer_class = ImageDeploymentsSerializer id_serializer_class = ImageDeploymentsIdSerializer @@ -2444,20 +2442,9 @@ class ImageDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return ImageDeployments.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ImageDeploymentsDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ImageDeploymentsDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2487,7 +2474,7 @@ class ReservedResourceList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ReservedResourceDetail(generics.RetrieveUpdateDestroyAPIView): +class ReservedResourceDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = ReservedResource.objects.select_related().all() serializer_class = ReservedResourceSerializer id_serializer_class = ReservedResourceIdSerializer @@ -2502,20 +2489,9 @@ class ReservedResourceDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return ReservedResource.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ReservedResourceDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ReservedResourceDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2545,7 +2521,7 @@ class NetworkSliceList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NetworkSliceDetail(generics.RetrieveUpdateDestroyAPIView): +class NetworkSliceDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = NetworkSlice.objects.select_related().all() serializer_class = NetworkSliceSerializer id_serializer_class = NetworkSliceIdSerializer @@ -2560,20 +2536,9 @@ class NetworkSliceDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return NetworkSlice.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkSliceDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkSliceDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2603,7 +2568,7 @@ class UserDashboardViewList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class UserDashboardViewDetail(generics.RetrieveUpdateDestroyAPIView): +class UserDashboardViewDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = UserDashboardView.objects.select_related().all() serializer_class = UserDashboardViewSerializer id_serializer_class = UserDashboardViewIdSerializer @@ -2618,20 +2583,9 @@ class UserDashboardViewDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return UserDashboardView.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UserDashboardViewDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UserDashboardViewDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2661,7 +2615,7 @@ class PlanetStackPrivilegeList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class PlanetStackPrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): +class PlanetStackPrivilegeDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = PlanetStackPrivilege.objects.select_related().all() serializer_class = PlanetStackPrivilegeSerializer id_serializer_class = PlanetStackPrivilegeIdSerializer @@ -2676,20 +2630,9 @@ class PlanetStackPrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return PlanetStackPrivilege.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PlanetStackPrivilegeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PlanetStackPrivilegeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2719,7 +2662,7 @@ class UserList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class UserDetail(generics.RetrieveUpdateDestroyAPIView): +class UserDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = User.objects.select_related().all() serializer_class = UserSerializer id_serializer_class = UserIdSerializer @@ -2734,20 +2677,9 @@ class UserDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return User.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UserDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UserDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2756,7 +2688,7 @@ class DeploymentList(generics.ListCreateAPIView): serializer_class = DeploymentSerializer id_serializer_class = DeploymentIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','accessControl','sites','sites',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','backend_type','availability_zone','accessControl','sites','sites','flavors','flavors',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -2777,7 +2709,7 @@ class DeploymentList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class DeploymentDetail(generics.RetrieveUpdateDestroyAPIView): +class DeploymentDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Deployment.objects.select_related().all() serializer_class = DeploymentSerializer id_serializer_class = DeploymentIdSerializer @@ -2792,20 +2724,9 @@ class DeploymentDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Deployment.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DeploymentDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DeploymentDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2835,7 +2756,7 @@ class ReservationList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ReservationDetail(generics.RetrieveUpdateDestroyAPIView): +class ReservationDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Reservation.objects.select_related().all() serializer_class = ReservationSerializer id_serializer_class = ReservationIdSerializer @@ -2850,20 +2771,9 @@ class ReservationDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Reservation.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ReservationDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ReservationDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2893,7 +2803,7 @@ class SliceDeploymentsList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SliceDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): +class SliceDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = SliceDeployments.objects.select_related().all() serializer_class = SliceDeploymentsSerializer id_serializer_class = SliceDeploymentsIdSerializer @@ -2908,20 +2818,9 @@ class SliceDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return SliceDeployments.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceDeploymentsDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceDeploymentsDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -2951,7 +2850,7 @@ class SitePrivilegeList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SitePrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): +class SitePrivilegeDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = SitePrivilege.objects.select_related().all() serializer_class = SitePrivilegeSerializer id_serializer_class = SitePrivilegeIdSerializer @@ -2966,20 +2865,9 @@ class SitePrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return SitePrivilege.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SitePrivilegeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SitePrivilegeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3009,7 +2897,7 @@ class PlanetStackList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class PlanetStackDetail(generics.RetrieveUpdateDestroyAPIView): +class PlanetStackDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = PlanetStack.objects.select_related().all() serializer_class = PlanetStackSerializer id_serializer_class = PlanetStackIdSerializer @@ -3024,20 +2912,9 @@ class PlanetStackDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return PlanetStack.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PlanetStackDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(PlanetStackDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3067,7 +2944,7 @@ class UserDeploymentsList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class UserDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): +class UserDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = UserDeployments.objects.select_related().all() serializer_class = UserDeploymentsSerializer id_serializer_class = UserDeploymentsIdSerializer @@ -3082,20 +2959,9 @@ class UserDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return UserDeployments.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UserDeploymentsDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(UserDeploymentsDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3125,7 +2991,7 @@ class AccountList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class AccountDetail(generics.RetrieveUpdateDestroyAPIView): +class AccountDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Account.objects.select_related().all() serializer_class = AccountSerializer id_serializer_class = AccountIdSerializer @@ -3140,20 +3006,9 @@ class AccountDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Account.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(AccountDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(AccountDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3183,7 +3038,7 @@ class NetworkParameterTypeList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NetworkParameterTypeDetail(generics.RetrieveUpdateDestroyAPIView): +class NetworkParameterTypeDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = NetworkParameterType.objects.select_related().all() serializer_class = NetworkParameterTypeSerializer id_serializer_class = NetworkParameterTypeIdSerializer @@ -3198,29 +3053,18 @@ class NetworkParameterTypeDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return NetworkParameterType.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkParameterTypeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkParameterTypeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView -class SiteDeploymentsList(generics.ListCreateAPIView): - queryset = SiteDeployments.objects.select_related().all() - serializer_class = SiteDeploymentsSerializer - id_serializer_class = SiteDeploymentsIdSerializer +class SiteCredentialList(generics.ListCreateAPIView): + queryset = SiteCredential.objects.select_related().all() + serializer_class = SiteCredentialSerializer + id_serializer_class = SiteCredentialIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','site','name','key_id','enc_value',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -3230,21 +3074,21 @@ class SiteDeploymentsList(generics.ListCreateAPIView): return self.serializer_class def get_queryset(self): - return SiteDeployments.select_by_user(self.request.user) + return SiteCredential.select_by_user(self.request.user) def create(self, request, *args, **kwargs): - #obj = SiteDeployments().update(request.DATA) + #obj = SiteCredential().update(request.DATA) obj = self.get_object() obj.caller = request.user if obj.can_update(request.user): - return super(SiteDeploymentsList, self).create(request, *args, **kwargs) + return super(SiteCredentialList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SiteDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): - queryset = SiteDeployments.objects.select_related().all() - serializer_class = SiteDeploymentsSerializer - id_serializer_class = SiteDeploymentsIdSerializer +class SiteCredentialDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = SiteCredential.objects.select_related().all() + serializer_class = SiteCredentialSerializer + id_serializer_class = SiteCredentialIdSerializer def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -3254,22 +3098,11 @@ class SiteDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView): return self.serializer_class def get_queryset(self): - return SiteDeployments.select_by_user(self.request.user) + return SiteCredential.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SiteDeploymentsDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SiteDeploymentsDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3299,7 +3132,7 @@ class DeploymentPrivilegeList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class DeploymentPrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): +class DeploymentPrivilegeDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = DeploymentPrivilege.objects.select_related().all() serializer_class = DeploymentPrivilegeSerializer id_serializer_class = DeploymentPrivilegeIdSerializer @@ -3314,20 +3147,9 @@ class DeploymentPrivilegeDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return DeploymentPrivilege.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DeploymentPrivilegeDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DeploymentPrivilegeDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3357,7 +3179,7 @@ class DeploymentRoleList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class DeploymentRoleDetail(generics.RetrieveUpdateDestroyAPIView): +class DeploymentRoleDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = DeploymentRole.objects.select_related().all() serializer_class = DeploymentRoleSerializer id_serializer_class = DeploymentRoleIdSerializer @@ -3372,29 +3194,18 @@ class DeploymentRoleDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return DeploymentRole.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DeploymentRoleDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(DeploymentRoleDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView -class ProjectList(generics.ListCreateAPIView): - queryset = Project.objects.select_related().all() - serializer_class = ProjectSerializer - id_serializer_class = ProjectIdSerializer +class UserCredentialList(generics.ListCreateAPIView): + queryset = UserCredential.objects.select_related().all() + serializer_class = UserCredentialSerializer + id_serializer_class = UserCredentialIdSerializer filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('id','created','updated','enacted','backend_status','deleted','name',) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','name','key_id','enc_value',) def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -3404,21 +3215,21 @@ class ProjectList(generics.ListCreateAPIView): return self.serializer_class def get_queryset(self): - return Project.select_by_user(self.request.user) + return UserCredential.select_by_user(self.request.user) def create(self, request, *args, **kwargs): - #obj = Project().update(request.DATA) + #obj = UserCredential().update(request.DATA) obj = self.get_object() obj.caller = request.user if obj.can_update(request.user): - return super(ProjectList, self).create(request, *args, **kwargs) + return super(UserCredentialList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ProjectDetail(generics.RetrieveUpdateDestroyAPIView): - queryset = Project.objects.select_related().all() - serializer_class = ProjectSerializer - id_serializer_class = ProjectIdSerializer +class UserCredentialDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = UserCredential.objects.select_related().all() + serializer_class = UserCredentialSerializer + id_serializer_class = UserCredentialIdSerializer def get_serializer_class(self): no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) @@ -3428,22 +3239,58 @@ class ProjectDetail(generics.RetrieveUpdateDestroyAPIView): return self.serializer_class def get_queryset(self): - return Project.select_by_user(self.request.user) + return UserCredential.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ProjectDetail, self).update(request, *args, **kwargs) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + + +class SiteDeploymentsList(generics.ListCreateAPIView): + queryset = SiteDeployments.objects.select_related().all() + serializer_class = SiteDeploymentsSerializer + id_serializer_class = SiteDeploymentsIdSerializer + filter_backends = (filters.DjangoFilterBackend,) + filter_fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',) + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class else: - return Response(status=status.HTTP_400_BAD_REQUEST) + return self.serializer_class - def destroy(self, request, *args, **kwargs): + def get_queryset(self): + return SiteDeployments.select_by_user(self.request.user) + + def create(self, request, *args, **kwargs): + #obj = SiteDeployments().update(request.DATA) obj = self.get_object() + obj.caller = request.user if obj.can_update(request.user): - return super(ProjectDetail, self).destroy(request, *args, **kwargs) + return super(SiteDeploymentsList, self).create(request, *args, **kwargs) else: return Response(status=status.HTTP_400_BAD_REQUEST) - + +class SiteDeploymentsDetail(PlanetStackRetrieveUpdateDestroyAPIView): + queryset = SiteDeployments.objects.select_related().all() + serializer_class = SiteDeploymentsSerializer + id_serializer_class = SiteDeploymentsIdSerializer + + def get_serializer_class(self): + no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False) + if (no_hyperlinks): + return self.id_serializer_class + else: + return self.serializer_class + + def get_queryset(self): + return SiteDeployments.select_by_user(self.request.user) + + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView + + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3473,7 +3320,7 @@ class SliceTagList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class SliceTagDetail(generics.RetrieveUpdateDestroyAPIView): +class SliceTagDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = SliceTag.objects.select_related().all() serializer_class = SliceTagSerializer id_serializer_class = SliceTagIdSerializer @@ -3488,20 +3335,9 @@ class SliceTagDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return SliceTag.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceTagDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(SliceTagDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3531,7 +3367,7 @@ class NetworkTemplateList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class NetworkTemplateDetail(generics.RetrieveUpdateDestroyAPIView): +class NetworkTemplateDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = NetworkTemplate.objects.select_related().all() serializer_class = NetworkTemplateSerializer id_serializer_class = NetworkTemplateIdSerializer @@ -3546,20 +3382,9 @@ class NetworkTemplateDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return NetworkTemplate.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkTemplateDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(NetworkTemplateDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3589,7 +3414,7 @@ class RouterList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class RouterDetail(generics.RetrieveUpdateDestroyAPIView): +class RouterDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = Router.objects.select_related().all() serializer_class = RouterSerializer id_serializer_class = RouterIdSerializer @@ -3604,20 +3429,9 @@ class RouterDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return Router.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(RouterDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(RouterDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView @@ -3647,7 +3461,7 @@ class ServiceResourceList(generics.ListCreateAPIView): else: return Response(status=status.HTTP_400_BAD_REQUEST) -class ServiceResourceDetail(generics.RetrieveUpdateDestroyAPIView): +class ServiceResourceDetail(PlanetStackRetrieveUpdateDestroyAPIView): queryset = ServiceResource.objects.select_related().all() serializer_class = ServiceResourceSerializer id_serializer_class = ServiceResourceIdSerializer @@ -3662,20 +3476,9 @@ class ServiceResourceDetail(generics.RetrieveUpdateDestroyAPIView): def get_queryset(self): return ServiceResource.select_by_user(self.request.user) - def update(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceResourceDetail, self).update(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) + # update() is handled by PlanetStackRetrieveUpdateDestroyAPIView - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - if obj.can_update(request.user): - return super(ServiceResourceDetail, self).destroy(request, *args, **kwargs) - else: - return Response(status=status.HTTP_400_BAD_REQUEST) - + # destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView -- 2.43.0