def AuthenticatedPost(self, org, event): action = self.request.get('action') existing_question_forms, new_question_form = self._get_forms() if action == 'create': # create new question form = new_question_form if form.validate(): question = MultipleChoiceQuestion( question=form.question.data, correct_answer=form.correct_answer.data, wrong_answers=[ field.data for field in form.wrong_answers.entries if field.data ], explanation=form.explanation.data ) question.save() sleep(2) # hack for possible datastore consistency self.redirect(self.request.path) elif action == 'edit': # edit existing question edited_form = [ form for form in existing_question_forms if form._prefix == self.request.get('prefix') ][0] if edited_form.validate(): edited_form.populate_obj(edited_form.question_obj) edited_form.question_obj.save() sleep(2) # hack for possible datastore consistency self.redirect(self.request.path) elif action == 'delete': # delete existing question edited_form = [ form for form in existing_question_forms if form._prefix == self.request.get('prefix') ][0] edited_form.question_obj.delete() sleep(2) # hack for possible datastore consistency self.redirect(self.request.path) else: # unknown action self.abort(404) # fallen through due to errors: render page self.render( existing_question_forms=existing_question_forms, new_question_form=new_question_form, )
def AuthenticatedPost(self, org, event): action = self.request.get('action') existing_question_forms, new_question_form = self._get_forms() if action == 'create': # create new question form = new_question_form if form.validate(): question = MultipleChoiceQuestion( question=form.question.data, correct_answer=form.correct_answer.data, wrong_answers=[ field.data for field in form.wrong_answers.entries if field.data ], explanation=form.explanation.data) question.save() sleep(2) # hack for possible datastore consistency self.redirect(self.request.path) elif action == 'edit': # edit existing question edited_form = [ form for form in existing_question_forms if form._prefix == self.request.get('prefix') ][0] if edited_form.validate(): edited_form.populate_obj(edited_form.question_obj) edited_form.question_obj.save() sleep(2) # hack for possible datastore consistency self.redirect(self.request.path) elif action == 'delete': # delete existing question edited_form = [ form for form in existing_question_forms if form._prefix == self.request.get('prefix') ][0] edited_form.question_obj.delete() sleep(2) # hack for possible datastore consistency self.redirect(self.request.path) else: # unknown action self.abort(404) # fallen through due to errors: render page self.render( existing_question_forms=existing_question_forms, new_question_form=new_question_form, )
def get(self): # get questions all_questions = list(MultipleChoiceQuestion.all()) random.shuffle(all_questions) forms = [MultipleChoiceQuestionForm(None, q) for q in all_questions] # if no questions are defined, activate immediately if not all_questions: self.org_by_code.activate() # render page self.render( activation_template, org=self.org_by_code, question_forms=forms, num_questions_to_ask=self.MAX_NUM_QUESTIONS_TO_ASK, )
def _get_forms(self): # unescape POST to allow HTML in forms for k in self.request.POST.keys(): self.request.POST[k] = unescape(self.request.POST[k]) # load by all questions and order by id questions = list(MultipleChoiceQuestion.all()) questions.sort(key=lambda q: q.key().id(), reverse=True) # create forms posted_prefix = self.request.POST.get('prefix', '') existing_question_forms = [ MultipleChoiceQuestionEditForm( self.request.POST if posted_prefix.startswith( unicode(question.key().id())) else None, question, prefix=unicode(question.key().id())) for question in questions ] new_question_form = MultipleChoiceQuestionEditForm(self.request.POST) return existing_question_forms, new_question_form
def _get_forms(self): # unescape POST to allow HTML in forms for k in self.request.POST.keys(): self.request.POST[k] = unescape(self.request.POST[k]) # load by all questions and order by id questions = list(MultipleChoiceQuestion.all()) questions.sort(key=lambda q: q.key().id(), reverse=True) # create forms posted_prefix = self.request.POST.get('prefix', '') existing_question_forms = [ MultipleChoiceQuestionEditForm( self.request.POST if posted_prefix.startswith(unicode(question.key().id())) else None, question, prefix=unicode(question.key().id()) ) for question in questions ] new_question_form = MultipleChoiceQuestionEditForm(self.request.POST) return existing_question_forms, new_question_form