コード例 #1
0
ファイル: views.py プロジェクト: OckiFals/cloud-platform
 def get(self, request, pk):
     if not is_objectid_valid(pk):
         return Response({'detail': '%s is not valid ObjectId.' % pk},
                         status=status.HTTP_400_BAD_REQUEST)
     user = self.get_user(pk)
     serializer = UserSerializer(user, context={'request': request})
     return Response(serializer.data)
コード例 #2
0
ファイル: views.py プロジェクト: OckiFals/cloud-platform
 def delete(self, request, pk):
     if not is_objectid_valid(pk):
         return Response({'detail': '%s is not valid ObjectId.' % pk},
                         status=status.HTTP_400_BAD_REQUEST)
     user = self.get_user(pk)
     # super admin can not be deleted
     if "webmaster" == user.username:
         return Response({'detail': 'Super admin can not be deleted.'},
                         status=status.HTTP_403_FORBIDDEN)
     user.delete()
     return Response(status=status.HTTP_204_NO_CONTENT)
コード例 #3
0
 def get(self, request, pk, format=None):
     if not is_objectid_valid(pk):
         return Response({'detail': '%s is not valid ObjectId.' % pk},
                         status=status.HTTP_400_BAD_REQUEST)
     supernode = self.get_object(pk)
     if request.user != supernode.user:
         return Response({'detail': 'Not found.'},
                         status=status.HTTP_404_NOT_FOUND)
     serializer = SuperNodesSerializer(supernode,
                                       context={'request': request})
     return Response(serializer.data)
コード例 #4
0
 def delete(self, request, pk, format=None):
     if not is_objectid_valid(pk):
         return Response({'detail': '%s is not valid ObjectId.' % pk},
                         status=status.HTTP_400_BAD_REQUEST)
     supernode = self.get_object(pk)
     if request.user != supernode.user:
         return Response(
             {'detail': 'You can not delete another person supernode.'},
             status=status.HTTP_403_FORBIDDEN)
     supernode.delete()
     return Response(status=status.HTTP_204_NO_CONTENT)
コード例 #5
0
    def get(self, request, pk, sensorid):
        if not is_objectid_valid(pk):
            return Response({
                'detail': '%s is not valid ObjectId.' % pk
            }, status=status.HTTP_400_BAD_REQUEST)
        data = self.get_node(pk, sensorid)
        # no access to another user private node
        if request.user != data.get('node').user and 0 == data.get('node').is_public:
            return Response({
                'detail': 'Not found.'
            }, status=status.HTTP_404_NOT_FOUND)

        serializer = NodeSensorSerializer(data.get('sensor'), context={'request': request, 'nodeid': pk})
        return Response(serializer.data)
コード例 #6
0
    def delete(self, request, pk, sensorid):
        if not is_objectid_valid(pk):
            return Response({
                'detail': '%s is not valid ObjectId.' % pk
            }, status=status.HTTP_400_BAD_REQUEST)
        # check that nodeid and sensorid is valid
        data = self.get_supernode(pk, sensorid)
        # no access to delete another user sensor node
        if request.user != data.get('supernode').user:
            return Response({
                'detail': 'You can not delete another person node.'
            }, status=status.HTTP_403_FORBIDDEN)

        Supernodes.objects(pk=pk).update_one(pull__sensors__id=sensorid)
        # delete referer subscription
        Sensordatas.objects(sensor=sensorid).delete()
        return Response(status=status.HTTP_204_NO_CONTENT)
コード例 #7
0
ファイル: views.py プロジェクト: OckiFals/cloud-platform
 def put(self, request, pk):
     if not is_objectid_valid(pk):
         return Response({'detail': '%s is not valid ObjectId.' % pk},
                         status=status.HTTP_400_BAD_REQUEST)
     user = self.get_user(pk)
     # ensure that super admin only edited by him/his self
     if "webmaster" == user.username:
         return Response(
             {'detail': 'You can not update super admin user data.'},
             status=status.HTTP_403_FORBIDDEN)
     serializer = UserSerializer(user,
                                 data=request.data,
                                 context={'request': request},
                                 partial=True)
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data, status=status.HTTP_200_OK)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
コード例 #8
0
    def get(self, request, *args, **kwargs):
        # check if request came from supernodes urls
        if is_url_regex_match(r'^/supernodes/(?P<pk>\w+)/nodes/', request.get_full_path()):
            if not is_objectid_valid(kwargs.get('pk')):
                return Response({
                    'detail': '%s is not valid ObjectId.' % kwargs.get('pk')
                }, status=status.HTTP_400_BAD_REQUEST)
            queryset = self.filter_queryset(
                self.get_nodes(request.user, kwargs.get('pk'), request.GET.get('role'))
            )
        else:
            queryset = self.filter_queryset(self.get_nodes(user=request.user, role=request.GET.get('role')))
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = NodeSerializer(page, many=True, context={'request': request})
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
コード例 #9
0
    def put(self, request, pk, sensorid):
        # check that label field was defined in the post header
        if 'label' not in request.data:
            return Response({'label': 'This field is required.'}, status=status.HTTP_400_BAD_REQUEST)
        if not is_objectid_valid(pk):
            return Response({
                'detail': '%s is not valid ObjectId.' % pk
            }, status=status.HTTP_400_BAD_REQUEST)

        """
        Manual validation
        cause any selializer cannot handle EmbededDocummentList update
        """
        data = self.get_supernode(pk, sensorid)
        supernode = data.get('supernode')
        serializer = SupernodeSensorSerializer(data=request.data, context={
            'request': request, 'supernodeid': pk, 'isupdate': True
        }, partial=True)

        if serializer.is_valid():
            tmp_sensors = data.get('supernode').sensors
            self_sensor = Sensors()

            # check that the new value is unique to other
            for index, sensor in enumerate(supernode.sensors):
                if str(sensor.id) == sensorid:
                    tmp_sensors[index].label = request.data.get('label')
                    self_sensor = tmp_sensors[index]
                    continue

                if sensor.label == request.data.get('label'):
                    return Response({'label': 'This field must be unique.'}, status=status.HTTP_400_BAD_REQUEST)

            supernode.sensors = tmp_sensors
            supernode.save()
            return Response(
                SupernodeSensorSerializer(
                    self_sensor, context={'request': request, 'supernodeid': pk}
                ).data, status=status.HTTP_200_OK
            )
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
コード例 #10
0
 def put(self, request, pk, format=None):
     if not is_objectid_valid(pk):
         return Response({'detail': '%s is not valid ObjectId.' % pk},
                         status=status.HTTP_400_BAD_REQUEST)
     supernode = self.get_object(pk)
     if request.user != supernode.user:
         return Response(
             {'detail': 'You can not update another person supernode.'},
             status=status.HTTP_403_FORBIDDEN)
     # SlugRelatedField, avoid 'query does not matching' exception on non valid data payload
     if request.data.get('user'):
         request.data.pop('user')
     serializer = SuperNodesSerializer(supernode,
                                       data=request.data,
                                       context={'request': request},
                                       partial=True)
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data, status=status.HTTP_200_OK)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
コード例 #11
0
    def validate(self, attrs):
        super(SensordataFormatSerializer, self).validate(attrs=attrs)
        supernode = self.context.get('request').user
        node = Nodes()
        errors = OrderedDict()
        # node sensors
        nodeiderror = []
        nodeformaterror = []
        nodesensorerror = []

        '''
        validate format from sensors[i]
        publish sensordata captured from supernode sensors
        '''
        sensorerror = self.supernode_sensors_validate(supernode, attrs.get('sensors'))

        '''validate format from nodes[i]'''
        for index, nodes in enumerate(attrs.get('nodes')):
            if not nodes.get('id'):
                nodeiderror.append(
                    "node[%d].id: This field may not be null." % index
                )
            else:
                if not is_objectid_valid(nodes.get('id')):
                    nodeiderror.append(
                        "node[%d].id: %s is not valid ObjectId." % (index, nodes.get('id'))
                    )
                    continue
                else:
                    node = self.get_node(supernode.id, nodes.get('id'))
                    if not node:
                        nodeiderror.append(
                            "node[%d].id: Object with label=%s does not exist.." % (index, nodes.get('id'))
                        )
                        continue

            if not nodes.get('format'):
                nodeformaterror.append(
                    "node[%d].format: This field may not be null." % index
                )
            else:
                if not isinstance(nodes.get('format'), list):
                    nodeformaterror.append(
                        "node[%d].format: Expected a list." % index
                    )
                else:
                    if 2 != len(nodes.get('format')) or \
                            ('data' != nodes.get('format')[0] or 'timestamp' != nodes.get('format')[1]):
                        nodeformaterror.append(
                            "node[%d].format: Expected format ['data', 'timestamp']." % index
                        )

            if not nodes.get('sensors'):
                nodesensorerror.append(
                    "node[%d].sensors: This field may not be null." % index
                )
            else:
                if not isinstance(nodes.get('sensors'), list):
                    nodesensorerror.append(
                        "node[%d].sensors: Expected a list." % index
                    )
                else:
                    _sensorerror = self.nodes_sensors_validate(index, node, nodes.get('sensors'))
                    if _sensorerror:
                        nodesensorerror.append(_sensorerror)
        else:
            if sensorerror:
                errors['supernode'] = {'sensors': sensorerror}
            if nodeiderror:
                errors['node'] = {'id': nodeiderror}
            if nodeformaterror:
                errors['node'] = {'format': nodeformaterror}
            if nodesensorerror:
                errors['node'] = {'sensors': nodesensorerror}

        if errors:
            raise serializers.ValidationError(errors)
        return attrs