def post_add_to_question_group(self):
        try:
            question_id = long(self.request.get('question_id'))
            question_dto = QuestionDAO.load(question_id)
            if question_dto is None:
                raise ValueError()
        except ValueError:
            transforms.send_json_response(
                self, 500, 'Invalid question id.',
                {'question-id': self.request.get('question_id')}
            )
            return

        try:
            group_id = long(self.request.get('group_id'))
            group_dto = QuestionGroupDAO.load(group_id)
            if group_dto is None:
                raise ValueError()
        except ValueError:
            transforms.send_json_response(
                self, 500, 'Invalid question group id.',
                {'group-id': self.request.get('group_id')}
            )
            return

        weight = self.request.get('weight')
        try:
            float(weight)
        except ValueError:
            transforms.send_json_response(
                self, 500, 'Invalid weight. Must be a numeric value.', {
                    'weight': weight})
            return

        group_dto.add_question(question_id, weight)
        QuestionGroupDAO.save(group_dto)

        transforms.send_json_response(
            self,
            200,
            '%s added to %s.' % (
                question_dto.description, group_dto.description
            ),
            {
                'group-id': group_dto.id,
                'question-id': question_dto.id
            }
        )
        return
Esempio n. 2
0
    def put(self):
        """Store a question group in the datastore in response to a PUT."""
        request = transforms.loads(self.request.get('request'))
        key = request.get('key')

        if not self.assert_xsrf_token_or_fail(
                request, self.XSRF_TOKEN, {'key': key}):
            return

        if not CourseOutlineRights.can_edit(self):
            transforms.send_json_response(
                self, 401, 'Access denied.', {'key': key})
            return

        payload = request.get('payload')
        question_group_dict = transforms.json_to_dict(
            transforms.loads(payload),
            self.get_schema().get_json_schema_dict())

        validation_errors = self.validate(question_group_dict, key)
        if validation_errors:
            self.validation_error('\n'.join(validation_errors), key=key)
            return

        assert self.SCHEMA_VERSION == question_group_dict.get('version')

        if key:
            question_group = QuestionGroupDTO(key, question_group_dict)
        else:
            question_group = QuestionGroupDTO(None, question_group_dict)

        key_after_save = QuestionGroupDAO.save(question_group)
        transforms.send_json_response(
            self, 200, 'Saved.', payload_dict={'key': key_after_save})
Esempio n. 3
0
    def post_add_to_question_group(self):
        try:
            question_id = long(self.request.get('question_id'))
            question_dto = QuestionDAO.load(question_id)
            if question_dto is None:
                raise ValueError()
        except ValueError:
            transforms.send_json_response(
                self, 500, 'Invalid question id.',
                {'question-id': self.request.get('question_id')})
            return

        try:
            group_id = long(self.request.get('group_id'))
            group_dto = QuestionGroupDAO.load(group_id)
            if group_dto is None:
                raise ValueError()
        except ValueError:
            transforms.send_json_response(
                self, 500, 'Invalid question group id.',
                {'group-id': self.request.get('group_id')})
            return

        weight = self.request.get('weight')
        try:
            float(weight)
        except ValueError:
            transforms.send_json_response(
                self, 500, 'Invalid weight. Must be a numeric value.',
                {'weight': weight})
            return

        group_dto.add_question(question_id, weight)
        QuestionGroupDAO.save(group_dto)

        transforms.send_json_response(
            self, 200, '%s added to %s.' %
            (question_dto.description, group_dto.description), {
                'group-id': group_dto.id,
                'question-id': question_dto.id
            })
        return