Projet

Général

Profil

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

A. Berriot, 04 juillet 2022 18:18

Télécharger (2,41 ko)

Voir les différences:

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

 chrono/manager/forms.py     | 10 ++++++----
 tests/manager/test_forms.py | 26 ++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 4 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

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

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

  
1049
        
1050
        dialect.doublequote = True
1049 1051
        events = []
1050 1052
        warnings = {}
1051 1053
        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(
20
        "data.csv", csv_data.encode(), "text/csv"
21
    )
22
    form = forms.ImportEventsForm({}, {"events_csv_file": file}, agenda_pk=agenda.pk)
23

  
24
    assert form.is_valid() is True
25

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