in bedrock/newsletter/forms.py [0:0]
def __init__(self, newsletters, locale, data=None, multi_opt_in_required=False, *args, **kwargs):
regions = product_details.get_regions(locale)
regions = sorted(iter(regions.items()), key=itemgetter(1))
try:
if isinstance(newsletters, str):
newsletters = newsletters.split(",")
newsletters = validate_newsletters(newsletters)
except ValidationError:
# replace with most common good newsletter
# form validation will work with submitted data
newsletters = ["mozilla-and-you"]
is_multi_newsletter = len(newsletters) > 1
lang = locale.lower()
if "-" in lang:
lang, country = lang.split("-", 1)
else:
country = ""
regions.insert(0, ("", ftl_lazy("newsletter-form-select-country-or-region", fallback="newsletter-form-select-country")))
lang_choices = get_lang_choices(newsletters)
languages = [x[0] for x in lang_choices]
if lang not in languages:
# The lang from their locale is not one that our newsletters
# are translated into. Initialize the language field to no
# choice, to force the user to pick one of the languages that
# we do support.
lang = ""
lang_choices.insert(0, ("", ftl_lazy("newsletter-form-available-languages")))
super().__init__(data, *args, **kwargs)
required_args = {
"required": "required",
"aria-required": "true",
}
country_select_args = {"data-testid": "newsletter-country-select"}
country_widget = widgets.Select(attrs=required_args | country_select_args)
country_label = ftl_lazy("newsletter-form-select-country-or-region", fallback="newsletter-form-select-country")
self.fields["country"] = forms.ChoiceField(widget=country_widget, choices=regions, initial=country, required=False, label=country_label)
lang_widget = widgets.Select(attrs=required_args)
lang_label = ftl_lazy("newsletter-form-select-language", fallback="newsletter-form-available-languages")
self.fields["lang"] = forms.TypedChoiceField(widget=lang_widget, choices=lang_choices, initial=lang, required=False, label=lang_label)
self.fields["newsletters"].choices = [(n, self.choice_labels.get(n, n)) for n in newsletters]
# Automatically check newsletter choices unless opt-in is explicitly required.
if is_multi_newsletter and multi_opt_in_required:
self.fields["newsletters"].initial = None
else:
self.fields["newsletters"].initial = newsletters