Commit 72575c36 by Xavier Antoviaque

Merge pull request #1 from FiloSottile/optimize_dataexport

Optimize mentoring-dataexport times by using a raw SQL cursor
parents adcb490a 43aa3202
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
import logging import logging
from itertools import groupby from itertools import groupby
from operator import itemgetter
from webob import Response from webob import Response
from xblock.core import XBlock from xblock.core import XBlock
from xblock.fragment import Fragment from xblock.fragment import Fragment
...@@ -78,20 +79,22 @@ class MentoringDataExportBlock(XBlock): ...@@ -78,20 +79,22 @@ class MentoringDataExportBlock(XBlock):
# Header line # Header line
yield list2csv([u'student_id'] + list(answers_names)) yield list2csv([u'student_id'] + list(answers_names))
answers_list = answers.values_list('name', 'student_id', 'student_input')
if answers_names: if answers_names:
for k, student_answers in groupby(answers, lambda x: x.student_id): for k, student_answers in groupby(answers_list, itemgetter(1)):
row = [] row = []
next_answer_idx = 0 next_answer_idx = 0
for answer in student_answers: for answer in student_answers:
if not row: if not row:
row = [answer.student_id] row = [answer[1]]
while answer.name != answers_names[next_answer_idx]: while answer[0] != answers_names[next_answer_idx]:
# Still add answer row to CSV when they don't exist in DB # Still add answer row to CSV when they don't exist in DB
row.append('') row.append('')
next_answer_idx += 1 next_answer_idx += 1
row.append(answer.student_input) row.append(answer[2])
next_answer_idx += 1 next_answer_idx += 1
if row: if row:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment