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')
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 )