Projet

Général

Profil

0001-agendas-fix-import-event-crashing-with-nested-quotes.patch

A. Berriot, 04 juillet 2022 18:26

Télécharger (2,33 ko)

Voir les différences:

Subject: [PATCH] agendas: fix import event crashing with nested quotes
 (#66187)

 chrono/manager/forms.py     |  7 ++++---
 tests/manager/test_forms.py | 24 ++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 3 deletions(-)
 create mode 100644 tests/manager/test_forms.py
chrono/manager/forms.py
1023 1023
    )
1024 1024
    events = None
1025 1025

  
1026
    def __init__(self, agenda_pk, **kwargs):
1027
        self.agenda_pk = agenda_pk
1028
        super().__init__(**kwargs)
1026
    def __init__(self, *args, **kwargs):
1027
        self.agenda_pk = kwargs.pop("agenda_pk")
1028
        super().__init__(*args, **kwargs)
1029 1029

  
1030 1030
    def clean_events_csv_file(self):
1031 1031
        content = self.cleaned_data['events_csv_file'].read()
......
1046 1046
        except csv.Error:
1047 1047
            dialect = None
1048 1048

  
1049
        dialect.doublequote = True
1049 1050
        events = []
1050 1051
        warnings = {}
1051 1052
        events_by_slug = {x.slug: x for x in Event.objects.filter(agenda=self.agenda_pk)}
tests/manager/test_forms.py
1
import io
2

  
3
from django.core.files import uploadedfile
4

  
5
from chrono.agendas import models
6
from chrono.manager import forms
7

  
8

  
9
def test_import_does_supports_nested_quotes(app, db):
10
    agenda = models.Agenda.objects.create(label='Foo Bar', kind='events')
11

  
12
    csv_data = '''date;heure;nombre de places;nombre de places dans la liste d'attente;Libellé;identifiant;description;tarif;URL;date de publication;durée
13
27/08/2022;10:30;8;100;Initiation spéléologie;cds2-groupe2-448001030;"Animation:
14

  
15
des conditions ""extrêmes"" !
16
";;https://services.publik.love/fr/;01/06/2022;120
17
'''
18

  
19
    file = uploadedfile.SimpleUploadedFile("data.csv", csv_data.encode(), "text/csv")
20
    form = forms.ImportEventsForm({}, {"events_csv_file": file}, agenda_pk=agenda.pk)
21

  
22
    assert form.is_valid() is True
23

  
24
    assert '''des conditions "extrêmes"''' in form.events[0].description
0
-