예제 #1
0
    def list(self, request, *args, **kwargs):
        self.object_list = self.filter_queryset(self.get_queryset())

        headers = get_openrosa_headers(request, location=False)
        serializer = self.get_serializer(self.object_list, many=True)
        if request.method in ['HEAD']:
            return Response('', headers=headers, status=204)

        return Response(serializer.data, headers=headers)
예제 #2
0
    def manifest(self, request, *args, **kwargs):
        self.object = self.get_object()
        object_list = MetaData.objects.filter(data_type='media',
                                              object_id=self.object.id)
        context = self.get_serializer_context()
        serializer = XFormManifestSerializer(object_list, many=True,
                                             context=context)

        return Response(serializer.data,
                        headers=get_openrosa_headers(request, location=False))
예제 #3
0
    def list(self, request, *args, **kwargs):
        self.object_list = self.filter_queryset(self.get_queryset())

        data = {'instances': self.object_list,
                'resumptionCursor': self.resumptionCursor}

        return Response(data,
                        headers=get_openrosa_headers(request,
                                                     location=False),
                        template_name='submissionList.xml')
예제 #4
0
    def manifest(self, request, *args, **kwargs):
        self.object = self.get_object()
        object_list = MetaData.objects.filter(data_type='media',
                                              object_id=self.object.pk)
        context = self.get_serializer_context()
        context[GROUP_DELIMETER_TAG] = ExportBuilder.GROUP_DELIMITER_DOT
        context[REPEAT_INDEX_TAGS] = '_,_'
        serializer = XFormManifestSerializer(object_list, many=True,
                                             context=context)

        return Response(serializer.data,
                        headers=get_openrosa_headers(request, location=False))
예제 #5
0
    def create(self, request, *args, **kwargs):
        if request.method.upper() == 'HEAD':
            return Response(status=status.HTTP_204_NO_CONTENT,
                            headers=get_openrosa_headers(request),
                            template_name=self.template_name)

        xform_def = request.FILES.get('form_def_file', None)
        response_status = status.HTTP_201_CREATED
        username = kwargs.get('username')
        form_user = (username and get_object_or_404(User, username=username)) \
            or request.user

        if not request.user.has_perm('can_add_xform', form_user.profile):
            raise exceptions.PermissionDenied(
                detail=_(u"User %(user)s has no permission to add xforms to "
                         "account %(account)s" % {
                             'user': request.user.username,
                             'account': form_user.username
                         }))
        data = {}

        if isinstance(xform_def, File):
            do_form_upload = PublishXForm(xform_def, form_user)
            dd = publish_form(do_form_upload.publish_xform)

            if isinstance(dd, XForm):
                data['message'] = _(u"%s successfully published." %
                                    dd.id_string)
            else:
                data['message'] = dd['text']
                response_status = status.HTTP_400_BAD_REQUEST
        else:
            data['message'] = _(u"Missing xml file.")
            response_status = status.HTTP_400_BAD_REQUEST

        return Response(data,
                        status=response_status,
                        headers=get_openrosa_headers(request, location=False),
                        template_name=self.template_name)
예제 #6
0
    def retrieve(self, request, *args, **kwargs):
        self.object = self.get_object()

        xml_obj = clean_and_parse_xml(self.object.xml)
        submission_xml_root_node = xml_obj.documentElement
        submission_xml_root_node.setAttribute('instanceID',
                                              u'uuid:%s' % self.object.uuid)
        submission_xml_root_node.setAttribute(
            'submissionDate', self.object.date_created.isoformat())
        data = {
            'submission_data':
            submission_xml_root_node.toxml(),
            'media_files':
            Attachment.objects.filter(instance=self.object),
            'host':
            request.build_absolute_uri().replace(request.get_full_path(), '')
        }

        return Response(data,
                        headers=get_openrosa_headers(request, location=False),
                        template_name='downloadSubmission.xml')
예제 #7
0
    def retrieve(self, request, *args, **kwargs):
        self.object = self.get_object()

        return Response(self.object.xml,
                        headers=get_openrosa_headers(request, location=False))