def process_country(raw_country): """Convert to 2-letter country, and throw out unknown countries.""" country = raw_country.strip().lower() if len(country) == 3: new_country = convert_country_3_to_2(country) if new_country: country = new_country if country not in SFDC_COUNTRIES_LIST: raise ValueError(f"{country} not in SFDC_COUNTRIES_LIST") return country
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 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