0001-manager-improve-error-display-in-events-import-42344.patch
chrono/manager/forms.py | ||
---|---|---|
21 | 21 | |
22 | 22 |
from django import forms |
23 | 23 |
from django.contrib.auth.models import Group |
24 |
from django.core.exceptions import FieldDoesNotExist |
|
24 | 25 |
from django.forms import ValidationError |
25 | 26 |
from django.utils.encoding import force_text |
26 | 27 |
from django.utils.timezone import make_aware |
... | ... | |
345 | 346 |
try: |
346 | 347 |
event.full_clean(exclude=exclude) |
347 | 348 |
except ValidationError as e: |
348 |
errors = [ |
|
349 |
_('Invalid file format. (%(label)s: %(errors)s, line %(line)d)') |
|
350 |
% {'label': label, 'errors': u', '.join(field_errors), 'line': i + 1} |
|
351 |
for label, field_errors in e.message_dict.items() |
|
352 |
] |
|
349 |
errors = [_('Invalid file format:\n')] |
|
350 |
for label, field_errors in e.message_dict.items(): |
|
351 |
label_name = self.get_verbose_name(label) |
|
352 |
msg = _('%s: ') % label_name if label_name else '' |
|
353 |
msg += _('%(errors)s (line %(line)d)') % { |
|
354 |
'errors': ', '.join(field_errors), |
|
355 |
'line': i + 1, |
|
356 |
} |
|
357 |
errors.append(msg) |
|
353 | 358 |
raise ValidationError(errors) |
354 | 359 |
events.append(event) |
355 | 360 |
self.events = events |
356 | 361 | |
362 |
@staticmethod |
|
363 |
def get_verbose_name(field_name): |
|
364 |
try: |
|
365 |
return Event._meta.get_field(field_name).verbose_name |
|
366 |
except FieldDoesNotExist: |
|
367 |
return '' |
|
368 | ||
357 | 369 | |
358 | 370 |
class ExceptionsImportForm(forms.ModelForm): |
359 | 371 |
ics_file = forms.FileField( |
tests/test_manager.py | ||
---|---|---|
1011 | 1011 | |
1012 | 1012 |
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10,5,' + b'x' * 151, 'text/csv') |
1013 | 1013 |
resp = resp.form.submit(status=200) |
1014 |
assert 'Invalid file format. (label: Ensure this value has at most 150' in resp.text
|
|
1014 |
assert 'Ensure this value has at most 150' in resp.text |
|
1015 | 1015 | |
1016 | 1016 |
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) |
1017 | 1017 |
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10', 'text/csv') |
... | ... | |
1101 | 1101 |
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) |
1102 | 1102 |
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10,5,label,slug', 'text/csv') |
1103 | 1103 |
resp = resp.form.submit(status=200) |
1104 |
assert 'Invalid file format. (__all__: Event with this Agenda and Identifier already exists.' in resp.text |
|
1104 |
assert 'Event with this Agenda and Identifier already exists.' in resp.text |
|
1105 |
assert not '__all__' in resp.text |
|
1105 | 1106 | |
1106 | 1107 |
# additional optional attributes |
1107 | 1108 |
Event.objects.all().delete() |
... | ... | |
1134 | 1135 |
resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10,5,label,1234', 'text/csv') |
1135 | 1136 |
resp = resp.form.submit(status=200) |
1136 | 1137 |
assert 'value cannot be a number' in resp.text |
1138 |
assert 'Identifier:' in resp.text # verbose_name is shown, not field name ('slug:') |
|
1137 | 1139 | |
1138 | 1140 | |
1139 | 1141 |
def test_add_meetings_agenda(app, admin_user): |
1140 |
- |