manager: improve error display in events import (#42344)

This commit is contained in:
Valentin Deniaud 2020-06-11 17:04:58 +02:00
parent 0d028dcdf2
commit d9b1a02058
2 changed files with 21 additions and 7 deletions

View File

@ -21,6 +21,7 @@ import datetime
from django import forms
from django.contrib.auth.models import Group
from django.core.exceptions import FieldDoesNotExist
from django.forms import ValidationError
from django.utils.encoding import force_text
from django.utils.timezone import make_aware
@ -345,15 +346,26 @@ class ImportEventsForm(forms.Form):
try:
event.full_clean(exclude=exclude)
except ValidationError as e:
errors = [
_('Invalid file format. (%(label)s: %(errors)s, line %(line)d)')
% {'label': label, 'errors': u', '.join(field_errors), 'line': i + 1}
for label, field_errors in e.message_dict.items()
]
errors = [_('Invalid file format:\n')]
for label, field_errors in e.message_dict.items():
label_name = self.get_verbose_name(label)
msg = _('%s: ') % label_name if label_name else ''
msg += _('%(errors)s (line %(line)d)') % {
'errors': ', '.join(field_errors),
'line': i + 1,
}
errors.append(msg)
raise ValidationError(errors)
events.append(event)
self.events = events
@staticmethod
def get_verbose_name(field_name):
try:
return Event._meta.get_field(field_name).verbose_name
except FieldDoesNotExist:
return ''
class ExceptionsImportForm(forms.ModelForm):
ics_file = forms.FileField(

View File

@ -1207,7 +1207,7 @@ def test_import_events(app, admin_user):
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10,5,' + b'x' * 151, 'text/csv')
resp = resp.form.submit(status=200)
assert 'Invalid file format. (label: Ensure this value has at most 150' in resp.text
assert 'Ensure this value has at most 150' in resp.text
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200)
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10', 'text/csv')
@ -1297,7 +1297,8 @@ def test_import_events(app, admin_user):
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200)
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10,5,label,slug', 'text/csv')
resp = resp.form.submit(status=200)
assert 'Invalid file format. (__all__: Event with this Agenda and Identifier already exists.' in resp.text
assert 'Event with this Agenda and Identifier already exists.' in resp.text
assert not '__all__' in resp.text
# additional optional attributes
Event.objects.all().delete()
@ -1330,6 +1331,7 @@ def test_import_events(app, admin_user):
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10,5,label,1234', 'text/csv')
resp = resp.form.submit(status=200)
assert 'value cannot be a number' in resp.text
assert 'Identifier:' in resp.text # verbose_name is shown, not field name ('slug:')
def test_add_meetings_agenda(app, admin_user):