def clean()

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