예제 #1
0
def update_lti_course_grades(self, lti_consumer_id, sourcedid_and_grades):
    lti_consumer = LTIConsumer.query.get(lti_consumer_id)
    if lti_consumer:
        current_app.logger.info("Begin LTI Outcomes grade update for lti_consumer: "+str(lti_consumer.id)+" named: "+lti_consumer.tool_consumer_instance_name)
        for (lis_result_sourcedid, course_grade_id) in sourcedid_and_grades:
            if course_grade_id:
                course_grade = CourseGrade.query.get(course_grade_id)
                grade = course_grade.grade if course_grade else 0.0

                current_app.logger.debug("Posting grade for lis_result_sourcedid: "+lis_result_sourcedid)

                try:
                    LTIOutcome.post_replace_result(lti_consumer, lis_result_sourcedid, grade)

                except requests.exceptions.ConnectTimeout as error:
                    current_app.logger.error("Failed grade update for lis_result_sourcedid: " + lis_result_sourcedid + " with grade: "+str(grade) + ". "+str(error))
                    if not self.request.is_eager:
                        self.retry(error)

                except requests.exceptions.ConnectionError as error:
                    current_app.logger.error("Failed grade update for lis_result_sourcedid: " + lis_result_sourcedid + " with grade: "+str(grade) + ". "+str(error))
                    if not self.request.is_eager:
                        self.retry(error)

    else:
        current_app.logger.info("Failed LTI Outcomes grade update for lti_consumer with id: "+str(lti_consumer_id)+". record not found.")
예제 #2
0
    def test_post_replace_result(self):
        # no lis_outcome_service_url
        result = LTIOutcome.post_replace_result(self.lti_consumer,
                                                self.lis_result_sourcedid,
                                                self.grade)
        self.assertFalse(result)

        # add lis_outcome_service_url
        self.lti_consumer.lis_outcome_service_url = self.lis_outcome_service_url
        db.session.commit()

        # no lis_result_sourcedid
        result = LTIOutcome.post_replace_result(self.lti_consumer, "",
                                                self.grade)
        self.assertFalse(result)

        # garde < 0.0
        result = LTIOutcome.post_replace_result(self.lti_consumer,
                                                self.lis_result_sourcedid,
                                                -0.1)
        self.assertFalse(result)

        # garde > 1.0
        result = LTIOutcome.post_replace_result(self.lti_consumer,
                                                self.lis_result_sourcedid,
                                                30.0)
        self.assertFalse(result)

        # success
        result = LTIOutcome.post_replace_result(self.lti_consumer,
                                                self.lis_result_sourcedid,
                                                self.grade)
        self.assertTrue(result)
예제 #3
0
def update_lti_assignment_grades(self, lti_consumer_id, sourcedid_and_grades):
    lti_consumer = LTIConsumer.query.get(lti_consumer_id)
    if lti_consumer:
        current_app.logger.info(
            "Begin LTI Outcomes grade update for lti_consumer: {} named: {}".
            format(lti_consumer.id, lti_consumer.tool_consumer_instance_name))
        for (lis_result_sourcedid,
             assignment_grade_id) in sourcedid_and_grades:
            if assignment_grade_id:
                assignment_grade = AssignmentGrade.query.get(
                    assignment_grade_id)
                grade = 0.0
                submittedAt = None
                if assignment_grade:
                    grade = assignment_grade.grade
                    submittedAt = assignment_grade.modified.astimezone(
                    ).isoformat()

                current_app.logger.debug(
                    "Posting grade for lis_result_sourcedid: {}".format(
                        lis_result_sourcedid))
                current_app.logger.debug(
                    "Submitted At Time: {}".format(submittedAt))

                LTIOutcome.post_replace_result(lti_consumer,
                                               lis_result_sourcedid, grade,
                                               submittedAt)
    else:
        current_app.logger.info(
            "Failed LTI Outcomes grade update for lti_consumer with id: {}. record not found."
            .format(lti_consumer_id))
예제 #4
0
def update_lti_course_grades(self, lti_consumer_id, sourcedid_and_grades):
    lti_consumer = LTIConsumer.query.get(lti_consumer_id)
    if lti_consumer:
        current_app.logger.info(
            "Begin LTI Outcomes grade update for lti_consumer: {} named: {}".
            format(lti_consumer.id, lti_consumer.tool_consumer_instance_name))
        for (lis_result_sourcedid, course_grade_id) in sourcedid_and_grades:
            if course_grade_id:
                course_grade = CourseGrade.query.get(course_grade_id)
                grade = 0.0
                submittedAt = None
                if course_grade:
                    grade = course_grade.grade
                    # This is timezone unaware, so we have to add a timezone to
                    # it (to properly follow iso 8601). We convert it to the
                    # compair server timezone, on the assumption that the
                    # compair server timezone is the same as mariadb's
                    # timezone.
                    submittedAt = course_grade.modified.astimezone().isoformat(
                    )

                current_app.logger.debug(
                    "Posting grade for lis_result_sourcedid: {}".format(
                        lis_result_sourcedid))
                current_app.logger.debug(
                    "Submitted At Time: {}".format(submittedAt))

                LTIOutcome.post_replace_result(lti_consumer,
                                               lis_result_sourcedid, grade,
                                               submittedAt)

    else:
        current_app.logger.info(
            "Failed LTI Outcomes grade update for lti_consumer with id: {}. record not found."
            .format(lti_consumer_id))
예제 #5
0
def update_lti_assignment_grades(self, lti_consumer_id, sourcedid_and_grades):
    lti_consumer = LTIConsumer.query.get(lti_consumer_id)
    if lti_consumer:
        current_app.logger.info("Begin LTI Outcomes grade update for lti_consumer: {} named: {}".format(lti_consumer.id, lti_consumer.tool_consumer_instance_name))
        for (lis_result_sourcedid, assignment_grade_id) in sourcedid_and_grades:
            if assignment_grade_id:
                assignment_grade = AssignmentGrade.query.get(assignment_grade_id)
                grade = assignment_grade.grade if assignment_grade else 0.0

                current_app.logger.debug("Posting grade for lis_result_sourcedid: {}".format(lis_result_sourcedid))

                LTIOutcome.post_replace_result(lti_consumer, lis_result_sourcedid, grade)
    else:
        current_app.logger.info("Failed LTI Outcomes grade update for lti_consumer with id: {}. record not found.".format(lti_consumer_id))
예제 #6
0
def update_lti_course_grades(self, lti_consumer_id, sourcedid_and_grades):
    lti_consumer = LTIConsumer.query.get(lti_consumer_id)
    if lti_consumer:
        current_app.logger.info(
            "Begin LTI Outcomes grade update for lti_consumer: {} named: {}".
            format(lti_consumer.id, lti_consumer.tool_consumer_instance_name))
        for (lis_result_sourcedid, course_grade_id) in sourcedid_and_grades:
            if course_grade_id:
                course_grade = CourseGrade.query.get(course_grade_id)
                grade = course_grade.grade if course_grade else 0.0

                current_app.logger.debug(
                    "Posting grade for lis_result_sourcedid: {}".format(
                        lis_result_sourcedid))

                LTIOutcome.post_replace_result(lti_consumer,
                                               lis_result_sourcedid, grade)

    else:
        current_app.logger.info(
            "Failed LTI Outcomes grade update for lti_consumer with id: {}. record not found."
            .format(lti_consumer_id))
예제 #7
0
    def test_post_replace_result(self):
        # no lis_outcome_service_url
        result = LTIOutcome.post_replace_result(self.lti_consumer, self.lis_result_sourcedid, self.grade)
        self.assertFalse(result)

        # add lis_outcome_service_url
        self.lti_consumer.lis_outcome_service_url = self.lis_outcome_service_url
        db.session.commit()

        # no lis_result_sourcedid
        result = LTIOutcome.post_replace_result(self.lti_consumer, "", self.grade)
        self.assertFalse(result)

        # garde < 0.0
        result = LTIOutcome.post_replace_result(self.lti_consumer, self.lis_result_sourcedid, -0.1)
        self.assertFalse(result)

        # garde > 1.0
        result = LTIOutcome.post_replace_result(self.lti_consumer, self.lis_result_sourcedid,  30.0)
        self.assertFalse(result)

        # success
        result = LTIOutcome.post_replace_result(self.lti_consumer, self.lis_result_sourcedid, self.grade)
        self.assertTrue(result)
예제 #8
0
def update_lti_assignment_grades(self, lti_consumer_id, sourcedid_and_grades):
    lti_consumer = LTIConsumer.query.get(lti_consumer_id)
    if lti_consumer:
        current_app.logger.info(
            "Begin LTI Outcomes grade update for lti_consumer: " +
            str(lti_consumer.id) + " named: " +
            lti_consumer.tool_consumer_instance_name)
        for (lis_result_sourcedid,
             assignment_grade_id) in sourcedid_and_grades:
            if assignment_grade_id:
                assignment_grade = AssignmentGrade.query.get(
                    assignment_grade_id)
                grade = assignment_grade.grade if assignment_grade else 0.0

                current_app.logger.debug(
                    "Posting grade for lis_result_sourcedid: " +
                    lis_result_sourcedid)

                LTIOutcome.post_replace_result(lti_consumer,
                                               lis_result_sourcedid, grade)
    else:
        current_app.logger.info(
            "Failed LTI Outcomes grade update for lti_consumer with id: " +
            str(lti_consumer_id) + ". record not found.")