def fxa_verified(data): """Add new FxA users to an SFMC data extension""" # used to be handled by the fxa_register view email = data['email'] fxa_id = data['uid'] locale = data.get('locale') subscribe = data.get('marketingOptIn') metrics = data.get('metricsContext', {}) if not locale: statsd.incr('fxa_verified.ignored.no_locale') return # if we're not using the sandbox ignore testing domains if email_is_testing(email): return lang = get_best_language(get_accept_languages(locale)) if not lang: return _update_fxa_info(email, lang, fxa_id) if subscribe: upsert_user.delay( SUBSCRIBE, { 'email': email, 'lang': lang, 'newsletters': settings.FXA_REGISTER_NEWSLETTER, 'source_url': fxa_source_url(metrics), })
def fxa_verified(data): """Add new FxA users to an SFMC data extension""" # used to be handled by the fxa_register view email = data['email'] fxa_id = data['uid'] create_date = data.get('createDate') if create_date: create_date = datetime.fromtimestamp(create_date) locale = data.get('locale') subscribe = data.get('marketingOptIn') metrics = data.get('metricsContext', {}) service = data.get('service', '') if not locale: statsd.incr('fxa_verified.ignored.no_locale') return # if we're not using the sandbox ignore testing domains if email_is_testing(email): return lang = get_best_language(get_accept_languages(locale)) if not lang: return _update_fxa_info(email, lang, fxa_id, service, create_date) if subscribe: upsert_user.delay(SUBSCRIBE, { 'email': email, 'lang': lang, 'newsletters': settings.FXA_REGISTER_NEWSLETTER, 'source_url': fxa_source_url(metrics), })
def fxa_login(data): email = data["email"] # if we're not using the sandbox ignore testing domains if email_is_testing(email): return ua = data.get("userAgent") if ua: new_data = { "user_agent": ua, "fxa_id": data["uid"], "first_device": data["deviceCount"] == 1, "service": data.get("service", ""), "ts": data["ts"], } _add_fxa_activity(new_data) metrics = data.get("metricsContext", {}) newsletter = settings.FXA_LOGIN_CAMPAIGNS.get(metrics.get("utm_campaign")) if newsletter: upsert_user.delay( SUBSCRIBE, { "email": email, "newsletters": newsletter, "source_url": fxa_source_url(metrics), "country": data.get("countryCode", ""), }, )
def fxa_verified(data): """Add new FxA users to an SFMC data extension""" # used to be handled by the fxa_register view email = data['email'] fxa_id = data['uid'] create_date = data.get('createDate') if create_date: create_date = datetime.fromtimestamp(create_date) locale = data.get('locale') subscribe = data.get('marketingOptIn') newsletters = data.get('newsletters') metrics = data.get('metricsContext', {}) service = data.get('service', '') country = data.get('countryCode', '') if not locale: statsd.incr('fxa_verified.ignored.no_locale') return # if we're not using the sandbox ignore testing domains if email_is_testing(email): return lang = get_best_language(get_accept_languages(locale)) if not lang: return _update_fxa_info(email, lang, fxa_id, service, create_date) add_news = None if newsletters: if settings.FXA_REGISTER_NEWSLETTER not in newsletters: newsletters.append(settings.FXA_REGISTER_NEWSLETTER) add_news = ','.join(newsletters) elif subscribe: add_news = settings.FXA_REGISTER_NEWSLETTER if add_news: upsert_user.delay( SUBSCRIBE, { 'email': email, 'lang': lang, 'newsletters': add_news, 'source_url': fxa_source_url(metrics), 'country': country, }) else: record_source_url(email, fxa_source_url(metrics), 'fxa-no-optin')
def fxa_login(data): email = data['email'] # if we're not using the sandbox ignore testing domains if email_is_testing(email): return new_data = { 'user_agent': data['userAgent'], 'fxa_id': data['uid'], 'first_device': data['deviceCount'] == 1, } _add_fxa_activity(new_data) metrics = data.get('metricsContext', {}) newsletter = settings.FXA_LOGIN_CAMPAIGNS.get(metrics.get('utm_campaign')) if newsletter: upsert_user.delay(SUBSCRIBE, { 'email': email, 'newsletters': newsletter, 'source_url': fxa_source_url(metrics), })
def fxa_login(data): email = data['email'] # if we're not using the sandbox ignore testing domains if email_is_testing(email): return new_data = { 'user_agent': data['userAgent'], 'fxa_id': data['uid'], 'first_device': data['deviceCount'] == 1, 'service': data.get('service', '') } _add_fxa_activity(new_data) metrics = data.get('metricsContext', {}) newsletter = settings.FXA_LOGIN_CAMPAIGNS.get(metrics.get('utm_campaign')) if newsletter: upsert_user.delay(SUBSCRIBE, { 'email': email, 'newsletters': newsletter, 'source_url': fxa_source_url(metrics), })
def fxa_verified(data): """Add new FxA users to SFDC""" # if we're not using the sandbox ignore testing domains if email_is_testing(data["email"]): return lang = get_best_language(get_accept_languages(data.get("locale"))) if not lang or lang not in newsletter_languages(): lang = "other" email = data["email"] fxa_id = data["uid"] create_date = data.get("createDate", data.get("ts")) newsletters = data.get("newsletters") metrics = data.get("metricsContext", {}) new_data = { "email": email, "source_url": fxa_source_url(metrics), "country": data.get("countryCode", ""), "fxa_lang": data.get("locale"), "fxa_service": data.get("service", ""), "fxa_id": fxa_id, "optin": True, "format": "H", } if create_date: new_data["fxa_create_date"] = iso_format_unix_timestamp(create_date) newsletters = newsletters or [] newsletters.append(settings.FXA_REGISTER_NEWSLETTER) new_data["newsletters"] = newsletters user_data = get_fxa_user_data(fxa_id, email) # don't overwrite the user's language if already set if not (user_data and user_data.get("lang")): new_data["lang"] = lang upsert_contact(SUBSCRIBE, new_data, user_data)
def to_vendor(data): """ Take data received by basket and convert it to be sent to SFDC @param data: dict data received @return: """ data = data.copy() contact = {} if data.pop("_set_subscriber", True): contact["Subscriber__c"] = True if "email" in data: if email_is_testing(data["email"]): contact["UAT_Test_Data__c"] = True if "country" in data: data["country"] = data["country"].strip().lower() if len(data["country"]) == 3: new_country = convert_country_3_to_2(data["country"]) if new_country: data["country"] = new_country if data["country"] not in SFDC_COUNTRIES_LIST: # just don't set the country del data["country"] lang = data.get("lang") if lang: lang = lang.strip() if lang.lower() in settings.EXTRA_SUPPORTED_LANGS: pass elif is_supported_newsletter_language(lang): data["lang"] = lang[:2].lower() else: # use our default language (English) if we don't support the language data["lang"] = "en" for k, v in data.items(): v = strip_whitespace(v) if v is not None and v != "" and k in FIELD_MAP: if k in PROCESSORS_TO_VENDOR: v = PROCESSORS_TO_VENDOR[k](v) contact[FIELD_MAP[k]] = v news_map = newsletter_map() newsletters = data.get("newsletters", None) if newsletters: if isinstance(newsletters, dict): # we got newsletter slugs with boolean values for k, v in newsletters.items(): try: contact[news_map[k]] = v except KeyError: pass else: # we got a list of slugs for subscriptions for nl in newsletters: try: contact[news_map[nl]] = True except KeyError: pass # truncate long data for field, length in FIELD_MAX_LENGTHS.items(): if field in contact and len(contact[field]) > length: statsd.incr("news.backends.sfdc.data_truncated") contact[field] = contact[field][:length] return contact
def test_email_is_testing(): assert email_is_testing('*****@*****.**') assert not email_is_testing('*****@*****.**') assert not email_is_testing('*****@*****.**') assert not email_is_testing('*****@*****.**') assert not email_is_testing('*****@*****.**')
def test_email_is_testing(): assert email_is_testing("*****@*****.**") assert not email_is_testing("*****@*****.**") assert not email_is_testing("*****@*****.**") assert not email_is_testing("*****@*****.**") assert not email_is_testing("*****@*****.**")
def to_vendor(data): """ Take data received by basket and convert it to be sent to SFDC @param data: dict data received @return: """ data = data.copy() contact = {} if data.pop('_set_subscriber', True): contact['Subscriber__c'] = True if 'email' in data: if email_is_testing(data['email']): contact['UAT_Test_Data__c'] = True if 'country' in data: data['country'] = data['country'].lower() if len(data['country']) == 3: new_country = convert_country_3_to_2(data['country']) if new_country: data['country'] = new_country all_countries = product_details.get_regions('en-US').keys() if data['country'] not in all_countries: # just don't set the country del data['country'] lang = data.get('lang') if lang: if lang.lower() in settings.EXTRA_SUPPORTED_LANGS: pass elif is_supported_newsletter_language(lang): data['lang'] = lang[:2].lower() else: # use our default language (English) if we don't support the language data['lang'] = 'en' for k, v in data.iteritems(): if v and k in FIELD_MAP: if k in PROCESSORS_TO_VENDOR: v = PROCESSORS_TO_VENDOR[k](v) contact[FIELD_MAP[k]] = v news_map = newsletter_map() newsletters = data.get('newsletters', None) if newsletters: if isinstance(newsletters, dict): # we got newsletter slugs with boolean values for k, v in newsletters.items(): try: contact[news_map[k]] = v except KeyError: pass else: # we got a list of slugs for subscriptions for nl in newsletters: try: contact[news_map[nl]] = True except KeyError: pass # truncate long data for field, length in FIELD_MAX_LENGTHS.items(): if field in contact and len(contact[field]) > length: statsd.incr('news.backends.sfdc.data_truncated') contact[field] = contact[field][:length] return contact
def to_vendor(data): """ Take data received by basket and convert it to be sent to SFDC @param data: dict data received @return: """ data = data.copy() contact = {} if data.pop('_set_subscriber', True): contact['Subscriber__c'] = True if 'email' in data: if email_is_testing(data['email']): contact['UAT_Test_Data__c'] = True if 'country' in data: data['country'] = data['country'].lower() if len(data['country']) == 3: new_country = convert_country_3_to_2(data['country']) if new_country: data['country'] = new_country all_countries = product_details.get_regions('en-US').keys() if data['country'] not in all_countries: # just don't set the country del data['country'] lang = data.get('lang') if lang: if lang.lower() in settings.EXTRA_SUPPORTED_LANGS: pass elif is_supported_newsletter_language(lang): data['lang'] = lang[:2].lower() else: # use our default language (English) if we don't support the language data['lang'] = 'en' for k, v in data.iteritems(): if v != '' and k in FIELD_MAP: if k in PROCESSORS_TO_VENDOR: v = PROCESSORS_TO_VENDOR[k](v) contact[FIELD_MAP[k]] = v news_map = newsletter_map() newsletters = data.get('newsletters', None) if newsletters: if isinstance(newsletters, dict): # we got newsletter slugs with boolean values for k, v in newsletters.items(): try: contact[news_map[k]] = v except KeyError: pass else: # we got a list of slugs for subscriptions for nl in newsletters: try: contact[news_map[nl]] = True except KeyError: pass # truncate long data for field, length in FIELD_MAX_LENGTHS.items(): if field in contact and len(contact[field]) > length: statsd.incr('news.backends.sfdc.data_truncated') contact[field] = contact[field][:length] return contact