datagouv / data.gouv.fr

Ce dépôt rassemble les tickets techniques qui portent sur data.gouv.fr.
https://www.data.gouv.fr
76 stars 14 forks source link

[hydra] Erreur d'insertion d'un csv en base #1530

Open maudetes opened 2 weeks ago

maudetes commented 2 weeks ago

La ressource en question : https://www.data.gouv.fr/fr/datasets/observatoire-de-laccessibilite-numerique-rgaa/#/resources/abb44e0c-0c89-4b3f-a31c-4a9cdb876125

Erreur sentry : https://errors.data.gouv.fr/organizations/sentry/issues/3731/events/4ed025f7ec94454184e9b00853217bd8/

Stack trace :

Stack Trace(most recent call first)

IndexError: list index out of range
  File "udata_hydra/analysis/csv.py", line 308, in csv_to_db
    await db.copy_records_to_table(
  File "asyncpg/pool.py", line 768, in copy_records_to_table
    return await con.copy_records_to_table(
  File "asyncpg/connection.py", line 1081, in copy_records_to_table
    return await self._protocol.copy_in(
  File "asyncpg/protocol/protocol.pyx", line 561, in copy_in
    raise
  File "asyncpg/protocol/protocol.pyx", line 502, in asyncpg.protocol.protocol.BaseProtocol.copy_in
    item = row[i]

ParseException: null
  File "udata_hydra/analysis/csv.py", line 147, in analyse_csv
    await csv_to_db(
  File "udata_hydra/analysis/csv.py", line 314, in csv_to_db
    raise ParseException("copy_records_to_table") from e
Pierlou commented 4 days ago

Certains noms de colonnes de la ressources comportent des \n, ce qui induit un écart entre le nombre de colonnes attendues et les champs trouvés dans les premières lignes lors de l'ouverture des fichiers (différente de celle de csv-detective qui utilise pandas). En corrigeant ce problème (ici, en remplaçant les \n par des espaces), la ressource passe sans souci en base. Est-ce qu'on considère qu'on doit être meilleurs, ou que la publication est coupable (et qu'on peut les contacter) ?

maudetes commented 1 hour ago

Hmm est-ce que c'est un csv valide dans ce cas ? Je pense qu'on peut les contacter en attendant, mais que si c'est lié à l'usage de pandas d'un côté mais pas l'autre, ça peut être un fix à faire de notre côté.