def _track_user_login(user, request): """ Sends a tracking event for a successful login. """ # .. pii: Username and email are sent to Segment here. Retired directly through Segment API call in Tubular. # .. pii_types: email_address, username # .. pii_retirement: third_party segment.identify( user.id, { 'email': request.POST.get('email'), 'username': user.username }, { # Disable MailChimp because we don't want to update the user's email # and username in MailChimp on every page load. We only need to capture # this data on registration/activation. 'MailChimp': False }) segment.track( user.id, "edx.bi.user.account.authenticated", { 'category': "conversion", 'label': request.POST.get('course_id'), 'provider': None }, )
def _track_user_login(user, request): """ Sends a tracking event for a successful login. """ segment.identify( user.id, { 'email': request.POST.get('email'), 'username': user.username }, { # Disable MailChimp because we don't want to update the user's email # and username in MailChimp on every page load. We only need to capture # this data on registration/activation. 'MailChimp': False }) segment.track( user.id, "edx.bi.user.account.authenticated", { 'category': "conversion", 'label': request.POST.get('course_id'), 'provider': None }, )
def test_call_with_context(self): provided_context = {sentinel.context_key: sentinel.context_value} segment.identify(sentinel.user_id, self.properties, provided_context) self.assertTrue(self.mock_segment_identify.called) args, kwargs = self.mock_segment_identify.call_args self.assertEqual((sentinel.user_id, self.properties, provided_context), args)
def _track_user_login(user, request): """ Sends a tracking event for a successful login. """ # .. pii: Username and email are sent to Segment here. Retired directly through Segment API call in Tubular. # .. pii_types: email_address, username # .. pii_retirement: third_party segment.identify( user.id, { 'email': request.POST.get('email'), 'username': user.username }, { # Disable MailChimp because we don't want to update the user's email # and username in MailChimp on every page load. We only need to capture # this data on registration/activation. 'MailChimp': False } ) segment.track( user.id, "edx.bi.user.account.authenticated", { 'category': "conversion", 'label': request.POST.get('course_id'), 'provider': None }, )
def _track_user_registration(user, profile, params, third_party_provider): """ Track the user's registration. """ if hasattr(settings, 'LMS_SEGMENT_KEY') and settings.LMS_SEGMENT_KEY: identity_args = [ user.id, { 'email': user.email, 'username': user.username, 'name': profile.name, # Mailchimp requires the age & yearOfBirth to be integers, we send a sane integer default if falsey. 'age': profile.age or -1, 'yearOfBirth': profile.year_of_birth or datetime.datetime.now(UTC).year, 'education': profile.level_of_education_display, 'address': profile.mailing_address, 'gender': profile.gender_display, 'country': text_type(profile.country), } ] # .. pii: Many pieces of PII are sent to Segment here. Retired directly through Segment API call in Tubular. # .. pii_types: email_address, username, name, birth_date, location, gender # .. pii_retirement: third_party segment.identify(*identity_args) segment.track( user.id, "edx.bi.user.account.registered", { 'category': 'conversion', # ..pii: Learner email is sent to Segment in following line and will be associated with analytics data. 'email': user.email, 'label': params.get('course_id'), 'provider': third_party_provider.name if third_party_provider else None }, )
def _track_user_login(user, request): """ Sends a tracking event for a successful login. """ segment.identify( user.id, { 'email': request.POST.get('email'), 'username': user.username }, { # Disable MailChimp because we don't want to update the user's email # and username in MailChimp on every page load. We only need to capture # this data on registration/activation. 'MailChimp': False } ) segment.track( user.id, "edx.bi.user.account.authenticated", { 'category': "conversion", 'label': request.POST.get('course_id'), 'provider': None }, )
def _track_user_registration(user, profile, params, third_party_provider): """ Track the user's registration. """ if hasattr(settings, 'LMS_SEGMENT_KEY') and settings.LMS_SEGMENT_KEY: identity_args = [ user.id, { 'email': user.email, 'username': user.username, 'name': profile.name, # Mailchimp requires the age & yearOfBirth to be integers, we send a sane integer default if falsey. 'age': profile.age or -1, 'yearOfBirth': profile.year_of_birth or datetime.datetime.now(UTC).year, 'education': profile.level_of_education_display, 'address': profile.mailing_address, 'gender': profile.gender_display, 'country': text_type(profile.country), } ] # Provide additional context only if needed. if hasattr(settings, 'MAILCHIMP_NEW_USER_LIST_ID'): identity_args.append( {"MailChimp": { "listId": settings.MAILCHIMP_NEW_USER_LIST_ID }}) segment.identify(*identity_args) segment.track( user.id, "edx.bi.user.account.registered", { 'category': 'conversion', 'label': params.get('course_id'), 'provider': third_party_provider.name if third_party_provider else None }, )
def _track_user_registration(user, profile, params, third_party_provider): """ Track the user's registration. """ if hasattr(settings, 'LMS_SEGMENT_KEY') and settings.LMS_SEGMENT_KEY: identity_args = [ user.id, { 'email': user.email, 'username': user.username, 'name': profile.name, # Mailchimp requires the age & yearOfBirth to be integers, we send a sane integer default if falsey. 'age': profile.age or -1, 'yearOfBirth': profile.year_of_birth or datetime.datetime.now(UTC).year, 'education': profile.level_of_education_display, 'address': profile.mailing_address, 'gender': profile.gender_display, 'country': text_type(profile.country), } ] # Provide additional context only if needed. if hasattr(settings, 'MAILCHIMP_NEW_USER_LIST_ID'): identity_args.append({ "MailChimp": { "listId": settings.MAILCHIMP_NEW_USER_LIST_ID } }) # .. pii: Many pieces of PII are sent to Segment here. Retired directly through Segment API call in Tubular. # .. pii_types: email_address, username, name, birth_date, location, gender # .. pii_retirement: third_party segment.identify(*identity_args) segment.track( user.id, "edx.bi.user.account.registered", { 'category': 'conversion', # ..pii: Learner email is sent to Segment in following line and will be associated with analytics data. 'email': user.email, 'label': params.get('course_id'), 'provider': third_party_provider.name if third_party_provider else None }, )
def _track_user_registration(user, profile, params, third_party_provider): """ Track the user's registration. """ if hasattr(settings, 'LMS_SEGMENT_KEY') and settings.LMS_SEGMENT_KEY: identity_args = [ user.id, { 'email': user.email, 'username': user.username, 'name': profile.name, # Mailchimp requires the age & yearOfBirth to be integers, we send a sane integer default if falsey. 'age': profile.age or -1, 'yearOfBirth': profile.year_of_birth or datetime.datetime.now(UTC).year, 'education': profile.level_of_education_display, 'address': profile.mailing_address, 'gender': profile.gender_display, 'country': text_type(profile.country), } ] # Provide additional context only if needed. if hasattr(settings, 'MAILCHIMP_NEW_USER_LIST_ID'): identity_args.append({ "MailChimp": { "listId": settings.MAILCHIMP_NEW_USER_LIST_ID } }) segment.identify(*identity_args) segment.track( user.id, "edx.bi.user.account.registered", { 'category': 'conversion', 'label': params.get('course_id'), 'provider': third_party_provider.name if third_party_provider else None }, )
def test_normal_call(self): segment.identify(sentinel.user_id, self.properties) self.assertTrue(self.mock_segment_identify.called) args, kwargs = self.mock_segment_identify.call_args self.assertEqual((sentinel.user_id, self.properties, {}), args)
def test_null_key(self): segment.identify(sentinel.user_id, self.properties) self.assertFalse(self.mock_segment_identify.called)
def test_call_with_context(self): provided_context = {sentinel.context_key: sentinel.context_value} segment.identify(sentinel.user_id, self.properties, provided_context) self.assertTrue(self.mock_segment_identify.called) args, kwargs = self.mock_segment_identify.call_args self.assertEqual((sentinel.user_id, self.properties, provided_context), args)
def test_normal_call(self): segment.identify(sentinel.user_id, self.properties) self.assertTrue(self.mock_segment_identify.called) args, kwargs = self.mock_segment_identify.call_args self.assertEqual((sentinel.user_id, self.properties, {}), args)
def test_null_key(self): segment.identify(sentinel.user_id, self.properties) self.assertFalse(self.mock_segment_identify.called)