From 07d50ba7a17e240db9930cc70afb00e2ddc441c5 Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Thu, 13 Nov 2014 17:05:17 -0500 Subject: [PATCH] MA-90 Update Analytics Shim to match new mobile requirements. --- common/djangoapps/track/shim.py | 4 ++-- common/djangoapps/track/views/segmentio.py | 15 +++++++++++-- .../track/views/tests/test_segmentio.py | 21 ++++++++++--------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/common/djangoapps/track/shim.py b/common/djangoapps/track/shim.py index dd0b885a7c..8d2984cc3b 100644 --- a/common/djangoapps/track/shim.py +++ b/common/djangoapps/track/shim.py @@ -127,6 +127,6 @@ class VideoEventProcessor(object): context = event['context'] - if 'browser_page' in context: - page, _sep, _tail = context.pop('browser_page').rpartition('/') + if 'open_in_browser_url' in context: + page, _sep, _tail = context.pop('open_in_browser_url').rpartition('/') event['page'] = page diff --git a/common/djangoapps/track/views/segmentio.py b/common/djangoapps/track/views/segmentio.py index b613a75289..59e1823af2 100644 --- a/common/djangoapps/track/views/segmentio.py +++ b/common/djangoapps/track/views/segmentio.py @@ -143,9 +143,20 @@ def track_segmentio_event(request): # pylint: disable=too-many-statements raise EventValidationError(WARNING_IGNORED_TYPE) if segment_context: + # copy required fields from segment's context dict to our custom context dict + for context_field_name, segment_context_field_name in [ + ('course_id', 'course_id'), + ('open_in_browser_url', 'open_in_browser_url'), + ('agent', 'userAgent') + ]: + if segment_context_field_name in segment_context: + context[context_field_name] = segment_context[segment_context_field_name] + + # copy the entire segment's context dict as a sub-field of our custom context dict context['client'] = dict(segment_context) - context['agent'] = segment_context.get('userAgent', '') - for field in ('traits', 'integrations', 'userAgent'): + + # remove duplicate and unnecessary fields from our copy + for field in ('traits', 'integrations', 'userAgent', 'course_id', 'open_in_browser_url'): if field in context['client']: del context['client'][field] diff --git a/common/djangoapps/track/views/tests/test_segmentio.py b/common/djangoapps/track/views/tests/test_segmentio.py index 5c61229faa..1a02dfb6f5 100644 --- a/common/djangoapps/track/views/tests/test_segmentio.py +++ b/common/djangoapps/track/views/tests/test_segmentio.py @@ -114,9 +114,6 @@ class SegmentIOTrackingTestCase(EventTrackingTestCase): "properties": { 'name': kwargs.get('name', str(sentinel.name)), 'data': kwargs.get('data', {}), - 'context': { - 'course_id': kwargs.get('course_id') or '', - } }, "channel": 'server', "context": { @@ -125,6 +122,7 @@ class SegmentIOTrackingTestCase(EventTrackingTestCase): "version": "unknown" }, 'userAgent': str(sentinel.user_agent), + 'course_id': kwargs.get('course_id') or '', }, "receivedAt": "2014-08-27T16:33:39.100Z", "timestamp": "2014-08-27T16:33:39.215Z", @@ -141,7 +139,10 @@ class SegmentIOTrackingTestCase(EventTrackingTestCase): } if 'context' in kwargs: - sample_event['properties']['context'].update(kwargs['context']) + sample_event['context'].update(kwargs['context']) + + if 'open_in_browser_url' in kwargs: + sample_event['context']['open_in_browser_url'] = kwargs['open_in_browser_url'] return sample_event @@ -304,9 +305,9 @@ class SegmentIOTrackingTestCase(EventTrackingTestCase): data=self.create_segmentio_event_json( name=name, data=input_payload, + open_in_browser_url='https://testserver/courses/foo/bar/baz/courseware/Week_1/Activity/2', context={ 'course_id': course_id, - 'browser_page': 'https://testserver/courses/foo/bar/baz/courseware/Week_1/Activity/2', 'application': { 'name': 'edx.mobileapp.android', 'version': '29', @@ -342,14 +343,14 @@ class SegmentIOTrackingTestCase(EventTrackingTestCase): 'library': { 'name': 'test-app', 'version': 'unknown' + }, + 'application': { + 'name': 'edx.mobileapp.android', + 'version': '29', + 'component': 'videoplayer' } }, 'received_at': datetime.strptime("2014-08-27T16:33:39.100Z", "%Y-%m-%dT%H:%M:%S.%fZ"), - 'application': { - 'name': 'edx.mobileapp.android', - 'version': '29', - 'component': 'videoplayer' - } }, } expected_payload = {