app/soc/views/helper/surveys.py
changeset 2492 6eac6cd88dad
parent 2489 7c23f90d87cd
child 2501 d612b48e6e12
equal deleted inserted replaced
2491:f5776b6116fd 2492:6eac6cd88dad
   767     leading = (rec.user.link_id,)
   767     leading = (rec.user.link_id,)
   768     records.append(leading + values)
   768     records.append(leading + values)
   769   return records
   769   return records
   770 
   770 
   771 
   771 
   772 def to_csv(survey):
   772 def to_csv(survey_view):
   773   """CSV exporter.
   773   """CSV exporter.
   774   """
   774 
   775 
   775   Args:
   776   # get header and properties
   776       survey_view: instance of the SurveyView
   777   header = _get_csv_header(survey)
   777   """
   778   leading = ['user', 'created', 'modified']
   778 
   779   properties = leading + survey.survey_content.orderedProperties()
   779   def wrapper(survey):
   780 
   780     """Wrapper function.
   781   try:
   781     """
   782     first = survey.getRecords().run().next()
   782     survey_logic = survey_view.getParams()['logic']
   783   except StopIteration:
   783     record_logic = survey_logic.getRecordLogic()
   784     # bail out early if survey_records.run() is empty
   784 
   785     return header, survey.link_id
   785     # get header and properties
   786 
   786     header = _get_csv_header(survey)
   787   # generate results list
   787     leading = ['user', 'created', 'modified']
   788   recs = survey.getRecords().run()
   788     properties = leading + survey.survey_content.orderedProperties()
   789   recs = _get_records(recs, properties)
   789 
   790 
   790     # retrieve the query of the data to export
   791   # write results to CSV
   791     fields = {'survey': survey}
   792   output = StringIO.StringIO()
   792     record_query = record_logic.getQueryForFields(fields)
   793   writer = csv.writer(output)
   793 
   794   writer.writerow(properties)
   794     try:
   795   writer.writerows(recs)
   795       first = record_query.run().next()
   796 
   796     except StopIteration:
   797   return header + output.getvalue(), survey.link_id
   797       # bail out early if survey_records.run() is empty
       
   798       return header, survey.link_id
       
   799   
       
   800     # generate results list
       
   801     recs = record_query.run()
       
   802     recs = _get_records(recs, properties)
       
   803   
       
   804     # write results to CSV
       
   805     output = StringIO.StringIO()
       
   806     writer = csv.writer(output)
       
   807     writer.writerow(properties)
       
   808     writer.writerows(recs)
       
   809   
       
   810     return header + output.getvalue(), survey.link_id
       
   811   return wrapper