|
@@ -28,7 +28,7 @@ LOG = logging.getLogger(__name__)
|
|
|
DL_FORMATS = [ 'csv', 'xls' ]
|
|
DL_FORMATS = [ 'csv', 'xls' ]
|
|
|
|
|
|
|
|
|
|
|
|
|
-def download(results, format):
|
|
|
|
|
|
|
+def download(results, format, collection):
|
|
|
"""
|
|
"""
|
|
|
download(results, format) -> HttpResponse
|
|
download(results, format) -> HttpResponse
|
|
|
|
|
|
|
@@ -38,23 +38,24 @@ def download(results, format):
|
|
|
LOG.error('Unknown download format "%s"' % format)
|
|
LOG.error('Unknown download format "%s"' % format)
|
|
|
return
|
|
return
|
|
|
|
|
|
|
|
- content_generator = SearchDataAdapter(results, format)
|
|
|
|
|
|
|
+ content_generator = SearchDataAdapter(results, format, collection)
|
|
|
generator = export_csvxls.create_generator(content_generator, format)
|
|
generator = export_csvxls.create_generator(content_generator, format)
|
|
|
return export_csvxls.make_response(generator, format, 'query_result')
|
|
return export_csvxls.make_response(generator, format, 'query_result')
|
|
|
|
|
|
|
|
|
|
|
|
|
-def SearchDataAdapter(results, format):
|
|
|
|
|
|
|
+def SearchDataAdapter(results, format, collection):
|
|
|
"""
|
|
"""
|
|
|
SearchDataAdapter(results, format, db) -> headers, 2D array of data.
|
|
SearchDataAdapter(results, format, db) -> headers, 2D array of data.
|
|
|
"""
|
|
"""
|
|
|
if results and results['response'] and results['response']['docs']:
|
|
if results and results['response'] and results['response']['docs']:
|
|
|
search_data = results['response']['docs']
|
|
search_data = results['response']['docs']
|
|
|
- order = search_data[0].keys()
|
|
|
|
|
|
|
+ headers = [field['name'] for field in collection['fields']]
|
|
|
|
|
+
|
|
|
rows = []
|
|
rows = []
|
|
|
|
|
|
|
|
for data in search_data:
|
|
for data in search_data:
|
|
|
row = []
|
|
row = []
|
|
|
- for column in order:
|
|
|
|
|
|
|
+ for column in headers:
|
|
|
if column not in data:
|
|
if column not in data:
|
|
|
row.append("")
|
|
row.append("")
|
|
|
elif isinstance(data[column], basestring) or isinstance(data[column], (int, long, float, complex)):
|
|
elif isinstance(data[column], basestring) or isinstance(data[column], (int, long, float, complex)):
|
|
@@ -65,4 +66,4 @@ def SearchDataAdapter(results, format):
|
|
|
else:
|
|
else:
|
|
|
rows = [[]]
|
|
rows = [[]]
|
|
|
|
|
|
|
|
- yield order, rows
|
|
|
|
|
|
|
+ yield headers, rows
|