manager: improve error display in events import (#42344)
This commit is contained in:
parent
0d028dcdf2
commit
d9b1a02058
|
@ -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(
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue