Exemple #1
0
    def list(self, request, owner=None, formid=None, **kwargs):
        if owner is None and not request.user.is_anonymous():
            owner = request.user.username

        data = []

        if formid:
            try:
                formid = int(formid)
            except ValueError:
                xform = check_and_set_form_by_id_string(formid, request)
            else:
                xform = check_and_set_form_by_id(int(formid), request)
            if not xform:
                raise exceptions.PermissionDenied(
                    _("You do not have permission to "
                      "view data from this form."))
            else:
                field = '_submission_time'
                name = 'date_of_submission'
                group = request.QUERY_PARAMS.get('group', None)
                alt_name = request.QUERY_PARAMS.get('name', None)
                if group:
                    name = field = group
                if alt_name:
                    name = alt_name
                try:
                    data = utils.get_form_submissions_grouped_by_field(
                        xform, field, name)
                except ValueError as e:
                    raise exceptions.ParseError(detail=e.message)
        else:
            data = self._get_formlist_data_points(request, owner)

        return Response(data)
Exemple #2
0
 def list(self, request, owner=None, formid=None, dataid=None, **kwargs):
     data = None
     xform = None
     query = None
     tags = self.request.QUERY_PARAMS.get('tags', None)
     if owner is None and not request.user.is_anonymous():
         owner = request.user.username
     if not formid and not dataid and not tags:
         data = self._get_formlist_data_points(request, owner)
     if formid:
         try:
             xform = check_and_set_form_by_id(int(formid), request)
         except ValueError:
             xform = check_and_set_form_by_id_string(formid, request)
         if not xform:
             raise exceptions.PermissionDenied(
                 _("You do not have permission to "
                   "view data from this form."))
         else:
             query = {}
             query[ParsedInstance.USERFORM_ID] = \
                 u'%s_%s' % (xform.user.username, xform.id_string)
     if xform and dataid and dataid == 'labels':
         return Response(list(xform.tags.names()))
     if dataid:
         if query:
             query.update({'_id': dataid})
         else:
             query = {'_id': dataid}
     rquery = request.QUERY_PARAMS.get('query', None)
     if rquery:
         rquery = json.loads(rquery)
         if query:
             query.update(rquery)
         else:
             query = rquery
     if tags:
         query = query if query else {}
         query['_tags'] = {'$all': tags.split(',')}
     if xform:
         data = self._get_form_data(xform, query=query)
     if not xform and not data:
         xforms = self._get_accessible_forms(owner)
         if not query:
             query = {}
         query[ParsedInstance.USERFORM_ID] = {
             '$in': [
                 u'%s_%s' % (form.user.username, form.id_string)
                 for form in xforms
             ]
         }
         # query['_id'] = {'$in': [form.pk for form in xforms]}
         data = self._get_form_data(xform, query=query)
     if dataid and len(data):
         data = data[0]
     return Response(data)
Exemple #3
0
 def list(self, request, owner=None, formid=None, dataid=None, **kwargs):
     data = None
     xform = None
     query = None
     tags = self.request.QUERY_PARAMS.get('tags', None)
     if owner is None and not request.user.is_anonymous():
         owner = request.user.username
     if not formid and not dataid and not tags:
         data = self._get_formlist_data_points(request, owner)
     if formid:
         try:
             xform = check_and_set_form_by_id(int(formid), request)
         except ValueError:
             xform = check_and_set_form_by_id_string(formid, request)
         if not xform:
             raise exceptions.PermissionDenied(
                 _("You do not have permission to "
                   "view data from this form."))
         else:
             query = {}
             query[ParsedInstance.USERFORM_ID] = \
                 u'%s_%s' % (xform.user.username, xform.id_string)
     if xform and dataid and dataid == 'labels':
         return Response(list(xform.tags.names()))
     if dataid:
         if query:
             query.update({'_id': dataid})
         else:
             query = {'_id': dataid}
     rquery = request.QUERY_PARAMS.get('query', None)
     if rquery:
         rquery = json.loads(rquery)
         if query:
             query.update(rquery)
         else:
             query = rquery
     if tags:
         query = query if query else {}
         query['_tags'] = {'$all': tags.split(',')}
     if xform:
         data = self._get_form_data(xform, query=query)
     if not xform and not data:
         xforms = self._get_accessible_forms(owner)
         if not query:
             query = {}
         query[ParsedInstance.USERFORM_ID] = {
             '$in': [
                 u'%s_%s' % (form.user.username, form.id_string)
                 for form in xforms]
         }
         # query['_id'] = {'$in': [form.pk for form in xforms]}
         data = self._get_form_data(xform, query=query)
     if dataid and len(data):
         data = data[0]
     return Response(data)
Exemple #4
0
    def labels(self, request, owner, formid, dataid, **kwargs):
        class TagForm(forms.Form):
            tags = TagField()

        if owner is None and not request.user.is_anonymous():
            owner = request.user.username
        xform = None
        try:
            xform = check_and_set_form_by_id(int(formid), request)
        except ValueError:
            xform = check_and_set_form_by_id_string(formid, request)
        if not xform:
            raise exceptions.PermissionDenied(
                _("You do not have permission to "
                  "view data from this form."))
        status = 400
        try:
            instance = get_object_or_404(ParsedInstance,
                                         instance__pk=int(dataid))
        except ValueError:
            raise Http404("No data with id %s" % dataid)
        if request.method == 'POST':
            form = TagForm(request.DATA)
            if form.is_valid():
                tags = form.cleaned_data.get('tags', None)
                if tags:
                    for tag in tags:
                        instance.instance.tags.add(tag)
                    instance.save()
                    status = 201
        label = kwargs.get('label', None)
        if request.method == 'GET' and label:
            data = [
                i['name'] for i in instance.instance.tags.filter(
                    name=label).values('name')
            ]
        elif request.method == 'DELETE' and label:
            count = instance.instance.tags.count()
            instance.instance.tags.remove(label)
            # Accepted, label does not exist hence nothing removed
            if count == instance.instance.tags.count():
                status = 202
            data = list(instance.instance.tags.names())
        else:
            data = list(instance.instance.tags.names())
        if request.method == 'GET':
            status = 200
        return Response(data, status=status)
Exemple #5
0
 def labels(self, request, owner, formid, dataid, **kwargs):
     class TagForm(forms.Form):
         tags = TagField()
     if owner is None and not request.user.is_anonymous():
         owner = request.user.username
     xform = None
     try:
         xform = check_and_set_form_by_id(int(formid), request)
     except ValueError:
         xform = check_and_set_form_by_id_string(formid, request)
     if not xform:
         raise exceptions.PermissionDenied(
             _("You do not have permission to "
                 "view data from this form."))
     status = 400
     try:
         instance = get_object_or_404(
             ParsedInstance, instance__pk=int(dataid))
     except ValueError:
         raise Http404("No data with id %s" % dataid)
     if request.method == 'POST':
         form = TagForm(request.DATA)
         if form.is_valid():
             tags = form.cleaned_data.get('tags', None)
             if tags:
                 for tag in tags:
                     instance.instance.tags.add(tag)
                 instance.save()
                 status = 201
     label = kwargs.get('label', None)
     if request.method == 'GET' and label:
         data = [
             i['name'] for i in
             instance.instance.tags.filter(name=label).values('name')]
     elif request.method == 'DELETE' and label:
         count = instance.instance.tags.count()
         instance.instance.tags.remove(label)
         # Accepted, label does not exist hence nothing removed
         if count == instance.instance.tags.count():
             status = 202
         data = list(instance.instance.tags.names())
     else:
         data = list(instance.instance.tags.names())
     if request.method == 'GET':
         status = 200
     return Response(data, status=status)