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,
        )
Пример #2
0
    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,
        )
Пример #4
0
    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,
        )
Пример #5
0
    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