def do_submission_hooks(the_item: SurveyBase, submission_data: dict, actor: Party = None): assert not isinstance(the_item, Question) # no submission hooks for single questions hook_configuration = get_hook_configuration(the_item) if hook_configuration is None: return score = hook_configuration['scoring_strategy'].score_item(submission_data) actor = get_current_user_as_actor( ) if actor is None else get_party_as_actor(actor) verb = XApiVerb(XApiVerbs.Answered) activity = get_xapi_object(the_item) result = XApiScoredResult(score, hook_configuration['score_min'], hook_configuration['score_max'], 1) context = XApiSurveyContext(the_item) statement = XApiStatement(actor, verb, activity, result, context) questionnaire = get_questionnaire(the_item) XApiPublisher().enqueue_deferred([statement], get_xapi_target(the_item), questionnaire.id)
def publish_lti_launch_xapi_statement(sender: DataSubject, questionnaire=None): actor = get_party_as_actor(sender) verb = XApiVerb(XApiVerbs.Accessed) activity = get_xapi_object(questionnaire) context = XApiSt3k101Context() statement = XApiStatement(actor, verb, activity, xapi_context=context) XApiPublisher().enqueue([statement], g._config['XAPI_DEFAULT_ENDPOINT'])
def __init__(self, datasubject: DataSubject, question: Question, value: int): super(XApiAnswerSubmittedStatement, self).__init__( get_party_as_actor(datasubject), XApiVerb(XApiVerbs.Answered), get_xapi_object(question), xapi_context=XApiSurveyContext(question), xapi_result=XApiScoredResult(value, question.range_start, question.range_end, 1) )
def publish_questionnaire_retracted_xapi_statement(sender: Questionnaire): actor = get_current_user_as_actor() verb = XApiVerb(XApiVerbs.RetractedSurvey) activity = get_xapi_object(sender) context = XApiSt3k101Context() receiver = get_xapi_target(sender) statement = XApiStatement(actor, verb, activity, xapi_context=context) XApiPublisher().enqueue([statement], receiver)
def __init__(self, party: Party): super(XApiLoggedInStatement, self).__init__( get_party_as_actor(party), XApiVerb(XApiVerbs.LoggedIn), XApiActivityObject( XApiActivities.Login, "{}/#/private".format(g._config['DOMAIN_NAME']), # TODO: replace hard coded url with something more useful { "en-US": "St3k101 login view" } ), xapi_context=XApiSt3k101Context() )
def publish_reference_id_updated_xapi_statement(sender: SurveyBase, previous_value: str = "Missing" ): actor = get_current_user_as_actor() verb = XApiVerb(XApiVerbs.ChangedReferenceId) activity = None if isinstance(sender, Question): activity = XApiActivities.Question elif isinstance(sender, Dimension): activity = XApiActivities.Dimension elif isinstance(sender, Questionnaire): activity = XApiActivities.Questionnaire assert activity is not None previous_value = "<{}>:{}".format(sender.owning_dataclient.email, previous_value) activity = XApiActivityObject(activity, previous_value, sender.name_translations) result = XApiResponseResult("<{}>:{}".format( sender.owning_dataclient.email, sender.reference_id)) context = XApiSt3k101Context() receiver = get_xapi_target(sender) statement = XApiStatement(actor, verb, activity, result, context) XApiPublisher().enqueue([statement], receiver)
def __init__(self, statement_id: UUID): super(XApiVoidStatement, self).__init__(get_current_user_as_actor(), XApiVerb(XApiVerbs.Voided), XApiStatementRefObject(statement_id=statement_id), xapi_context=XApiSt3k101Context())