Projet

Général

Profil

0001-manager-report-errors-in-CSV-import-using-event-inde.patch

Valentin Deniaud, 21 septembre 2022 16:57

Télécharger (4,54 ko)

Voir les différences:

Subject: [PATCH] manager: report errors in CSV import using event indexes
 (#66184)

 chrono/manager/forms.py     | 18 +++++++++++-------
 tests/manager/test_event.py |  2 +-
 2 files changed, 12 insertions(+), 8 deletions(-)
chrono/manager/forms.py
27 27
from django import forms
28 28
from django.conf import settings
29 29
from django.contrib.auth.models import Group
30
from django.contrib.humanize.templatetags.humanize import ordinal
30 31
from django.core.exceptions import FieldDoesNotExist
31 32
from django.core.validators import URLValidator
32 33
from django.db import transaction
......
1092 1093
            if not csvline:
1093 1094
                continue
1094 1095
            if len(csvline) < 3:
1095
                raise ValidationError(_('Invalid file format. (line %d)') % (i + 1))
1096
                raise ValidationError(_('Invalid file format. (%s event)') % ordinal(i + 1))
1096 1097
            if i == 0 and csvline[0].strip('#') in ('date', 'Date', _('date'), _('Date')):
1097 1098
                continue
1098 1099

  
......
1146 1147
                event.start_datetime = event_datetime
1147 1148
                break
1148 1149
            else:
1149
                raise ValidationError(_('Invalid file format. (date/time format, line %d)') % (i + 1))
1150
                raise ValidationError(_('Invalid file format. (date/time format, %s event)') % ordinal(i + 1))
1150 1151
            try:
1151 1152
                event.places = int(csvline[2])
1152 1153
            except ValueError:
1153
                raise ValidationError(_('Invalid file format. (number of places, line %d)') % (i + 1))
1154
                raise ValidationError(_('Invalid file format. (number of places, %s event)') % ordinal(i + 1))
1154 1155
            if len(csvline) >= 4:
1155 1156
                try:
1156 1157
                    event.waiting_list_places = int(csvline[3])
1157 1158
                except ValueError:
1158 1159
                    raise ValidationError(
1159
                        _('Invalid file format. (number of places in waiting list, line %d)') % (i + 1)
1160
                        _('Invalid file format. (number of places in waiting list, %s event)')
1161
                        % ordinal(i + 1)
1160 1162
                    )
1161 1163

  
1162 1164
            column_index = 7
......
1183 1185
                    except ValueError:
1184 1186
                        continue
1185 1187
                else:
1186
                    raise ValidationError(_('Invalid file format. (date/time format, line %d)') % (i + 1))
1188
                    raise ValidationError(
1189
                        _('Invalid file format. (date/time format, %s event)') % ordinal(i + 1)
1190
                    )
1187 1191

  
1188 1192
            if len(csvline) >= 11 and csvline[10]:  # duration is optional
1189 1193
                try:
1190 1194
                    event.duration = int(csvline[10])
1191 1195
                except ValueError:
1192
                    raise ValidationError(_('Invalid file format. (duration, line %d)') % (i + 1))
1196
                    raise ValidationError(_('Invalid file format. (duration, %s event)') % ordinal(i + 1))
1193 1197

  
1194 1198
            try:
1195 1199
                event.full_clean(exclude=['desk', 'meeting_type', 'primary_event'])
......
1198 1202
                for label, field_errors in e.message_dict.items():
1199 1203
                    label_name = self.get_verbose_name(label)
1200 1204
                    msg = _('%s: ') % label_name if label_name else ''
1201
                    msg += _('%(errors)s (line %(line)d)') % {
1205
                    msg += _('%(errors)s (event %(line)d)') % {
1202 1206
                        'errors': ', '.join(field_errors),
1203 1207
                        'line': i + 1,
1204 1208
                    }
tests/manager/test_event.py
784 784

  
785 785
    resp.form['events_csv_file'] = Upload('t.csv', b'2016-14-16,18:00,10', 'text/csv')
786 786
    resp = resp.form.submit(status=200)
787
    assert 'Invalid file format. (date/time format' in resp.text
787
    assert 'Invalid file format. (date/time format, 1st event)' in resp.text
788 788

  
789 789
    resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,blah', 'text/csv')
790 790
    resp = resp.form.submit(status=200)
791
-