Пример #1
0
def get_temp_csv(elem):
    temp = tempfile.NamedTemporaryFile()
    format_csv(elem.get_rows(), elem.get_column_names(), '', file=temp)
    # this isn't that nice, but closing temp would delete it
    # and we need to make sure the file has been written to:
    temp.flush()
    return temp
Пример #2
0
def export_csv(request, formdef_id):
    xsd = get_object_or_404( FormDefModel, pk=formdef_id)
    root = xsd.element
    if ElementDefModel.objects.filter(parent=root).count():
        tempfiles = []
        
        def make_filename(table_name):
            if table_name == root.table_name:
                return "root.csv"
            else:
                start = len(root.table_name) + 1
                return table_name[start:] + ".csv"
                
        visited = set()
        current = ElementDefModel.objects.filter(id=root.id)
    
        while current.count():
            for element in current:
                if element not in visited:
                    tempfiles.append( (get_temp_csv(element), make_filename(element.table_name)) )
                    visited.add(element)
            current = ElementDefModel.objects.filter(parent=current)
    
    
        return get_zipfile([(temp.name, filename) for (temp, filename) in tempfiles], "%s.zip" % xsd.form_name)
    else:
        return format_csv(root.get_rows(), root.get_column_names(), xsd.form_name)
Пример #3
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)
Пример #4
0
def sql_report_csv(request, report_id):
    '''View a single sql report.'''
    extuser = request.extuser
    report = SqlReport.objects.get(id=report_id)
    whereclause = util.get_whereclause(request.GET)
    cols, data = report.get_data({"whereclause": whereclause})
    return format_csv(data, cols, report.title)
Пример #5
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)
Пример #6
0
def get_csv_from_form(formdef_id, form_id=0, filter=''):
    try:
        xsd = FormDefModel.objects.get(id=formdef_id)
    except FormDefModel.DoesNotExist:
        return HttpResponseBadRequest("Schema with id %s not found." % formdef_id)
    cursor = connection.cursor()
    row_count = 0
    if form_id == 0:
        try:
            query= 'SELECT * FROM ' + xsd.form_name
            if filter: query = query + " WHERE " + filter
            query = query + ' ORDER BY id'
            cursor.execute(query)
        except Exception, e:
            return HttpResponseBadRequest(\
                "Schema %s could not be queried with query %s" % \
                ( xsd.form_name,query) )        
        rows = cursor.fetchall()
    else:
        try:
            cursor.execute("SELECT * FROM " + xsd.form_name + ' where id=%s', [form_id])
        except Exception, e:
            return HttpResponseBadRequest(\
                "Instance with id %s for schema %s not found." % (form_id,xsd.form_name) )
        rows = cursor.fetchone()
        row_count = 1
    columns = xsd.get_column_names()    
    name = xsd.form_name
    return format_csv(rows, columns, name, row_count)