示例#1
0
文件: views.py 项目: mitsei/producer
    def put(self, request, column_id, format=None):
        try:
            gutils.verify_at_least_one_key_present(
                self.data, ['displayName', 'description', 'gradeSystemId'])

            gradebook = grutils.get_object_gradebook(self.gm, column_id,
                                                     'gradebook_column')
            gradebook_column = gradebook.get_gradebook_column(
                gutils.clean_id(column_id))

            form = gradebook.get_gradebook_column_form_for_update(
                gradebook_column.ident)

            form = gutils.set_form_basics(form, self.data)
            if 'gradeSystemId' in self.data:
                form.set_grade_system(
                    gutils.clean_id(self.data['gradeSystemId']))

            gradebook.update_gradebook_column(form)

            gradebook_column = gradebook.get_gradebook_column(
                gradebook_column.ident)

            return gutils.UpdatedResponse(gradebook_column.object_map)
        except (PermissionDenied, InvalidArgument, KeyError) as ex:
            gutils.handle_exceptions(ex)
        except IllegalState as ex:
            modified_ex = type(ex)('Entries exist in this gradebook column. ' +
                                   'Cannot change the grade system.')
            gutils.handle_exceptions(modified_ex)
示例#2
0
文件: views.py 项目: mitsei/producer
    def put(self, request, bank_id, format=None):
        try:
            form = self.am.get_bank_form_for_update(gutils.clean_id(bank_id))

            form = gutils.set_form_basics(form, self.data)

            updated_bank = self.am.update_bank(form)
            bank = gutils.convert_dl_object(updated_bank)
            gutils.update_links(request, bank)
            return gutils.UpdatedResponse(bank)
        except (PermissionDenied, InvalidArgument) as ex:
            gutils.handle_exceptions(ex)
示例#3
0
文件: views.py 项目: mitsei/producer
    def put(self, request, gradebook_id, format=None):
        try:
            form = self.gm.get_gradebook_form_for_update(
                gutils.clean_id(gradebook_id))

            gutils.verify_at_least_one_key_present(
                self.data, ['displayName', 'description'])

            form = gutils.set_form_basics(form, self.data)

            updated_gradebook = self.gm.update_gradebook(form)
            updated_gradebook = gutils.convert_dl_object(updated_gradebook)

            return gutils.UpdatedResponse(updated_gradebook)
        except (PermissionDenied, KeyError, InvalidArgument, NotFound) as ex:
            gutils.handle_exceptions(ex)
示例#4
0
文件: views.py 项目: mitsei/producer
    def post(self, request, format=None):
        """
        Create a new assessment bank, if authorized
        Create a new group in IS&T Membership service

        """
        try:
            form = self.am.get_bank_form_for_create([])

            form = gutils.set_form_basics(form, self.data)

            new_bank = gutils.convert_dl_object(self.am.create_bank(form))

            return gutils.CreatedResponse(new_bank)
        except (PermissionDenied, InvalidArgument) as ex:
            gutils.handle_exceptions(ex)
示例#5
0
文件: views.py 项目: mitsei/producer
    def post(self, request, gradebook_id=None, format=None):
        try:
            if gradebook_id is None:
                gutils.verify_keys_present(self.data, ['gradebookId'])
                gradebook_id = self.data['gradebookId']

            gutils.verify_at_least_one_key_present(
                self.data, ['displayName', 'description'])

            gradebook = self.gm.get_gradebook(gutils.clean_id(gradebook_id))

            form = gradebook.get_grade_system_form_for_create([])

            form = gutils.set_form_basics(form, self.data)

            check_scores = True

            if 'basedOnGrades' in self.data:
                form.set_based_on_grades(bool(self.data['basedOnGrades']))
                if self.data['basedOnGrades']:
                    check_scores = False

            if check_scores:
                grutils.check_numeric_score_inputs(self.data)

                form.set_highest_numeric_score(float(
                    self.data['highestScore']))
                form.set_lowest_numeric_score(float(self.data['lowestScore']))
                form.set_numeric_score_increment(
                    float(self.data['scoreIncrement']))

            grade_system = gradebook.create_grade_system(form)

            if not check_scores:
                grutils.check_grade_inputs(self.data)
                grutils.add_grades_to_grade_system(gradebook, grade_system,
                                                   self.data)

            grade_system = gradebook.get_grade_system(grade_system.ident)

            return gutils.CreatedResponse(grade_system.object_map)
        except (PermissionDenied, InvalidArgument, KeyError) as ex:
            try:
                gradebook.delete_grade_system(grade_system.ident)
            except NameError:
                pass
            gutils.handle_exceptions(ex)
示例#6
0
文件: views.py 项目: mitsei/producer
    def post(self, request, gradebook_id=None, format=None):
        try:
            if gradebook_id is None:
                gutils.verify_keys_present(self.data, ['gradebookId'])
                gradebook_id = self.data['gradebookId']

            gutils.verify_keys_present(self.data, ['gradeSystemId'])

            gradebook = self.gm.get_gradebook(gutils.clean_id(gradebook_id))

            form = gradebook.get_gradebook_column_form_for_create([])

            form = gutils.set_form_basics(form, self.data)

            form.set_grade_system(gutils.clean_id(self.data['gradeSystemId']))

            column = gradebook.create_gradebook_column(form)

            return gutils.CreatedResponse(column.object_map)
        except (PermissionDenied, InvalidArgument, KeyError) as ex:
            gutils.handle_exceptions(ex)
示例#7
0
文件: views.py 项目: mitsei/producer
    def post(self, request, column_id=None, format=None):
        try:
            if column_id is None:
                gutils.verify_keys_present(self.data, ['gradebookColumnId'])
                column_id = self.data['gradebookColumnId']

            gutils.verify_at_least_one_key_present(
                self.data, ['grade', 'score', 'ignoredForCalculations'])
            gutils.verify_keys_present(self.data, ['resourceId'])

            gradebook = grutils.get_object_gradebook(self.gm, column_id,
                                                     'gradebook_column')
            column = gradebook.get_gradebook_column(gutils.clean_id(column_id))

            grutils.validate_score_and_grades_against_system(
                column.get_grade_system(), self.data)

            form = gradebook.get_grade_entry_form_for_create(
                column.ident, gutils.clean_id(self.data['resourceId']), [])

            form = gutils.set_form_basics(form, self.data)

            if 'ignoredForCalculations' in self.data:
                form.set_ignored_for_calculations(
                    bool(self.data['ignoredForCalculations']))

            if 'grade' in self.data:
                form.set_grade(gutils.clean_id(self.data['grade']))

            if 'score' in self.data:
                form.set_score(float(self.data['score']))

            entry = gradebook.create_grade_entry(form)

            return gutils.CreatedResponse(entry.object_map)
        except (PermissionDenied, InvalidArgument, IllegalState,
                KeyError) as ex:
            gutils.handle_exceptions(ex)
示例#8
0
文件: views.py 项目: mitsei/producer
    def post(self, request, format=None):
        """
        Create a new bin, if authorized

        """
        try:
            if 'bankId' not in self.data:
                gutils.verify_keys_present(self.data,
                                           ['displayName', 'description'])
                form = self.gm.get_gradebook_form_for_create([])
                finalize_method = self.gm.create_gradebook
            else:
                gradebook = self.gm.get_gradebook(Id(self.data['bankId']))
                form = self.gm.get_gradebook_form_for_update(gradebook.ident)
                finalize_method = self.gm.update_gradebook

            form = gutils.set_form_basics(form, self.data)

            new_gradebook = gutils.convert_dl_object(finalize_method(form))

            return gutils.CreatedResponse(new_gradebook)
        except (PermissionDenied, InvalidArgument, NotFound, KeyError) as ex:
            gutils.handle_exceptions(ex)
示例#9
0
文件: views.py 项目: mitsei/producer
    def put(self, request, entry_id, format=None):
        try:
            gutils.verify_at_least_one_key_present(self.data, [
                'displayName', 'description', 'grade', 'score',
                'ignoredForCalculations'
            ])

            gradebook = grutils.get_object_gradebook(self.gm, entry_id,
                                                     'grade_entry')
            entry = gradebook.get_grade_entry(gutils.clean_id(entry_id))
            grade_system = entry.get_gradebook_column().get_grade_system()

            grutils.validate_score_and_grades_against_system(
                grade_system, self.data)

            form = gradebook.get_grade_entry_form_for_update(entry.ident)

            form = gutils.set_form_basics(form, self.data)

            if 'grade' in self.data:
                form.set_grade(gutils.clean_id(self.data['grade']))

            if 'score' in self.data:
                form.set_score(float(self.data['score']))

            if 'ignoredForCalculations' in self.data:
                form.set_ignored_for_calculations(
                    bool(self.data['ignoredForCalculations']))

            gradebook.update_grade_entry(form)

            entry = gradebook.get_grade_entry(entry.ident)

            return gutils.UpdatedResponse(entry.object_map)
        except (PermissionDenied, InvalidArgument, KeyError) as ex:
            gutils.handle_exceptions(ex)
示例#10
0
文件: views.py 项目: mitsei/producer
    def put(self, request, gradesystem_id, format=None):
        try:
            gutils.verify_at_least_one_key_present(self.data, [
                'displayName', 'description', 'basedOnGrades', 'grades',
                'highestScore', 'lowestScore', 'scoreIncrement'
            ])

            gradebook = grutils.get_object_gradebook(self.gm, gradesystem_id,
                                                     'grade_system')
            grade_system = gradebook.get_grade_system(
                gutils.clean_id(gradesystem_id))

            if 'basedOnGrades' in self.data:
                # do this first, so methods below work
                form = gradebook.get_grade_system_form_for_update(
                    grade_system.ident)
                form.set_based_on_grades(bool(self.data['basedOnGrades']))

                if self.data['basedOnGrades']:
                    # clear out the numeric score fields
                    form.clear_highest_numeric_score()
                    form.clear_lowest_numeric_score()
                    form.clear_numeric_score_increment()
                else:
                    # clear out grades
                    for grade in grade_system.get_grades():
                        gradebook.delete_grade(grade.ident)

                grade_system = gradebook.update_grade_system(form)

            if (grade_system.is_based_on_grades() and 'grades' in self.data):
                # user wants to update the grades
                # here, wipe out all previous grades and over-write
                grutils.check_grade_inputs(self.data)
                if len(self.data['grades']) > 0:
                    for grade in grade_system.get_grades():
                        gradebook.delete_grade(grade.ident)
                    grutils.add_grades_to_grade_system(gradebook, grade_system,
                                                       self.data)

            score_inputs = ['highestScore', 'lowestScore', 'scoreIncrement']
            if (not grade_system.is_based_on_grades()
                    and any(i in self.data for i in score_inputs)):
                form = gradebook.get_grade_system_form_for_update(
                    grade_system.ident)

                if 'highestScore' in self.data:
                    form.set_highest_numeric_score(
                        float(self.data['highestScore']))

                if 'lowestScore' in self.data:
                    form.set_lowest_numeric_score(
                        float(self.data['lowestScore']))

                if 'scoreIncrement' in self.data:
                    form.set_numeric_score_increment(
                        float(self.data['scoreIncrement']))

                gradebook.update_grade_system(form)

            if 'name' in self.data or 'description' in self.data:
                form = gradebook.get_grade_system_form_for_update(
                    grade_system.ident)

                form = gutils.set_form_basics(form, self.data)

                gradebook.update_grade_system(form)

            grade_system = gradebook.get_grade_system(grade_system.ident)

            return gutils.UpdatedResponse(grade_system.object_map)
        except (PermissionDenied, InvalidArgument, KeyError) as ex:
            gutils.handle_exceptions(ex)
示例#11
0
文件: views.py 项目: mitsei/producer
    def put(self, request, item_id, format=None):
        try:
            bank = autils.get_object_bank(self.am,
                                          item_id,
                                          object_type='item',
                                          bank_id=None)

            if any(attr in self.data for attr in [
                    'displayName', 'description', 'learningObjectiveIds',
                    'attempts', 'markdown', 'rerandomize', 'showanswer',
                    'weight', 'difficulty', 'discrimination'
            ]):
                form = bank.get_item_form_for_update(gutils.clean_id(item_id))

                form = gutils.set_form_basics(form, self.data)

                if 'learningObjectiveIds' in self.data:
                    form = autils.set_item_learning_objectives(self.data, form)

                # update the item before the questions / answers,
                # because otherwise the old form will over-write the
                # new question / answer data

                # for edX items, update any metadata passed in
                if 'genusTypeId' not in self.data:
                    if len(form._my_map['recordTypeIds']) > 0:
                        self.data['type'] = form._my_map['recordTypeIds'][0]
                    else:
                        self.data['type'] = ''

                form = autils.update_item_metadata(self.data, form)

                updated_item = bank.update_item(form)
            else:
                updated_item = bank.get_item(gutils.clean_id(item_id))

            if 'question' in self.data:
                question = self.data['question']
                existing_question = updated_item.get_question()
                q_id = existing_question.ident

                if 'genusTypeId' not in question:
                    question['genusTypeId'] = existing_question.object_map[
                        'recordTypeIds'][0]

                qfu = bank.get_question_form_for_update(q_id)
                qfu = autils.update_question_form(request, question, qfu)
                updated_question = bank.update_question(qfu)

            if 'answers' in self.data:
                for answer in self.data['answers']:
                    if 'id' in answer:
                        a_id = gutils.clean_id(answer['id'])
                        afu = bank.get_answer_form_for_update(a_id)
                        afu = autils.update_answer_form(answer, afu)
                        bank.update_answer(afu)
                    else:
                        a_types = autils.get_answer_records(answer)
                        afc = bank.get_answer_form_for_create(
                            gutils.clean_id(item_id), a_types)
                        afc = autils.set_answer_form_genus_and_feedback(
                            answer, afc)
                        if 'multi-choice' in answer['genusTypeId']:
                            # because multiple choice answers need to match to
                            # the actual MC3 ChoiceIds, NOT the index passed
                            # in by the consumer.
                            question = updated_item.get_question()
                            afc = autils.update_answer_form(
                                answer, afc, question)
                        else:
                            afc = autils.update_answer_form(answer, afc)
                        bank.create_answer(afc)

            full_item = bank.get_item(gutils.clean_id(item_id))

            data = gutils.convert_dl_object(full_item)
            return gutils.UpdatedResponse(data)
        except (PermissionDenied, Unsupported, InvalidArgument) as ex:
            gutils.handle_exceptions(ex)