def read(self, request, formdef_id, form_id): """ return data from a specific submission """ if request.REQUEST.has_key('format'): if request.GET['format'].lower() == 'xml': formdef = FormDefModel.objects.get(pk=formdef_id) if not formdef: return HttpResponseBadRequest(\ "Schema with primary key %s was not found." % formdef_id) try: meta = Metadata.objects.get(raw_data=form_id, formdefmodel=formdef) except Metadata.DoesNotExist: return HttpResponseBadRequest(\ "Instance with id %s and schema %s was not found." % form_id, formdef.id) fin = open( meta.xml_file_location() ,"r") response = HttpResponse(fin.read(), mimetype='text/xml') fin.close() return response #default to CSV try: formdef = FormDefModel.objects.get(pk=formdef_id ) except FormDefModel.DoesNotExist: return HttpResponseBadRequest("Schema with primary key %s was not found." % formdef_id) row = formdef.get_row(form_id) if row is None: return HttpResponseBadRequest("Instance matching %s of schema %s was not found." % (form_id,formdef_id) ) columns = formdef.get_column_names() return format_csv(row, columns, formdef.form_name, form_id!=0)
def read(self, request, formdef_id): """ list all submitted instance data for a particular schema """ try: formdef = FormDefModel.objects.get(pk=formdef_id) except FormDefModel.DoesNotExist: return HttpResponseBadRequest("Schema with id %s could not found." % formdef_id) metadata = Metadata.objects.filter(formdefmodel=formdef).order_by('id') if not metadata: return HttpResponseBadRequest("Metadata of schema with id %s not found." % formdef_id) filter = [] if request.REQUEST.has_key('start-id'): if filter: filter = filter + " AND " filter = filter + "id >= " + request.GET['start-id'] metadata = metadata.filter(raw_data__gte=request.GET['start-id']) if request.REQUEST.has_key('end-id'): if filter: filter = filter + " AND " filter = filter + "id <= " + request.GET['end-id'] metadata = metadata.filter(raw_data__lte=request.GET['end-id']) if request.REQUEST.has_key('start-submit-date'): date = datetime.strptime(request.GET['start-submit-date'],"%Y-%m-%d") # not the most efficient way of doing this # but it keeps our django orm reference and sql work separate metadata = metadata.filter(attachment__submission__submit_time__gte=date) raw_ids = [int(m.raw_data) for m in metadata] filter.append( ['id','IN',tuple(raw_ids)] ) if request.REQUEST.has_key('end-submit-date'): date = datetime.strptime(request.GET['end-submit-date'],"%Y-%m-%d") metadata = metadata.filter(attachment__submission__submit_time__lte=date) raw_ids = [int(m.raw_data) for m in metadata] filter.append( ['id','IN',tuple(raw_ids)] ) if request.REQUEST.has_key('format'): if request.GET['format'].lower() == 'xml' or \ request.GET['format'].lower() == 'zip': file_list = [] for datum in metadata: file_list.append( datum.attachment.filepath ) return get_zipfile(file_list) # default to csv export rows = formdef.get_rows( column_filters=filter ) column = formdef.get_column_names() return format_csv(rows, column, formdef.form_name)