def get(self, request, owner=None, formid=None, dataid=None, **kwargs): """ Display submission data. If no parameter is given, it displays a dictionary of public data urls. formid - primary key for the form dataid - primary key for the data submission """ data = None xform = None query = None if owner is None and not request.user.is_anonymous(): owner = request.user.username if not formid and not dataid: data = self._get_formlist_data_points(request, owner) if formid: 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.")) if xform and dataid: query = json.dumps({'_id': int(dataid)}) if xform: data = self._get_form_data(xform, query=query) if dataid and len(data): data = data[0] return Response(data)
def get(self, request, owner=None, formid=None, dataid=None, **kwargs): """ Display submission data. If no parameter is given, it displays a dictionary of public data urls. formid - primary key for the form dataid - primary key for the data submission """ data = None xform = None query = None if owner is None and not request.user.is_anonymous(): owner = request.user.username if not formid and not dataid: data = self._get_formlist_data_points(request, owner) if formid: 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.")) if xform and dataid: query = json.dumps({'_id': int(dataid)}) if xform: data = self._get_form_data(xform, query=query) if dataid and len(data): data = data[0] return Response(data)
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)
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)
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)
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)
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)