Exemple #1
0
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),
            })
Exemple #2
0
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),
        })
Exemple #3
0
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", ""),
            },
        )
Exemple #4
0
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')
Exemple #5
0
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),
        })
Exemple #6
0
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),
        })
Exemple #7
0
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)
Exemple #8
0
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('*****@*****.**')
Exemple #10
0
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("*****@*****.**")
Exemple #11
0
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
Exemple #12
0
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