Пример #1
0
 def test_InitAsList(self):
     ctx_act = ContextActivities(
         category=ActivityList([Activity(id='categoryList')]),
         parent=ActivityList([Activity(id='parentList')]),
         grouping=ActivityList([Activity(id='groupingList')]),
         other=ActivityList([Activity(id='otherList')]))
     self.listVerificationHelper(ctx_act)
Пример #2
0
    def get_context_activities(self, event):
        parent_activities = [
            Activity(
                id='{}/courses/{}'.format(settings.OPENEDX_PLATFORM_URI, event['context']['course_id']),
                definition=course.CourseActivityDefinition(event)
            ),
        ]
        # browser source events don't know as much about their context
        if event['event_source'].lower() == 'server':
            parent_activities.append(
                Activity(
                    id=event['referer'],
                    definition=BlockActivityDefinition(event)
                ),
            )

        other_activities = [
            Activity(
                id=event['referer'],
                definition=base.ReferringActivityDefinition(event)
            ),
        ]

        return ContextActivities(
            parent=ActivityList(parent_activities),
            other=ActivityList(other_activities)
        )
Пример #3
0
    def answer_evaluation_on_criterion(cls, answer, comparison_criterion,
                                       **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is answer + criterion
            parent=ActivityList([
                Activity(id=XAPIResourceIRI.answer(answer.uuid)),
                Activity(id=XAPIResourceIRI.criterion(
                    comparison_criterion.criterion_uuid))
            ]),
            # grouping is course + assignment + assignment question
            grouping=ActivityList([
                Activity(id=XAPIResourceIRI.course(answer.course_uuid)),
                Activity(
                    id=XAPIResourceIRI.assignment(answer.assignment_uuid)),
                Activity(id=XAPIResourceIRI.assignment_question(
                    answer.assignment_uuid))
            ]),
            # other is comparison + comparison question
            other=ActivityList([
                Activity(id=XAPIResourceIRI.comparison_criterion(
                    comparison_criterion.uuid)),
                Activity(id=XAPIResourceIRI.comparison(
                    comparison_criterion.comparison_uuid)),
                Activity(id=XAPIResourceIRI.comparison_question(
                    comparison_criterion.comparison_uuid))
            ]))

        return context
 def test_extend(self):
     a1 = Activity(id='test1', object_type='Activity')
     a2 = Activity(id='test2', object_type='Activity')
     arglist = ActivityList([a1, a2])
     alist = ActivityList([Activity(id='test3')])
     alist.extend(arglist)
     self.assertEqual(len(alist), 3)
     self.assertEqual(alist[0].id, 'test3')
     self.assertEqual(alist[1].id, 'test1')
     self.assertEqual(alist[2].id, 'test2')
Пример #5
0
    def assignment_question(cls, assignment, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment
            parent=ActivityList([XAPIObject.assignment(assignment)]),
            # grouping is course
            grouping=ActivityList([XAPIObject.course(assignment.course)]))

        cls._add_sis_data(context, assignment.course)
        return context
Пример #6
0
    def assignment_question(cls, assignment, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment
            parent=ActivityList(
                [Activity(id=XAPIResourceIRI.assignment(assignment.uuid))]),
            # grouping is course
            grouping=ActivityList(
                [Activity(id=XAPIResourceIRI.course(assignment.course_uuid))]))

        return context
Пример #7
0
    def answer_attachment(cls, answer, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment answer
            parent=ActivityList([XAPIObject.answer(answer)]),
            # grouping is course + assignment + assignment question
            grouping=ActivityList([
                XAPIObject.assignment_question(answer.assignment),
                XAPIObject.assignment(answer.assignment),
                XAPIObject.course(answer.assignment.course)
            ]))

        cls._add_sis_data(context, answer.assignment.course)
        return context
Пример #8
0
 def test_InitAsEither(self):
     ctx_act = ContextActivities(
         category=ActivityList([Activity(id='categoryList')]),
         parent=Activity(id='parentActivity'),
         grouping=ActivityList([Activity(id='groupingList')]),
         other=Activity(id='otherActivity'))
     self.assertIsInstance(ctx_act, ContextActivities)
     self.assertIsInstance(ctx_act.category, ActivityList)
     self.assertEqual(ctx_act.category[0].id, 'categoryList')
     self.assertIsInstance(ctx_act.parent, ActivityList)
     self.assertEqual(ctx_act.parent[0].id, 'parentActivity')
     self.assertIsInstance(ctx_act.grouping, ActivityList)
     self.assertEqual(ctx_act.grouping[0].id, 'groupingList')
     self.assertIsInstance(ctx_act.other, ActivityList)
     self.assertEqual(ctx_act.other[0].id, 'otherActivity')
 def test_ToJSON(self):
     alist = ActivityList([{"id": "test1"}, {"id": "test2"}])
     self.assertEqual(
         json.loads(alist.to_json()),
         json.loads(
             '[{"id": "test1", "objectType": "Activity"}, {"id": "test2", "objectType": "Activity"}]'
         ))
Пример #10
0
    def get_context_activities(self):
        """
        Get context activities for xAPI transformed event.

        Returns:
            `ContextActivities`
        """
        if self.get_data('context.course_id') is not None:
            course = get_course_from_id(self.get_data('context.course_id'))
            course_name = LanguageMap({constants.EN_US: course["display_name"]})
            parent_activities = [
                Activity(
                    id=self.get_object_iri('course', self.get_data('context.course_id')),
                    object_type=constants.XAPI_ACTIVITY_COURSE,
                    definition=ActivityDefinition(
                        type=constants.XAPI_ACTIVITY_COURSE,
                        name=course_name
                    )
                ),
            ]
            return ContextActivities(
                parent=ActivityList(parent_activities),
            )
        else:
            return None
Пример #11
0
 def test_AsVersionNotEmpty(self):
     a1 = Activity(id='test1', object_type='Activity')
     a2 = Activity(id='test2', object_type='Activity')
     alist = ActivityList([a1, a2])
     check = alist.as_version()
     self.assertEqual(check,
                      [{"id": "test1", "objectType": "Activity"}, {"id": "test2", "objectType": "Activity"}])
 def test_setItemException(self):
     a1 = Activity(id='test1', object_type='Activity')
     a2 = Activity(id='test2', object_type='Activity')
     alist = ActivityList([a1, a2])
     with self.assertRaises(TypeError):
         alist[0] = 'not Activity'
     self.listVerificationHelper(alist)
 def test_appendItem(self):
     a1 = Activity(id='test1', object_type='Activity')
     a2 = Activity(id='test2', object_type='Activity')
     alist = ActivityList()
     alist.append(a1)
     alist.append(a2)
     self.listVerificationHelper(alist)
Пример #14
0
    def answer(cls, answer, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment question
            parent=ActivityList([
                Activity(id=XAPIResourceIRI.assignment_question(
                    answer.assignment_uuid))
            ]),
            # grouping is course + assignment
            grouping=ActivityList([
                Activity(id=XAPIResourceIRI.course(answer.course_uuid)),
                Activity(id=XAPIResourceIRI.assignment(answer.assignment_uuid))
            ]))

        return context
Пример #15
0
    def self_evaluation_question(cls, answer_comment, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment + answer
            parent=ActivityList([
                Activity(id=XAPIResourceIRI.assignment(
                    answer_comment.assignment_uuid)),
                Activity(id=XAPIResourceIRI.answer(answer_comment.answer_uuid))
            ]),
            # grouping is course
            grouping=ActivityList([
                Activity(id=XAPIResourceIRI.course(answer_comment.course_uuid))
            ]))

        return context
Пример #16
0
    def comparison_attempt(cls, comparison, current_comparison, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is comparison question + criterion
            parent=ActivityList([
                XAPIObject.comparison_question(comparison.assignment, current_comparison)
            ]),
            # grouping is course + assignment + answer1 + answer2
            grouping=ActivityList([
                XAPIObject.assignment(comparison.assignment),
                XAPIObject.course(comparison.assignment.course)
            ])
        )

        cls._add_sis_data(context, comparison.assignment.course)
        return context
Пример #17
0
    def self_evaluation_attempt(cls, answer_comment, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment
            parent=ActivityList([
                XAPIObject.self_evaluation_question(answer_comment.answer.assignment)
            ]),
            # grouping is course
            grouping=ActivityList([
                XAPIObject.assignment(answer_comment.answer.assignment),
                XAPIObject.course(answer_comment.answer.assignment.course)
            ])
        )

        cls._add_sis_data(context, answer_comment.answer.assignment.course)
        return context
Пример #18
0
    def _add_default(cls, user, statement):
        if not statement.timestamp:
            statement.timestamp = LearningRecord.generate_timestamp()

        if impersonation.is_impersonating() and user.id == current_user.id:
            statement.actor = XAPIActor.generate_actor(
                impersonation.get_impersonation_original_user())
        else:
            statement.actor = XAPIActor.generate_actor(user)

        # add default context info
        if not statement.context:
            statement.context = Context()

        if not statement.context.context_activities:
            statement.context.context_activities = ContextActivities()

        if not statement.context.context_activities.category:
            statement.context.context_activities.category = ActivityList()

        statement.context.context_activities.category.append(
            XAPIActivity.compair_source())

        statement.context.platform = ResourceIRI.compair()
        if not statement.context.extensions:
            statement.context.extensions = Extensions()

        statement.context.extensions[
            'http://id.tincanapi.com/extension/session-info'] = {
                'id': ResourceIRI.user_session(sess.get('session_id', '')),
                'start_at': sess.get('start_at'),
                'login_method': sess.get('login_method'),
            }
        if sess.get('end_at'):
            statement.context.extensions[
                'http://id.tincanapi.com/extension/session-info'][
                    'end_at'] = sess.get('end_at')

        if impersonation.is_impersonating() and user.id == current_user.id:
            statement.context.extensions[
                'http://id.tincanapi.com/extension/session-info'][
                    'impersonating-as'] = XAPIActor.generate_actor(
                        user).as_version()

        statement.context.extensions[
            'http://id.tincanapi.com/extension/browser-info'] = {}

        if request and request.environ.get('HTTP_USER_AGENT'):
            statement.context.extensions[
                'http://id.tincanapi.com/extension/browser-info'][
                    'user-agent'] = request.environ.get('HTTP_USER_AGENT')

        if request and request.environ.get('HTTP_REFERER'):
            statement.context.extensions[
                'http://id.tincanapi.com/extension/browser-info'][
                    'referer'] = request.environ.get('HTTP_REFERER')

        return statement
Пример #19
0
    def answer_evaluation(cls, answer, comparison, **kwargs):
        context = cls.answer(answer, **kwargs)

        context.context_activities.other = ActivityList([
            Activity(id=XAPIResourceIRI.comparison(comparison.uuid)),
            Activity(id=XAPIResourceIRI.comparison_question(comparison.uuid))
        ])

        return context
Пример #20
0
    def assignment(cls, assignment, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is course
            parent=ActivityList(
                [Activity(id=XAPIResourceIRI.course(assignment.course_uuid))]))

        return context
Пример #21
0
    def assignment(cls, assignment, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is course
            parent=ActivityList([XAPIObject.course(assignment.course)]))

        cls._add_sis_data(context, assignment.course)
        return context
 def test_insert(self):
     a1 = Activity(id='test1', object_type='Activity')
     a2 = Activity(id='test3')
     alist = ActivityList([a1, a2])
     alist.insert(1, Activity(id='test2', object_type='Activity'))
     self.assertEqual(len(alist), 3)
     self.assertEqual(alist[0].id, 'test1')
     self.assertEqual(alist[1].id, 'test2')
     self.assertEqual(alist[2].id, 'test3')
Пример #23
0
    def get_context_activities(self, event):
        parent_activities = [
            Activity(id='{}/courses/{}'.format(settings.OPENEDX_PLATFORM_URI,
                                               event['context']['course_id']),
                     definition=course.CourseActivityDefinition(event)),
            Activity(id=event['referer'],
                     definition=block.BlockActivityDefinition(event))
        ]

        return ContextActivities(parent=ActivityList(parent_activities))
Пример #24
0
    def comparison(cls, comparison, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is comparison question + criterion
            parent=ActivityList([
                Activity(
                    id=XAPIResourceIRI.comparison_question(comparison.uuid))
            ]),
            # grouping is course + assignment + answer1 + answer2
            grouping=ActivityList([
                Activity(id=XAPIResourceIRI.course(comparison.course_uuid)),
                Activity(
                    id=XAPIResourceIRI.assignment(comparison.assignment_uuid)),
                Activity(id=XAPIResourceIRI.answer(comparison.answer1_uuid)),
                Activity(id=XAPIResourceIRI.answer(comparison.answer2_uuid))
            ]))

        return context
Пример #25
0
    def answer(cls, answer, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment question
            parent=ActivityList(
                [XAPIObject.assignment_question(answer.assignment)]),
            # grouping is course + assignment
            grouping=ActivityList([
                XAPIObject.assignment(answer.assignment),
                XAPIObject.course(answer.assignment.course)
            ]))

        if answer.attempt_uuid:
            context.context_activities.parent.append(
                XAPIObject.answer_attempt(answer))

        cls._add_sis_data(context, answer.assignment.course)
        return context
Пример #26
0
    def evaluation_response(cls, answer_comment, evaluation_number, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is assignment
            parent=ActivityList([
                XAPIObject.evaluation_question(answer_comment.answer.assignment, evaluation_number),
                XAPIObject.answer(answer_comment.answer)
            ]),
            # grouping is course
            grouping=ActivityList([
                XAPIObject.assignment(answer_comment.answer.assignment),
                XAPIObject.course(answer_comment.answer.assignment.course)
            ])
        )

        if answer_comment.attempt_uuid and evaluation_number:
            context.context_activities.parent.append(XAPIObject.evaluation_attempt(answer_comment, evaluation_number))

        cls._add_sis_data(context, answer_comment.answer.assignment.course)
        return context
Пример #27
0
    def self_evaluation_response(cls, answer_comment, **kwargs):
        context = cls.basic(**kwargs)

        context.context_activities = ContextActivities(
            # parent is self-evaulation question
            parent=ActivityList([
                XAPIObject.self_evaluation_question(answer_comment.answer.assignment),
                XAPIObject.answer(answer_comment.answer)
            ]),
            # grouping is course + assignment + answer
            grouping=ActivityList([
                XAPIObject.assignment(answer_comment.answer.assignment),
                XAPIObject.course(answer_comment.answer.assignment.course)
            ])
        )

        if answer_comment.attempt_uuid:
            context.context_activities.parent.append(XAPIObject.self_evaluation_attempt(answer_comment))

        cls._add_sis_data(context, answer_comment.answer.assignment.course)
        return context
Пример #28
0
    def _add_default(cls, user, statement):
        if not statement.timestamp:
            statement.timestamp = datetime.datetime.now().replace(
                tzinfo=pytz.utc).isoformat()

        if impersonation.is_impersonating() and user.id == current_user.id:
            statement.actor = XAPIActor.generate_actor(
                impersonation.get_impersonation_original_user())
        else:
            statement.actor = XAPIActor.generate_actor(user)

        # add default context info
        if not statement.context:
            statement.context = Context()

        if not statement.context.context_activities:
            statement.context.context_activities = ContextActivities()

        if not statement.context.context_activities.category:
            statement.context.context_activities.category = ActivityList()

        statement.context.context_activities.category.append(
            XAPIActivity.compair_source())

        statement.context.platform = XAPIResourceIRI.compair()

        if request and request.environ.get('HTTP_USER_AGENT'):
            if not statement.context.extensions:
                statement.context.extensions = Extensions()
            browser_info_key = XAPIExtension.context_extensions.get(
                'browser information')
            statement.context.extensions[
                browser_info_key] = request.environ.get('HTTP_USER_AGENT')

        if request and request.environ.get('HTTP_REFERER'):
            if not statement.context.extensions:
                statement.context.extensions = Extensions()
            referer_key = XAPIExtension.context_extensions.get('referer')
            statement.context.extensions[referer_key] = request.environ.get(
                'HTTP_REFERER')

        if impersonation.is_impersonating() and user.id == current_user.id:
            if not statement.context.extensions:
                statement.context.extensions = Extensions()
            impersonating_as_key = XAPIExtension.context_extensions.get(
                'impersonating as')
            statement.context.extensions[
                impersonating_as_key] = XAPIActor.generate_actor(user)

        return statement
Пример #29
0
    def get_context_activities(self, event):
        parent_activities = [
            Activity(id='{}/courses/{}'.format(settings.OPENEDX_PLATFORM_URI,
                                               event['context']['course_id']),
                     definition=course.CourseActivityDefinition(event)),
        ]
        parent = settings.OPENEDX_PLATFORM_URI + ':18010/container/' + event[
            'context']['parent']['usage_key']
        #parent = event['context']['parent']['usage_key'] #FOR TEST
        parent_activities.append(
            Activity(id=parent,
                     definition=block.BlockAssessmentDefinition(
                         event['context']['parent'])), )

        return ContextActivities(parent=ActivityList(parent_activities))
Пример #30
0
    def _add_sis_data(cls, context, course):
        if course.lti_has_sis_data:
            if not context.context_activities:
                context.context_activities = ContextActivities()

            if not context.context_activities.grouping:
                context.context_activities.grouping = ActivityList()

            sis_data = course.lti_sis_data
            context.extensions = Extensions() if not context.extensions else context.extensions
            context.extensions['sis_courses'] = []
            for sis_course_id, sis_section_ids in sis_data.items():
                context.extensions['sis_courses'].append({
                    'id': sis_course_id,
                    'section_ids': sis_section_ids
                })