示例#1
0
def send_grade_update(consumer_key, consumer_secret, lis_outcome_service_url,
                      lis_result_sourcedid, score):
    """
    Send lms grade for an lti component
    :param consumer_key: lti client key
    :param consumer_secret: lti client secret
    :param lis_outcome_service_url: outcome service url to send outcome request to
    :param lis_result_sourcedid: context identifier for consumer to use
    :param score: score between 0.0 and 1.0
    :return:
    """
    outcome_request = OutcomeRequest()
    outcome_request.consumer_key = consumer_key
    outcome_request.consumer_secret = consumer_secret
    outcome_request.lis_outcome_service_url = lis_outcome_service_url
    outcome_request.lis_result_sourcedid = lis_result_sourcedid

    # construct info string for logging
    args = "score={}, lis_outcome_service_url={} lis_result_sourcedid={}, consumer_key={}, consumer_secret={}, ".format(
        score, lis_outcome_service_url, lis_result_sourcedid, consumer_key,
        consumer_secret)

    log.debug("Updating LMS grade, with parameters: {}".format(args))

    # send request to update score
    outcome_request.post_replace_result(score)

    # check out the request response
    lms_response = outcome_request.outcome_response

    # logging
    if lms_response.is_success():
        log.info("Successfully sent updated grade to LMS. {}".format(args))
    elif lms_response.is_processing():
        log.info(
            "Grade update is being processed by LMS. {}, comment: {}".format(
                args, 'processing'))
    elif lms_response.has_warning():
        log.warning(
            "Grade update response has warnings. {}, comment={}".format(
                args, 'processing'))
    else:
        log.error("Grade update request failed. {}, comment={}".format(
            args, lms_response.code_major))

    return lms_response
def update_lms_grades(request=None, sequence=None):
    """Send grade update to LMS (LTI Tool)."""
    outcome_request = OutcomeRequest().from_post_request(
        request) if request else OutcomeRequest()

    outcome_service = sequence.outcome_service
    if outcome_service is None:
        log.info(
            f"Sequence: {sequence} doesn't contain an outcome service, grade is not sent."
        )
        return
    consumer = outcome_service.lms_lti_connection

    outcome_request.consumer_key = consumer.consumer_key
    outcome_request.consumer_secret = consumer.consumer_secret
    outcome_request.lis_outcome_service_url = outcome_service.lis_outcome_service_url
    outcome_request.lis_result_sourcedid = sequence.lis_result_sourcedid

    log.debug(
        "Update LMS grades. Used sequence = {} is completed = {}, grading_policy = {}"
        .format(sequence, sequence.completed,
                sequence.collection_order.grading_policy))

    score = sequence.collection_order.grading_policy.calculate_grade(sequence)
    outcome_request.post_replace_result(score)
    lms_response = outcome_request.outcome_response
    user_id = sequence.lti_user
    if lms_response.is_success():
        log.info(
            "Successfully sent updated grade to LMS. Student:{}, grade:{}, comment: success"
            .format(user_id, score))
    elif lms_response.is_processing():
        log.info(
            "Grade update is being processed by LMS. Student:{}, grade:{}, comment: processing"
            .format(user_id, score))
    elif lms_response.has_warning():
        log.warning(
            "Grade update response has warnings. Student:{}, grade:{}, comment: warning"
            .format(user_id, score))
    else:
        log.error(
            "Grade update request failed. Student:{}, grade:{}, comment:{}".
            format(user_id, score, lms_response.code_major))
示例#3
0
    def post_grades(self, parameters):

        # Secret of the external Tool
        consumer_key = 'aef4193cf141d02a2adde6a9d5afaff028d9bf23139a4d1def1ee224f7682ca0'
        consumer_secret = 'f0b884c83c858fd8078bd187c0c54c281a32df2653401b0c415dec63580dc847'

        # Create POST-Request
        outcome_request = OutcomeRequest({
            'consumer_key':
            consumer_key,
            'consumer_secret':
            consumer_secret,
            'lis_outcome_service_url':
            parameters['lis_outcome_service_url'],
            'lis_result_sourcedid':
            parameters['lis_result_sourcedid']
        })

        # Replace result in Moodle
        outcome_response = outcome_request.post_replace_result(
            parameters['score'])