Example #1
0
    def create(self, request, *args, **kwargs):
        if request.method.upper() == 'HEAD':
            return Response(
                headers=self.get_openrosa_headers(request),
                status=status.HTTP_204_NO_CONTENT,
            )
        try:
            instance = ModelHelper().upload_submission_data(request)
        except InvalidXMLSubmission as e:
            logger.debug(str(e))
            return self._sendErrorResponse(request, e)

        serializer = XFormSubmissionSerializer(instance)

        json = JSONRenderer().render(serializer.data)
        stream = BytesIO(json)
        data = JSONParser().parse(stream)

        serializer = XFormSubmissionSerializer(data=data)
        # Every possible error that would make the serializer not valid
        # has already been checked for, so no failsafe is necessary.
        if serializer.is_valid():
            data = serializer.save()
            return Response(headers=self.get_openrosa_headers(request),
                            status=status.HTTP_201_CREATED,
                            content_type='application/xml')
Example #2
0
    def create(self, request, *args, **kwargs):
        if request.method.upper() == 'HEAD':
            return Response(headers=self.get_openrosa_headers(request),
                            status=status.HTTP_204_NO_CONTENT,)
        try:
            instance = ModelHelper().upload_submission_data(request)
        except InvalidXMLSubmission as e:
            logger.debug(str(e))
            return self._sendErrorResponse(request, e,
                                           status.HTTP_400_BAD_REQUEST)
        except PermissionDenied as e:
            return self._sendErrorResponse(request, e,
                                           status.HTTP_403_FORBIDDEN)

        # If an already existing XFormSummission is sent back
        # don't create another.
        if type(instance) == XFormSubmission:
            return Response(
                headers=self.get_openrosa_headers(request),
                status=status.HTTP_201_CREATED,
                content_type=self.DEFAULT_CONTENT_TYPE
            )

        instance, parties, locations, tenure_relationships = instance
        serializer = XFormSubmissionSerializer(instance)

        json = JSONRenderer().render(serializer.data)
        stream = BytesIO(json)
        data = JSONParser().parse(stream)
        serializer = XFormSubmissionSerializer(data=data)

        # Every possible error that would make the serializer not valid
        # has already been checked for, so no failsafe is necessary.
        if serializer.is_valid():
            data = serializer.save()
            data.parties.add(*parties)
            data.spatial_units.add(*locations)
            data.tenure_relationships.add(*tenure_relationships)
            success_msg = _("Form was Successfully Received")
            return self._formatMessageResponse(
                request,
                success_msg,
                status.HTTP_201_CREATED
            )