def comparison(cls, comparison, **kwargs): result = cls.basic_attempt(comparison, None, **kwargs) result.extensions = Extensions() if not result.extensions else result.extensions winner = "Undecided" if comparison.winner == WinningAnswer.draw: winner = "Draw" elif comparison.winner == WinningAnswer.answer1: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid) elif comparison.winner == WinningAnswer.answer2: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) result.response = winner result.extensions['http://xapi.learninganalytics.ubc.ca/extension/criteria'] = {} for comparison_criterion in comparison.comparison_criteria: winner = "Undecided" if comparison_criterion.winner == WinningAnswer.answer1: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid) elif comparison_criterion.winner == WinningAnswer.answer2: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) result.extensions['http://xapi.learninganalytics.ubc.ca/extension/criteria'][ ResourceIRI.criterion(comparison_criterion.criterion_uuid)] = winner return result
def comparison(cls, comparison, current_comparison=None): attempt = None extensions = { "pairingAlgorithm": comparison.pairing_algorithm.value, "winner": "Undecided", "criteria": {}, "answers": [ ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid), ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) ], "completed": comparison.completed } if comparison.winner == WinningAnswer.draw: extensions["winner"] = "Draw" elif comparison.winner == WinningAnswer.answer1: extensions["winner"] = ResourceIRI.answer( comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid) elif comparison.winner == WinningAnswer.answer2: extensions["winner"] = ResourceIRI.answer( comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) if comparison.attempt_uuid and current_comparison: attempt = CaliperEntities.comparison_attempt( comparison, current_comparison) for comparison_criterion in comparison.comparison_criteria: winner = "Undecided" if comparison_criterion.winner == WinningAnswer.answer1: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid) elif comparison_criterion.winner == WinningAnswer.answer2: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) extensions["criteria"][ResourceIRI.criterion( comparison_criterion.criterion_uuid)] = winner return caliper.entities.Response( id=ResourceIRI.comparison(comparison.course_uuid, comparison.assignment_uuid, comparison.uuid), attempt=attempt, dateCreated=comparison.created.replace( tzinfo=pytz.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z', dateModified=comparison.modified.replace( tzinfo=pytz.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z', extensions=extensions)
def criterion(cls, criterion): return { "id": ResourceIRI.criterion(criterion.uuid), "type": CALIPER_ENTITY_TYPES["ENTITY"], "name": LearningRecord.trim_text_to_size_limit(criterion.name), "description": LearningRecord.trim_text_to_size_limit(criterion.description), "dateCreated": criterion.created.replace(tzinfo=pytz.utc).isoformat(), "dateModified": criterion.modified.replace(tzinfo=pytz.utc).isoformat(), }
def criterion(cls, criterion): return caliper.entities.DigitalResource( id=ResourceIRI.criterion(criterion.uuid), name=LearningRecord.trim_text_to_size_limit(criterion.name), description=LearningRecord.trim_text_to_size_limit( criterion.description), dateCreated=criterion.created.replace( tzinfo=pytz.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z', dateModified=criterion.modified.replace( tzinfo=pytz.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z')
def answer(cls, answer): attempt = None extensions = { "isDraft": answer.draft, } if answer.attempt_uuid: attempt = CaliperEntities.answer_attempt(answer) extensions.update(cls._basic_content_extension(answer.content)) if answer.score: score = answer.score score_details = { "algorithm": score.scoring_algorithm.value, "score": score.score, "wins": score.wins, "loses": score.loses, "rounds": score.rounds, "opponents": score.opponents, "criteria": {} } if score.scoring_algorithm == ScoringAlgorithm.true_skill: score_details['mu'] = score.variable1 score_details['sigma'] = score.variable2 extensions["scoreDetails"] = score_details for criterion_score in answer.criteria_scores: score_details = { "score": criterion_score.score, "wins": criterion_score.wins, "loses": criterion_score.loses, "rounds": criterion_score.rounds, "opponents": criterion_score.opponents, } if criterion_score.scoring_algorithm == ScoringAlgorithm.true_skill: score_details["mu"] = criterion_score.variable1 score_details["sigma"] = criterion_score.variable2 extensions["scoreDetails"]["criteria"][ResourceIRI.criterion( criterion_score.criterion_uuid)] = score_details return caliper.entities.Response( id=ResourceIRI.answer(answer.course_uuid, answer.assignment_uuid, answer.uuid), attempt=attempt, dateCreated=answer.created.replace( tzinfo=pytz.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z', dateModified=answer.modified.replace( tzinfo=pytz.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z', extensions=extensions)
def criterion(cls, criterion): activity = Activity( id=ResourceIRI.criterion(criterion.uuid), definition=ActivityDefinition( type=XAPIActivity.activity_types.get('question'), name=LanguageMap({ 'en-US': LearningRecord.trim_text_to_size_limit(criterion.name) }) ) ) if criterion.description: activity.definition.description = LanguageMap({ 'en-US': LearningRecord.trim_text_to_size_limit(criterion.description) }) return activity
def answer(cls, answer): ret = { "id": ResourceIRI.answer(answer.course_uuid, answer.assignment_uuid, answer.uuid), "type": CALIPER_ENTITY_TYPES["RESPONSE"], "dateCreated": answer.created.replace(tzinfo=pytz.utc).isoformat(), "dateModified": answer.modified.replace(tzinfo=pytz.utc).isoformat(), "extensions": { "isDraft": answer.draft } } ret["extensions"].update(cls._basic_content_extension(answer.content)) if answer.attempt_uuid: ret["attempt"] = CaliperEntities.answer_attempt(answer) if answer.score: score = answer.score score_details = { "algorithm": score.scoring_algorithm.value, "score": score.score, "wins": score.wins, "loses": score.loses, "rounds": score.rounds, "opponents": score.opponents, "criteria": {} } if score.scoring_algorithm == ScoringAlgorithm.true_skill: score_details['mu'] = score.variable1 score_details['sigma'] = score.variable2 ret["extensions"]["scoreDetails"] = score_details for criterion_score in answer.criteria_scores: score_details = { "score": criterion_score.score, "wins": criterion_score.wins, "loses": criterion_score.loses, "rounds": criterion_score.rounds, "opponents": criterion_score.opponents, } if criterion_score.scoring_algorithm == ScoringAlgorithm.true_skill: score_details["mu"] = criterion_score.variable1 score_details["sigma"] = criterion_score.variable2 ret["extensions"]["scoreDetails"]["criteria"][ResourceIRI.criterion(criterion_score.criterion_uuid)] = score_details return ret
def criterion(cls, criterion): activity = Activity( id=ResourceIRI.criterion(criterion.uuid), definition=ActivityDefinition( type=XAPIActivity.activity_types.get('question'), name=LanguageMap({ 'en-US': LearningRecord.trim_text_to_size_limit(criterion.name) }))) if criterion.description: activity.definition.description = LanguageMap({ 'en-US': LearningRecord.trim_text_to_size_limit(criterion.description) }) return activity
def comparison(cls, comparison, current_comparison=None): winner = "Undecided" if comparison.winner == WinningAnswer.draw: winner = "Draw" elif comparison.winner == WinningAnswer.answer1: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid) elif comparison.winner == WinningAnswer.answer2: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) ret = { "id": ResourceIRI.comparison(comparison.course_uuid, comparison.assignment_uuid, comparison.uuid), "type": CALIPER_ENTITY_TYPES["RESPONSE"], "dateCreated": comparison.created.replace(tzinfo=pytz.utc).isoformat(), "dateModified": comparison.modified.replace(tzinfo=pytz.utc).isoformat(), "extensions": { "pairingAlgorithm": comparison.pairing_algorithm.value, "winner": winner, "criteria": {}, "answers": [ ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid), ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) ], "completed": comparison.completed } } for comparison_criterion in comparison.comparison_criteria: winner = "Undecided" if comparison_criterion.winner == WinningAnswer.answer1: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer1_uuid) elif comparison_criterion.winner == WinningAnswer.answer2: winner = ResourceIRI.answer(comparison.course_uuid, comparison.assignment_uuid, comparison.answer2_uuid) ret["extensions"]["criteria"][ResourceIRI.criterion(comparison_criterion.criterion_uuid)] = winner if comparison.attempt_uuid and current_comparison: ret["attempt"] = CaliperEntities.comparison_attempt(comparison, current_comparison) return ret
def answer_score(cls, answer, score, **kwargs): from compair.models import ScoringAlgorithm result = cls.basic(**kwargs) result.extensions = Extensions() if not result.extensions else result.extensions result.score = Score(raw=score.score) score_details = { 'score': score.score, 'algorithm': score.scoring_algorithm.value, 'wins': score.wins, 'loses': score.loses, 'rounds': score.rounds, 'opponents': score.opponents, 'criteria': {} } if score.scoring_algorithm == ScoringAlgorithm.true_skill: score_details['mu'] = score.variable1 score_details['sigma'] = score.variable2 for criterion_score in answer.criteria_scores: criterion_score_details = { 'score': criterion_score.score, 'wins': criterion_score.wins, 'loses': criterion_score.loses, 'rounds': criterion_score.rounds, 'opponents': criterion_score.opponents, } if criterion_score.scoring_algorithm == ScoringAlgorithm.true_skill: criterion_score_details['mu'] = criterion_score.variable1 criterion_score_details['sigma'] = criterion_score.variable2 score_details['criteria'][ResourceIRI.criterion(criterion_score.criterion_uuid)] = criterion_score_details result.extensions['http://xapi.learninganalytics.ubc.ca/extension/score-details'] = score_details return result