Résultats de la recherche

Rechercher dans les contenus ayant un titre ou un résumé disponibles dans les langues sélectionnées

Résultats de la recherche

  1. Question de FAQ collaborative Suspicion de bugue sur l'API csv/search

    Bonjour Je viens juste de rejoindre la communauté : je ne suis pas certain que ce lieu soit le meilleur endroit pour poster une suspicion de bugues, au besoin n'hésitez pas à me rediriger ! Il me semble avoir détecté une erreur du serveur lors de la soumission d'un CSV à l'api de recherche. J'utilise python pour requêter le serveur et j'ai des résultats différents selon que je soumette le même CSV avec deux packages différents. J'ai isolé la source de l'erreur et cela vient manifestement d'une syntaxe du "mutiplart form boundary" qui n'est pas acceptée par l'API. En l'occurrence, le serveur refuse de traiter des CSV transmis avec un form boundary contenant le caractère "=", alors que celui-ci semble bien faire partie du standard comme référencé ici (encore que les commentaires visibles sur le forum laissent à penser que la prise en compte du standard est variable d'un OS à l'autre). Ca peut sembler anecdotique, mais ça fait par exemple échouer le package request-cache qui présente l'intérêt d'une mise en cache des résultats (extrêmement intéressant pour l'utilisation d'API). J'ai d'ailleurs déposé cette issue sur le repo du package. Exemple de code python permettant de reproduire le bugue (désolé pour le formatage, osmose ne connaît manifestement pas le python) : import io import pandas as pd import requests from contextlib import contextmanager from urllib3 import filepost csv_sample = """ ID;ENSEIGNE;ADRESSE;COMPLEMENT;CODE POSTAL;COMMUNE;NATURE DU DEBIT 1;;32 route des grands champs;TABAC;01400;L-ABERGEMENT-CLEMENCIAT;Ordinaire permanent 2;;42 RUE ROGER VAILLANT;CC DAME LOUISE-TABAC-;01500;AMBERIEU-EN-BUGEY;Ordinaire permanent 3;TABAC DE LA GARE;6 AV DU GENERAL SARRAIL;TABAC;01500;AMBERIEU-EN-BUGEY;Ordinaire permanent 4;MAISON DE LA PRESSE;14 R BERARD;TABAC;01500;AMBERIEU-EN-BUGEY;Ordinaire permanent 5;;8 AV PAUL PAINLEVE;TABAC;01500;AMBERIEU-EN-BUGEY;Ordinaire permanent """ df = pd.read_csv(io.StringIO(csv_sample), sep=";") files = [ ( "data", ( "data.csv", df.to_csv(index=False, encoding="utf8", sep=";"), "text/csv; charset=utf-8", ), ), ] endpoint = "https://api-adresse.data.gouv.fr/search/csv/" # réusside avec un form boundary standard with requests.Session() as s: # Ce r1 = s.post(endpoint, files=files) print(r1) print("form boundary was %s", r1.request.body.split()[-1:]) with requests.Session() as s: # échec avec un form boundary comprenant des "=" @contextmanager def patch_form_boundary(): original_boundary = filepost.choose_boundary filepost.choose_boundary = lambda: "====test====" yield filepost.choose_boundary = original_boundary with patch_form_boundary(): r2 = s.post(endpoint, files=files) print(r2) print("form boundary was %s", r2.request.body.split()[-1:]) @contextmanager def other_patch_form_boundary(): original_boundary = filepost.choose_boundary filepost.choose_boundary = lambda: "test" yield filepost.choose_boundary = original_boundary # mais réussite dès qu'on retire les "=" with other_patch_form_boundary(): r3 = s.post(endpoint, files=files) print(r3) print("form boundary was %s", r3.request.body.split()[-1:])