diff --git a/app/utils.py b/app/utils.py index d8aa68cc7fb284252bbb5aa94ece9966d6adafd4..1da87b5d2c94e64a6f233e1daea9cf846c3a8f48 100644 --- a/app/utils.py +++ b/app/utils.py @@ -213,92 +213,94 @@ def generate_csv(exp_id): def generate_answer_row(participant, pages, questions, embody_questions): # TODO: refactor - answer_row = '' + with app.app_context(): - # append user session id - answer_row += participant.session + ';' + answer_row = '' - # append background question answers - bg_answers = background_question_answer.query.filter_by( - answer_set_idanswer_set=participant.idanswer_set).all() - bg_answers_list = [str(a.answer).strip() for a in bg_answers] - answer_row += ';'.join(bg_answers_list) + ';' + # append user session id + answer_row += participant.session + ';' - # append slider answers - slider_answers = answer.query.filter_by( - answer_set_idanswer_set=participant.idanswer_set) \ - .order_by(answer.page_idpage, answer.question_idquestion) \ - .all() + # append background question answers + bg_answers = background_question_answer.query.filter_by( + answer_set_idanswer_set=participant.idanswer_set).all() + bg_answers_list = [str(a.answer).strip() for a in bg_answers] + answer_row += ';'.join(bg_answers_list) + ';' - pages_and_questions = {} + # append slider answers + slider_answers = answer.query.filter_by( + answer_set_idanswer_set=participant.idanswer_set) \ + .order_by(answer.page_idpage, answer.question_idquestion) \ + .all() - for p in pages: - questions_list = [(p.idpage, a.idquestion) for a in questions] - pages_and_questions[p.idpage] = questions_list + pages_and_questions = {} - _questions = [ - item for sublist in pages_and_questions.values() for item in sublist] + for p in pages: + questions_list = [(p.idpage, a.idquestion) for a in questions] + pages_and_questions[p.idpage] = questions_list - answers_list = map_answers_to_questions(slider_answers, _questions) + _questions = [ + item for sublist in pages_and_questions.values() for item in sublist] - # typecast elemnts to string - answers_list = [str(a).strip() for a in answers_list] + answers_list = map_answers_to_questions(slider_answers, _questions) - answer_row += ';'.join(answers_list) + \ - ';' if slider_answers else len( - questions) * len(pages) * ';' + # typecast elemnts to string + answers_list = [str(a).strip() for a in answers_list] - # append embody answers (coordinates) - # save embody answers as bitmap images - embody_answers = embody_answer.query.filter_by( - answer_set_idanswer_set=participant.idanswer_set) \ - .order_by(embody_answer.page_idpage) \ - .all() + answer_row += ';'.join(answers_list) + \ + ';' if slider_answers else len( + questions) * len(pages) * ';' - pages_and_questions = {} + # append embody answers (coordinates) + # save embody answers as bitmap images + embody_answers = embody_answer.query.filter_by( + answer_set_idanswer_set=participant.idanswer_set) \ + .order_by(embody_answer.page_idpage) \ + .all() - for p in pages: - questions_list = [(p.idpage, a.idembody) for a in embody_questions] - pages_and_questions[p.idpage] = questions_list + pages_and_questions = {} - _questions = [ - item for sublist in pages_and_questions.values() for item in sublist] + for p in pages: + questions_list = [(p.idpage, a.idembody) for a in embody_questions] + pages_and_questions[p.idpage] = questions_list - _embody_answers = map_answers_to_questions(embody_answers, _questions) + _questions = [ + item for sublist in pages_and_questions.values() for item in sublist] - answers_list = [] + _embody_answers = map_answers_to_questions(embody_answers, _questions) - for answer_data in _embody_answers: - if not answer_data: - answers_list.append('') - continue + answers_list = [] - try: - coordinates = json.loads(answer_data) - em_height = coordinates.get('height', 600) + 2 - em_width = coordinates.get('width', 200) + 2 + for answer_data in _embody_answers: + if not answer_data: + answers_list.append('') + continue + + try: + coordinates = json.loads(answer_data) + em_height = coordinates.get('height', 600) + 2 + em_width = coordinates.get('width', 200) + 2 - coordinates_to_bitmap = [ - [0 for x in range(em_height)] for y in range(em_width)] + coordinates_to_bitmap = [ + [0 for x in range(em_height)] for y in range(em_width)] - coordinates = list( - zip(coordinates.get('x'), coordinates.get('y'))) + coordinates = list( + zip(coordinates.get('x'), coordinates.get('y'))) - for point in coordinates: + for point in coordinates: - try: - # for every brush stroke, increment the pixel - # value for every brush stroke - coordinates_to_bitmap[point[0]][point[1]] += 0.1 - except IndexError: - continue + try: + # for every brush stroke, increment the pixel + # value for every brush stroke + coordinates_to_bitmap[point[0]][point[1]] += 0.1 + except IndexError: + continue - answers_list.append(json.dumps(coordinates_to_bitmap)) + answers_list.append(json.dumps(coordinates_to_bitmap)) - except ValueError as err: - app.logger(err) + except ValueError as err: + app.logger(err) - answer_row += ';'.join(answers_list) if embody_answers else \ - len(embody_questions) * len(pages) * ';' + answer_row += ';'.join(answers_list) if embody_answers else \ + len(embody_questions) * len(pages) * ';' - return answer_row + return answer_row diff --git a/config.py b/config.py index e172252332a1ef62dc7423389cb733f32bea3927..632122a826069dbc4e2203de761d258a5c66a275 100644 --- a/config.py +++ b/config.py @@ -32,7 +32,7 @@ class Config(object): SQLALCHEMY_ENGINE_OPTIONS = { "pool_pre_ping": True, - "pool_recycle": 300, + "pool_recycle": 60, "max_overflow": 30, "pool_size": 20 }