Пример #1
0
 def get_verb(self):
     """
     Get verb for course enrollment statement.
     """
     return Verb(
         id=X_API_VERB_REGISTERED,
         display=LanguageMap({'en-US': 'registered'}),
     )
Пример #2
0
class CourseGradePassedFirstTimeTransformer(BaseEnrollmentTransformer):
    """
    Transformers for event generated when learner pass course grade first time from a course.
    """
    verb = Verb(
        id=constants.XAPI_VERB_PASSED,
        display=LanguageMap({constants.EN: constants.PASSED}),
    )
Пример #3
0
class EnrollmentDeactivatedTransformer(BaseEnrollmentTransformer):
    """
    Transformers for event generated when learner un-enrolls from a course.
    """
    verb = Verb(
        id=constants.XAPI_VERB_UNREGISTERED,
        display=LanguageMap({constants.EN: constants.UNREGISTERED}),
    )
Пример #4
0
 def get_verb(self, event):
     return Verb(
         id=constants.XAPI_VERB_COMPLETED,
         display=LanguageMap({
             'en-US': 'completed',
             'ru-RU': 'завершен'
         }),
     )
 def get_verb(self):
     """
     Get verb for the statement.
     """
     return Verb(
         id=X_API_VERB_COMPLETED,
         display=LanguageMap({'en-US': 'completed'}),
     )
Пример #6
0
 def get_verb(self, event):
     return Verb(
         id=constants.XAPI_VERB_UNREGISTERED,
         display=LanguageMap({
             'en-US': 'unenrolled',
             'en-GB': 'unenroled'
         }),
     )
Пример #7
0
 def get_verb(self, event):
     return Verb(
         id=constants.XAPI_VERB_FAILED,
         display=LanguageMap({
             'en-US': 'failed',
             'ru-RU': u'отчислен'
         }),
     )
Пример #8
0
 def get_verb(self, event):
     return Verb(
         id=constants.XAPI_VERB_EXITED,
         display=LanguageMap({
             'en-US': 'exited',
             'ru-RU': u'отчислился'
         }),
     )
Пример #9
0
 def get_verb(self, event):
     return Verb(
         id=constants.XAPI_VERB_REGISTERED,
         display=LanguageMap({
             'en-US': 'registered',
             'ru-RU': u'записался'
         }),
     )
Пример #10
0
 def get_verb(self, event):
     return Verb(
         id=constants.XAPI_VERB_ATTACHED,
         display=LanguageMap({
             'en-US': 'attached',
             'ru-RU': 'приложен'
         }),
     )
Пример #11
0
    def generate(cls, verb):
        if cls._validate_verb(verb):
            verb_id = cls.verbs.get(verb)
            return Verb(
                id=verb_id,
                display=LanguageMap({ 'en-US': verb })
            )

        return None
Пример #12
0
 def sendstatement_joined_session(self, conn):
     verb = Verb(
         id='http://activitystrea.ms/schema/1.0/join',
         display=LanguageMap({'en-US': 'joined'}),
     )
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._session_object)
     self._send_to_LRS(statement)
Пример #13
0
 def sendstatement_presentation_unloaded(self, conn):
     verb = Verb(
         id='https://iltserver.com/verbs/unloaded',
         display=LanguageMap({'en-US': 'unloaded'}),
     )
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._presentation_object)
     self._send_to_LRS(statement)
Пример #14
0
 def sendstatement_presentation_launched(self, conn):
     verb = Verb(
         id='http://adlnet.gov/expapi/verbs/launched',
         display=LanguageMap({'en-US': 'launched'}),
     )
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._presentation_object)
     self._send_to_LRS(statement)
 def test_InitVerb(self):
     statement = Statement(verb=Verb(id='test'))
     self.assertIsNone(statement.id)
     self.assertIsNone(statement.actor)
     self.assertIsNone(statement.object)
     self.assertIsNone(statement.timestamp)
     self.assertIsNone(statement.stored)
     self.assertIsNone(statement.authority)
     self.verbVerificationHelper(statement.verb)
Пример #16
0
 def get_verb(self, event):
     event_type = event['event_type'].replace("xblock-video.", "")
     try:
         verb_props = VIDEO_STATE_CHANGE_VERB_MAP[event_type]
     except KeyError:
         return None
     return Verb(
         id=verb_props['id'],
         display=verb_props['display'],
     )
Пример #17
0
 def sendstatement_initialized_presentation(self, conn):
     # sent when a participant's browser has finished loading the revealjs presentation
     verb = Verb(
         id='http://adlnet.gov/expapi/verbs/initialized',
         display=LanguageMap({'en-US': 'initialized'}),
     )
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._presentation_object)
     self._send_to_LRS(statement)
Пример #18
0
 def test_ToJSON(self):
     substatement = SubStatement(object_type='SubStatement',
                                 actor=Agent(name='test'),
                                 verb=Verb(id='test'),
                                 object=Activity(id='test'))
     self.assertEqual(
         json.loads(substatement.to_json()),
         json.loads(
             '{"verb": {"id": "test"}, "object": {"id": "test", "objectType": "Activity"}, '
             '"actor": {"name": "test", "objectType": "Agent"}, "objectType": "SubStatement"}'
         ))
Пример #19
0
    def setUp(self):
        self.endpoint = lrs_properties.endpoint
        self.version = lrs_properties.version
        self.username = lrs_properties.username
        self.password = lrs_properties.password
        self.lrs = RemoteLRS(
            version=self.version,
            endpoint=self.endpoint,
            username=self.username,
            password=self.password,
        )

        self.agent = Agent(mbox="mailto:[email protected]")
        self.agent2 = Agent(mbox="mailto:[email protected]")
        self.verb = Verb(id="http://adlnet.gov/expapi/verbs/experienced",
                         display=LanguageMap({"en-US": "experienced"}))

        self.group = Group(member=[self.agent, self.agent2])

        self.activity = Activity(
            id="http://tincanapi.com/TinCanPython/Test/Unit/0",
            definition=ActivityDefinition())
        self.activity.definition.type = "http://id.tincanapi.com/activitytype/unit-test"
        self.activity.definition.name = LanguageMap({"en-US": "Python Tests"})
        self.activity.definition.description = LanguageMap(
            {"en-US": "Unit test in the test suite for the Python library"})
        self.activity.object_type = 'Activity'

        self.parent = Activity(id="http://tincanapi.com/TinCanPython/Test",
                               definition=ActivityDefinition())
        self.parent.definition.type = "http://id.tincanapi.com/activitytype/unit-test-suite"
        self.parent.definition.name = LanguageMap({"en-US": "Python Tests"})
        self.parent.definition.description = LanguageMap(
            {"en-US": "Unit test in the test suite for the Python library"})
        self.parent.object_type = 'Activity'

        self.statement_ref = StatementRef(id=uuid.uuid4())

        self.context = Context(registration=uuid.uuid4(),
                               statement=self.statement_ref)
        # self.context.context_activities = ContextActivities(parent=[self.parent])

        self.score = Score(raw=97, scaled=0.97, max=100, min=0)

        self.result = Result(score=self.score,
                             success=True,
                             completion=True,
                             duration="PT120S")

        self.substatement = SubStatement(
            actor=self.agent,
            verb=self.verb,
            object=self.activity,
        )
Пример #20
0
 def sendstatement_completed_slide(self, conn, slide_info):
     # sent when a participant's presentation leaves the current slide (we want to record duration)
     # slide_info includes title (could be None) indexh and indexv
     verb = Verb(
         id='http://adlnet.gov/expapi/verbs/completed',
         display=LanguageMap({'en-US': 'completed'}),
     )
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._make_slide_object(slide_info))
     self._send_to_LRS(statement)
Пример #21
0
 def get_verb(self, event):
     event_type = event['event_type'].replace("xblock-video.", "")
     try:
         verb_props = VIDEO_STATE_CHANGE_VERB_MAP[event_type]
     except KeyError:
         return exceptions.XAPIBridgeSkippedConversion(
             "unhandled video event: {}".event_type)
     return Verb(
         id=verb_props['id'],
         display=verb_props['display'],
     )
Пример #22
0
    def test_build_statement(self):
        """
        The build_statement function should return a valid tincan
        Statement.
        """
        user = UserFactory()

        verb = Verb(
            id="https://activitystrea.ms/schema/1.0/create",
            display=LanguageMap({"en-US": "created"}),
        )
        activity = Activity(
            id=f"id://ashley/topic/{uuid.uuid4()}",
            definition=ActivityDefinition(
                name=LanguageMap({"en-US": "test topic"}),
                type="http://id.tincanapi.com/activitytype/discussion",
            ),
        )
        context = Context(context_activities=ContextActivities(parent=[
            Activity(
                id=f"uuid://{uuid.uuid4()}",
                definition=ActivityDefinition(
                    name=LanguageMap({"en-US": "test forum"}),
                    type="http://id.tincanapi.com/activitytype/community-site",
                ),
            )
        ]))

        statement1 = build_statement(user, verb, activity, context)
        statement2 = build_statement(user, verb, activity, context)

        # The function should generate a random, non empty uuid as a
        # statement ID
        self.assertIsInstance(statement1.id, uuid.UUID)
        self.assertIsInstance(statement2.id, uuid.UUID)
        self.assertNotEqual(statement1.id, statement2.id)

        # The statement id can also be specified
        statement3_id = uuid.uuid4()
        statement3 = build_statement(user, verb, activity, context,
                                     statement3_id)
        self.assertEqual(statement3_id, statement3.id)

        # The verb, object and context should correspond to the given arguments
        self.assertEqual(statement1.verb, verb)
        self.assertEqual(statement1.object, activity)
        self.assertEqual(statement1.context, context)

        # The Actor part of the statement should reflect the user passed as an
        # argument
        self.assertEqual(statement1.actor.account.name,
                         user.lti_remote_user_id)
        self.assertEqual(statement1.actor.account.home_page,
                         user.lti_consumer.url)
Пример #23
0
 def sendstatement_attempted_slide(self, conn, slide_info):
     # sent when a participant's presentation arrives at another slide
     # slide_info includes title (could be None) indexh and indexv
     # need to recalculate the id!
     verb = Verb(
         id='http://adlnet.gov/expapi/verbs/attempted',
         display=LanguageMap({'en-US': 'attempted'}),
     )
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._make_slide_object(slide_info))
     self._send_to_LRS(statement)
Пример #24
0
def track_forum_view(sender, forum, user, request, response, **kwargs):
    """Log a XAPI statement when a user views a forum."""

    parent_activities = None

    consumer = getattr(user, "lti_consumer", None)
    if consumer is None:
        logger.warning("Unable to get LTI consumer of user %s", user)
        return
    xapi_logger = logging.getLogger(f"xapi.{user.lti_consumer.slug}")

    verb = Verb(
        id="http://id.tincanapi.com/verb/viewed",
        display=LanguageMap({"en-US": "viewed"}),
    )

    obj = Activity(
        id=f"id://ashley/forum/{forum.pk}",
        definition=ActivityDefinition(
            name=LanguageMap(
                {to_locale(settings.LANGUAGE_CODE).replace("_", "-"): forum.name}
            ),
            type="http://id.tincanapi.com/activitytype/community-site",
        ),
    )

    if request.forum_permission_handler.current_lti_context_id is not None:
        try:
            lti_context = LTIContext.objects.get(
                pk=request.forum_permission_handler.current_lti_context_id
            )
            parent_activities = [
                Activity(
                    id=lti_context.lti_id,
                    definition=ActivityDefinition(
                        type="http://adlnet.gov/expapi/activities/course"
                    ),
                )
            ]

        except LTIContext.DoesNotExist:
            pass

    if parent_activities is not None:
        context = Context(
            context_activities=ContextActivities(parent=parent_activities),
        )
    else:
        context = None

    statement = build_statement(user, verb, obj, context)
    if statement:
        xapi_logger.info(statement.to_json())
Пример #25
0
 def sendstatement_unlocked_followme(self, conn):
     # the object of this statement is the presentation, in the context of session
     verb = Verb(
         id='http://adlnet.gov/expapi/verbs/interacted',
         display=LanguageMap({'en-US': 'interacted'}),
     )
     result_obj = Result(extensions=Extensions(
         {'https://iltserver.com/extensions/follow-me': 'off'}))
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._presentation_object,
                           result=result_obj)
     self._send_to_LRS(statement)
Пример #26
0
 def sendstatement_session_started(self):
     aname = 'sysadmin'
     actor = Agent(
         name=aname,
         mbox='mailto:' + aname + '@iltserver.com',
     )
     verb = Verb(
         id='http://activitystrea.ms/schema/1.0/start',
         display=LanguageMap({'en-US': 'started'}),
     )
     statement = Statement(actor=actor,
                           verb=verb,
                           object=self._session_object)
     self._send_to_LRS(statement)
Пример #27
0
 def sendstatement_session_ended(self):
     aname = 'sysadmin'
     actor = Agent(
         name=aname,
         mbox='mailto:' + aname + '@iltserver.com',
     )
     verb = Verb(
         id='http://adlnet.gov/expapi/verbs/terminated',
         display=LanguageMap({'en-US': 'terminated'}),
     )
     statement = Statement(actor=actor,
                           verb=verb,
                           object=self._session_object)
     self._send_to_LRS(statement)
Пример #28
0
 def sendstatement_sync_all_to_instructor(self, conn):
     # the object of this statement is the presentation, in the context of session
     verb = Verb(
         id='http://adlnet.gov/expapi/verbs/interacted',
         display=LanguageMap({'en-US': 'interacted'}),
     )
     result_obj = Result(extensions=Extensions({
         'https://iltserver.com/extensions/sync-all-to-instructor':
         'request'
     }))
     statement = Statement(actor=conn._actor,
                           verb=verb,
                           object=self._presentation_object,
                           result=result_obj)
     self._send_to_LRS(statement)
Пример #29
0
    def get_verb(self):
        """
        Get verb for xAPI transformed event.

        Returns:
            `Verb`
        """
        event_name = self.get_data('name', True)

        if self.get_data('context.event_source') == 'browser' and event_name == 'problem_check':
            verb = self.verb_map['problem_check_browser']
        else:
            verb = self.verb_map[event_name]

        return Verb(
            id=verb['id'],
            display=LanguageMap({constants.EN: verb['display']})
        )
Пример #30
0
def create_statement(arbtt_csv_entry):
    """Creates a Tincan statement from arbtt csv input"""

    arbtt_record = ArbttRecord(arbtt_csv_entry)
    app = arbtt_record.application
    duration = arbtt_record.duration

    # XXX: Look for a cleaner way to get user details
    user = os.environ['LOGNAME']
    email_address = "*****@*****.**" % (user, )

    actor = Agent(
        name=user,
        mbox='mailto:' + email_address,
    )

    verb = Verb(
        id='http://adlnet.gov/expapi/verbs/interacted',
        display=LanguageMap({'en-US': 'interacted'}),
    )

    # Get activity from config or set the activity as 'unknown'
    activity_from_map = activity_map.get(app, "unknown")

    object = Activity(
        id=os.path.join(lrs['activities_uri'], activity_from_map),
        definition=ActivityDefinition(
            name=LanguageMap({'en-US': activity_from_map}),
            extensions=Extensions(
                {'http://id.tincanapi.com/extension/duration': duration}, ),
        ),
    )

    context = Context(platform=app)

    # Construct the statement
    return Statement(
        actor=actor,
        verb=verb,
        object=object,
        context=context,
    )