Project

General

Profile

Development #5896

créer un connecteur "nouveau style" pour datasource depuis un fichier CSV

Added by Thomas Noël almost 7 years ago. Updated over 4 years ago.

Status:
Fermé
Priority:
Haut
Assignee:
Target version:
Start date:
06 Nov 2014
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:

Description

Reprendre le datasource CSV actuelle (éventuellement un peu from scratch, depuis un baseresource) et lui donner une nouvelle interface, dont l'édition permettrait de mettre à jour le fichier CSV.

La cible : fournir une liste de {id,text} pour wcs.

On doit fournir pour créer la ressource :
- un csv
- le rang de la colonne qui indique la clé (id) -- 0 par défaut
- le rang de la colonne qui indique le contenu (text) -- 1 par défaut

Lors de l'interrogation, un "?q=abc" renvoie uniquement les lignes qui contiennent "abc" dans le texte.

Options :
  • permettre de surcharger ces rangs dans la querystring d'interrogation du webservice, genre id_row=0&text_row=3.
  • text_rows=2,3,4 où le texte serait un ' '.join() des colonnes indiquées
  • indiquer l'url d'un fichier CSV (qui serait mis en cache, durée du cache paramétrable...)

(note: c'est indirectement une demande cg14 pour la mise à jour du csv de dispatch APA, CSV qui sert aussi de base pour les codes postaux)


Files

Associated revisions

Revision a017827f (diff)
Added by Serghei Mihai about 6 years ago

csv files datasource (#5896)

Revision b7239949 (diff)
Added by Serghei Mihai about 6 years ago

csv files datasource localizations (#5896)

History

#1

Updated by Frédéric Péters over 6 years ago

+ la possibilité de nommer les autres colonnes du CSV, pour utilisation en mode "étendu" de wcs.

#2

Updated by Serghei Mihai over 6 years ago

  • Assignee changed from Thomas Noël to Serghei Mihai
#3

Updated by Serghei Mihai about 6 years ago

Un patch brouillon.
Ça ne gére pas un csv distant et il manque les tests

#4

Updated by Frédéric Péters about 6 years ago

+ la possibilité de nommer les autres colonnes du CSV, pour utilisation en mode "étendu" de wcs.

Je voyais ça dans la définition, pas lors de l'appel.

#5

Updated by Frédéric Péters about 6 years ago

Aussi, je ne mettrais pas ce module dans contrib.

#6

Updated by Thomas Noël about 6 years ago

Frédéric Péters a écrit :

+ la possibilité de nommer les autres colonnes du CSV, pour utilisation en mode "étendu" de wcs.

Je voyais ça dans la définition, pas lors de l'appel.

Pareil. Peut-être une simple ligne : nom,nom,nom,nom ? (pour faire vite et ne pas avoir une UI tordue)

#7

Updated by Serghei Mihai about 6 years ago

Perso nom, nom, nom ne me parait pas très clair à l'usage, sauf si on y ajoute des help_text.
Voici l'exemple d'une UI avec un champs séparé pour les titres des colonnes

#8

Updated by Serghei Mihai about 6 years ago

Thomas Noël a écrit :

Pareil. Peut-être une simple ligne : nom,nom,nom,nom ? (pour faire vite et ne pas avoir une UI tordue)

Ok, et dans ce cas, la recherche q=abc ne s'appliquera que si la colonne "text" est définie.

#9

Updated by Thomas Noël about 6 years ago

Je disais à l'instant à Serghei : pas de cache explicite du fichier CSV, comptons sur l'OS pour ça.

#10

Updated by Frédéric Péters about 6 years ago

Oui oui, le cache c'était dans la situation d'un CSV distant (« indiquer l'url d'un fichier CSV (qui serait mis en cache, durée du cache paramétrable...) »).

#11

Updated by Thomas Noël about 6 years ago

  • Priority changed from Normal to Haut

(ça commence à bien manquer, notamment au ministère)

#13

Updated by Frédéric Péters about 6 years ago

Je suis plutôt favorable à avoir un .po unique à Passerelle.

Pour la logique de columns_title. quand c'est mis, ok, on s'en sert, et quand c'est pas mis, on utilise la première ligne du CSV. J'ai l'impression que dans la pratique, ça va surtout nous ennuyer parce qu'on aura des CSV avec des titres de colonne en première ligne mais pas avec les titres qu'on veut (id, text).

# Create your tests here.

Fichier à supprimer; mais ce serait par contre super d'ajouter des tests dans un tests/test_csv_datasource.py.

Je me demande si on ne gagnerait pas à ne pas mélanger CSV local et CSV distant.

cache.set(self.slug, je préférerais qu'on utilise un hash de l'URL plutôt que permettre via le web d'altérer n'importe quel contenu du cache.

Le filtre, on pourra voir plus tard pour le faire évoluer.

#14

Updated by Serghei Mihai about 6 years ago

Frédéric Péters a écrit :

Je suis plutôt favorable à avoir un .po unique à Passerelle.

D'accord, j'ai fait un ticket séparé: #8121.

#15

Updated by Thomas Noël about 6 years ago

Frédéric Péters a écrit :

Pour la logique de columns_title. quand c'est mis, ok, on s'en sert, et quand c'est pas mis, on utilise la première ligne du CSV. J'ai l'impression que dans la pratique, ça va surtout nous ennuyer parce qu'on aura des CSV avec des titres de colonne en première ligne mais pas avec les titres qu'on veut (id, text).

Il fallait faire un choix, je pense savoir guidé Serghei sur celui-ci. On peut en faire un autre, par exemple:
  • une case à cocher qui indique si la première colonne est un titre, et génère des slug à partir de ça ("nom du village" -> "nom-du-village")
  • dans ce cas, si columns_title existe, elle "écrase" le nom de certaines colonne : «,,id,,,text» dit que "id" est dans la colonne 3 et text dans la 6ème.

Je me demande si on ne gagnerait pas à ne pas mélanger CSV local et CSV distant.

Oui, ça ferait un code beaucoup plus clair (on n'a pour l'instant pas besoin du principe des CSV distants)

Le filtre, on pourra voir plus tard pour le faire évoluer.

Oui, par rapport à http://git.entrouvert.org/passerelle.git/tree/passerelle/datasources/models.py on a quand même des regressions, je trouve (possibilité de choisir la/les colonne à considérer comme résultat, c'est utile pour le dispatch cg14 par exemple)

Mais on peut pousser une version simple et jouer ensuite.

#16

Updated by Frédéric Péters about 6 years ago

Thomas Noël a écrit :

Frédéric Péters a écrit :

Pour la logique de columns_title. quand c'est mis, ok, on s'en sert, et quand c'est pas mis, on utilise la première ligne du CSV. J'ai l'impression que dans la pratique, ça va surtout nous ennuyer parce qu'on aura des CSV avec des titres de colonne en première ligne mais pas avec les titres qu'on veut (id, text).

Il fallait faire un choix, je pense savoir guidé Serghei sur celui-ci. On peut en faire un autre, par exemple:
  • une case à cocher qui indique si la première colonne est un titre, et génère des slug à partir de ça ("nom du village" -> "nom-du-village")
  • dans ce cas, si columns_title existe, elle "écrase" le nom de certaines colonne : «,,id,,,text» dit que "id" est dans la colonne 3 et text dans la 6ème.

Oui, je trouve plutôt important de pouvoir zapper la première ligne.

Je me demande si on ne gagnerait pas à ne pas mélanger CSV local et CSV distant.

Oui, ça ferait un code beaucoup plus clair (on n'a pour l'instant pas besoin du principe des CSV distants)

Si on n'en a pas besoin, alors, pour moi, on peut tout à fait zapper cette partie pour l'instant et avoir du code plus simple.

#17

Updated by Serghei Mihai about 6 years ago

Frédéric Péters a écrit :

Oui, je trouve plutôt important de pouvoir zapper la première ligne.

Pareil.
Et je rendrais columns_title obligatoire au format «,,id,,,text», comme sugère Thomas.

#19

Updated by Serghei Mihai about 6 years ago

  • Target version set to 0.9.0
#20

Updated by Frédéric Péters about 6 years ago

Il n'y a plus besoin de CACHE_SENTINEL.

Le patch zappe désormais systématiquement la première ligne, ce n'est pas souhaité. (le test passe à côté de ça en commançant le csv par une ligne vide).

#22

Updated by Frédéric Péters about 6 years ago

        titles = self.columns_titles.split(',')
        indexes = [titles.index(t) for t in titles if t.split()]
        caption = [titles[i] for i in indexes]

Il y a ce if t.split() qui m'interloque; c'est quoi son rôle ?

columns_titles='id,,nom, prenom, sexe'

Avec une définition pareille, les noms de colonne vont garder les espaces, ça ne fera pas un truc facilement exploitable; ce serait bien que ça soit aussi testé par les tests.

Dans les tests aussi, en plus de vérifier que les dictionnaires ont les bonnes clés, ça peut être utile d'en vérifier aussi les valeurs (genre assert csv.get_data()[0] == {'id': '69', 'text': 'DELANOUE'}).

Dans les données de test il y a parfois des points-virgules parfois des virgules (?).

#23

Updated by Serghei Mihai about 6 years ago

Ça devait être un strip, je me suis planté.
J'ai rajouté quelques tests en plus, enlevé les virgules(qui viennent d'un export Excel en CSV)

#24

Updated by Frédéric Péters about 6 years ago

Il manque l'appel à gettext :

    class Meta:
        verbose_name = 'CSV File'

Et je mettrais les modifs au .po dans un commit séparé.

Il reste des références local_csv_file et remote_csv_file dans le template.

#25

Updated by Frédéric Péters about 6 years ago

Aussi le columns_titles le "titles" m'ennuie parce qu'on y attend plutôt des identifiants (je suggère column_keynames à la place), et dans le help_text ne pas y mettre des crochets parce qu'on va se demander si on doit les taper (et je remplacerais peut-être juste par un exemple tout bête "ex: id,text,data1,data2").

#26

Updated by Serghei Mihai about 6 years ago

  • File 0001-csv-files-datasource-5896.patch added

ça me va

#27

Updated by Serghei Mihai about 6 years ago

  • File deleted (0001-csv-files-datasource-5896.patch)
#29

Updated by Frédéric Péters about 6 years ago

Dernier truc j'espère, il reste un bout pas traduit; a priori ça pourrait être {{view.model.get_verbose_name}} :

<h2>CSV - {{ object.title }}</h2>
#30

Updated by Serghei Mihai about 6 years ago

J'avais fait comme dans nos autres connecteurs:

{% block appbar %}
<h2>GDC - {{ object.title }}</h2>
...

ou
{% block appbar %}
<h2>ClicRdv - {{ object.title }}</h2>
...

#31

Updated by Frédéric Péters about 6 years ago

Certes, mais d'un côté on a des marques ou noms de produit et ici on a un nom générique.

#33

Updated by Frédéric Péters about 6 years ago

ok, go.

#34

Updated by Serghei Mihai about 6 years ago

  • Status changed from En cours to Résolu (à déployer)
commit b7239949eaaf5a46ccf919846263562d8ac87767
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Fri Sep 4 11:20:36 2015 +0200

    csv files datasource localizations (#5896)

commit a017827f45bf90343dfdfe7d3fa0cc8678fc21f7
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Wed Aug 26 15:39:01 2015 +0200

    csv files datasource (#5896)
#35

Updated by Serghei Mihai over 4 years ago

  • Status changed from Résolu (à déployer) to Fermé

Also available in: Atom PDF