Bug #11258
csv datasource : augmenter la tailler du contenu passé au sniffer
0%
Description
Pour des fichiers dont les lignes > 1024 on a une traceback
File "/home/josue/.virtualenvs/passerelle/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "./passerelle/urls_utils.py" in f
52. return func(request, *args, **kwargs)
File "/home/josue/.virtualenvs/passerelle/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "/home/josue/.virtualenvs/passerelle/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
87. return handler(request, *args, **kwargs)
File "./passerelle/utils/__init__.py" in _wrapped_view
104. return view_func(instance, request, *args, **kwargs)
File "./passerelle/utils/jsonresponse.py" in wrapper
263. return self.method(f, *args, **kwargs)
File "./passerelle/utils/jsonresponse.py" in api_method
345. return self.api(f, args1, *args, **kwargs)
File "./passerelle/utils/jsonresponse.py" in api
350. resp = f(*args, **kwargs)
File "./passerelle/apps/csvdatasource/views.py" in get
81. return obj.get_data(filters)
File "./passerelle/apps/csvdatasource/models.py" in get_data
62. dialect = csv.Sniffer().sniff(content[:1024])
File "/usr/lib/python2.7/csv.py" in sniff
188. raise Error, "Could not determine delimiter"
Fichiers
Révisions associées
Historique
Mis à jour par Josué Kouka il y a presque 8 ans
- Lié à Development #11057: csv datasource : supporter les operateurs <eq> <ne> <lt> <le> <gt> <ge> ajouté
Mis à jour par Josué Kouka il y a presque 8 ans
- Fichier 0001-csv-data-source-increase-content-length-passed-to-sn.patch 0001-csv-data-source-increase-content-length-passed-to-sn.patch ajouté
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a presque 8 ans
- Lié à Development #11057: csv datasource : supporter les operateurs <eq> <ne> <lt> <le> <gt> <ge> supprimé
Mis à jour par Thomas Noël il y a presque 8 ans
Je n'avais pas vu la trace, on pourrait éventuellement passer à 2048 seulement en cas d'erreur sur un try/except du snif sur 1024 ?
Mis à jour par Josué Kouka il y a presque 8 ans
Mis à jour par Frédéric Péters il y a presque 8 ans
Perso je serais plus large et rapide et soit juste dire 10ko; soit prendre index('\n')*3 vu que le ticket parle de longueur ligne; mais il me semble qu'on ne gagne rien à essayer un coup puis un deuxième, etc. (et prendre 10ko c'est pas la mort). Aussi, toute autre approche, c'est de faire cette récupération de dialect une bonne fois pour toutes lors d'upload du fichier csv plutôt que lors de l'appel à l'API.
Mis à jour par Frédéric Péters il y a presque 8 ans
Pour info, 10000 passes sur csv.Sniiffer().sniff(content), selon la taillle de content :
- sur 1024 octets, 0.1s
- sur 10 ko, 0.8s
(mesuré avec import timeit
).
Sur une seule passe,
- 0.000627994537354s
- 0.000849962234497s
(i.e. faisons le patch simple avec 10ko chargés dès le début).
Mis à jour par Josué Kouka il y a presque 8 ans
- Fichier 0001-csv-data-source-increase-content-length-passed-to-sn.patch 0001-csv-data-source-increase-content-length-passed-to-sn.patch ajouté
Pour l'instant j'ai augmenté la taille du contenu passé au sniffer. J'ai crée un ticket afin de pouvoir détecter le dialect au moment de l'upload #11264
Mis à jour par Thomas Noël il y a presque 8 ans
commit 923937cdf82d092ab837050a82ba55d686a76e5b Author: Josue Kouka <jkouka@entrouvert.com> Date: Wed Jun 8 14:23:14 2016 +0200 csv data source: increase content length passed to sniffer (#11258)
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
- Statut changé de Résolu (à déployer) à Fermé
csv data source: increase content length passed to sniffer (#11258)