in src/olympia/devhub/forms.py [0:0]
def clean(self):
message = _(
'Ensure name and summary combined are at most '
'{limit_value} characters (they have {show_value}).'
)
super().clean()
name_summary_locales = set(
list(self.cleaned_data.get('name', {}).keys())
+ list(self.cleaned_data.get('summary', {}).keys())
)
default_locale = self.instance.default_locale.lower()
name_values = self.cleaned_data.get('name') or {}
name_default = name_values.get(default_locale) or ''
summary_values = self.cleaned_data.get('summary') or {}
summary_default = summary_values.get(default_locale) or ''
for locale in name_summary_locales:
val_len = len(
name_values.get(locale, name_default)
+ summary_values.get(locale, summary_default)
)
if val_len > self.MAX_LENGTH:
if locale == default_locale:
# only error in default locale.
formatted_message = message.format(
limit_value=self.MAX_LENGTH, show_value=val_len
)
self.add_error(
'name',
LocaleErrorMessage(message=formatted_message, locale=locale),
)
elif self.should_auto_crop:
# otherwise we need to shorten the summary (and or name?)
if locale in name_values:
# if only default summary need to shorten name instead.
max_name_length = (
self.fields['name'].max_length
if locale in summary_values
else self.MAX_LENGTH - len(summary_default)
)
name = name_values[locale][:max_name_length]
name_length = len(name)
self.cleaned_data.setdefault('name', {})[locale] = name
else:
name_length = len(name_default)
if locale in summary_values:
max_summary_length = self.MAX_LENGTH - name_length
self.cleaned_data.setdefault('summary', {})[locale] = (
summary_values[locale][:max_summary_length]
)
return self.cleaned_data