Esempio n. 1
0
 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)
Esempio n. 2
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)