Projet

Général

Profil

0001-manager-improve-error-display-in-events-import-42344.patch

Valentin Deniaud, 11 juin 2020 18:04

Télécharger (3,76 ko)

Voir les différences:

Subject: [PATCH] manager: improve error display in events import (#42344)

 chrono/manager/forms.py | 22 +++++++++++++++++-----
 tests/test_manager.py   |  6 ++++--
 2 files changed, 21 insertions(+), 7 deletions(-)
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
-