Bug #26580
crash à l'import d'un csv dont l'autodétection de format ne passe pas
100%
Description
Ça fait une sale 500 à l'écran
Internal Server Error: /manage/csvdatasource/add Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 132, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.7/dist-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view return view_func(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/passerelle/views.py", line 135, in dispatch request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 89, in dispatch return handler(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/edit.py", line 249, in post return super(BaseCreateView, self).post(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/edit.py", line 215, in post return self.form_valid(form) File "/usr/lib/python2.7/dist-packages/passerelle/views.py", line 151, in form_valid response = super(GenericCreateConnectorView, self).form_valid(form) File "/usr/lib/python2.7/dist-packages/django/views/generic/edit.py", line 193, in form_valid self.object = form.save() File "/usr/lib/python2.7/dist-packages/passerelle/forms.py", line 24, in save return super(GenericConnectorForm, self).save(commit=commit) File "/usr/lib/python2.7/dist-packages/django/forms/models.py", line 459, in save construct=False) File "/usr/lib/python2.7/dist-packages/django/forms/models.py", line 105, in save_instance instance.save() File "/usr/lib/python2.7/dist-packages/passerelle/apps/csvdatasource/models.py", line 133, in save dialect = csv.Sniffer().sniff(content) File "/usr/lib/python2.7/csv.py", line 188, in sniff raise Error, "Could not determine delimiter" Error: Could not determine delimiter
Fichiers
Révisions associées
fix infinite recursion in dialect_options() (#26580)
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Fichier 0001-report-failure-to-detect-CSV-dialect-fixes-26580.patch 0001-report-failure-to-detect-CSV-dialect-fixes-26580.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
Dans l'idée que le save() serait utilisé ailleurs, par exemple une commande de manage pour mettre à jour le fichier CSV, ne serait-il pas nécessaire qu'on y laisse la détection du dialecte, même si elle a déjà été faite ?
Mais bon, on le fait déjà pas pour le cas "file_type in ('ods', 'xls', 'xlsx') and not self.sheet_name", donc ...
Ack. (et merci)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Thomas Noël a écrit :
Dans l'idée que le save() serait utilisé ailleurs, par exemple une commande de manage pour mettre à jour le fichier CSV, ne serait-il pas nécessaire qu'on y laisse la détection du dialecte, même si elle a déjà été faite ?
Premio, premature optimization, on a pas encore le souci, deuxio, c'est mal de faire des contrôles dans le .save()
en fait, initialiser une valeur dérivée dont par contre tu es certain oui (suite au check dans .clean()), si t'as besoin d'un contrôle, t'appelles Model.full_clean()
[1], on a pris de mauvaises habitudes à ce sujet, le problème de .save()
c'est que c'est appelé à plein d'endroits qui n'ont pas de moyen de récupérer les exceptions et donc ça doit être généralement error-proof, et le plus simple pour un truc comme dialect_options qui n'est que du cache après tout (on pourrait faire le sniff() à chaque chargement aussi) c'est d'utiliser un accesseur qui réinitialise le truc quand il est vide.
1 https://docs.djangoproject.com/fr/2.1/ref/models/instances/#django.db.models.Model.full_clean
Mais bon, on le fait déjà pas pour le cas "file_type in ('ods', 'xls', 'xlsx') and not self.sheet_name", donc ...
Ack. (et merci)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
- % réalisé changé de 0 à 100
Appliqué par commit 31016366f6f51a3c6efc718624b70db56db3060c.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Solution déployée à En cours
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Fichier 0001-fix-infinite-recursion-in-dialect_options-26580.patch 0001-fix-infinite-recursion-in-dialect_options-26580.patch ajouté
- Statut changé de En cours à Solution proposée
Ma faute pas lancé tous les tests :/ En fait il y a un problème sous-jacent plus
sioux de récursion entre dialect_options/save/cache_data.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
go.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Solution validée à Solution déployée
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Solution déployée à Résolu (à déployer)
(je ne sais pas si c'est volontaire ou une erreur dans ton script, mais il faudrait plutôt passer vers "résolu (à déployer)").
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Non action manuelle, je n'étais plus au fait des statuts pour les projets EO, je le note.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
report failure to detect CSV dialect (fixes #26580)