Projet

Général

Profil

Development #5896

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

Ajouté par Thomas Noël il y a plus de 9 ans. Mis à jour il y a environ 7 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
Version cible:
Début:
06 novembre 2014
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
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)


Fichiers

0001-csv-files-data-source-5896.patch (15,3 ko) 0001-csv-files-data-source-5896.patch Serghei Mihai, 30 juin 2015 19:07
csvdatasource.png (34,6 ko) csvdatasource.png Serghei Mihai, 02 juillet 2015 16:33
0001-csv-files-data-source-5896.patch (16,2 ko) 0001-csv-files-data-source-5896.patch Serghei Mihai, 02 juillet 2015 16:35
0001-datasource-for-csv-files-5896.patch (16,2 ko) 0001-datasource-for-csv-files-5896.patch Serghei Mihai, 13 juillet 2015 10:40
0001-csv-files-datasource-5896.patch (19 ko) 0001-csv-files-datasource-5896.patch Serghei Mihai, 26 août 2015 15:44
0001-csv-files-datasource-5896.patch (20,1 ko) 0001-csv-files-datasource-5896.patch Serghei Mihai, 31 août 2015 12:13
0001-csv-files-datasource-5896.patch (20,6 ko) 0001-csv-files-datasource-5896.patch Serghei Mihai, 01 septembre 2015 18:33
0001-csv-files-datasource-5896.patch (20,9 ko) 0001-csv-files-datasource-5896.patch Serghei Mihai, 02 septembre 2015 10:26
0001-csv-files-datasource-5896.patch (15,4 ko) 0001-csv-files-datasource-5896.patch Serghei Mihai, 04 septembre 2015 11:27
0002-csv-files-datasource-localizations-5896.patch (5,29 ko) 0002-csv-files-datasource-localizations-5896.patch Serghei Mihai, 04 septembre 2015 11:27
0001-csv-files-datasource-5896.patch (15,7 ko) 0001-csv-files-datasource-5896.patch Serghei Mihai, 04 septembre 2015 14:25

Révisions associées

Révision a017827f (diff)
Ajouté par Serghei Mihai il y a plus de 8 ans

csv files datasource (#5896)

Révision b7239949 (diff)
Ajouté par Serghei Mihai il y a plus de 8 ans

csv files datasource localizations (#5896)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 9 ans

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

#2

Mis à jour par Serghei Mihai il y a presque 9 ans

  • Assigné à changé de Thomas Noël à Serghei Mihai
#3

Mis à jour par Serghei Mihai il y a presque 9 ans

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

#4

Mis à jour par Frédéric Péters il y a presque 9 ans

+ 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

Mis à jour par Frédéric Péters il y a presque 9 ans

Aussi, je ne mettrais pas ce module dans contrib.

#6

Mis à jour par Thomas Noël il y a presque 9 ans

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

Mis à jour par Serghei Mihai il y a presque 9 ans

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

Mis à jour par Serghei Mihai il y a presque 9 ans

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

Mis à jour par Thomas Noël il y a presque 9 ans

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

#10

Mis à jour par Frédéric Péters il y a presque 9 ans

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

Mis à jour par Thomas Noël il y a plus de 8 ans

  • Priorité changé de Normal à Haut

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

#13

Mis à jour par Frédéric Péters il y a plus de 8 ans

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

Mis à jour par Serghei Mihai il y a plus de 8 ans

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

Mis à jour par Thomas Noël il y a plus de 8 ans

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

Mis à jour par Frédéric Péters il y a plus de 8 ans

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

Mis à jour par Serghei Mihai il y a plus de 8 ans

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

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Version cible mis à 0.9.0
#20

Mis à jour par Frédéric Péters il y a plus de 8 ans

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).

#21

Mis à jour par Serghei Mihai il y a plus de 8 ans

Avec un flag pour zapper l'entete

#22

Mis à jour par Frédéric Péters il y a plus de 8 ans

        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

Mis à jour par Serghei Mihai il y a plus de 8 ans

Ç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

Mis à jour par Frédéric Péters il y a plus de 8 ans

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

Mis à jour par Frédéric Péters il y a plus de 8 ans

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

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-csv-files-datasource-5896.patch ajouté

ça me va

#27

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-csv-files-datasource-5896.patch supprimé
#29

Mis à jour par Frédéric Péters il y a plus de 8 ans

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

Mis à jour par Serghei Mihai il y a plus de 8 ans

J'avais fait comme dans nos autres connecteurs:

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

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

#31

Mis à jour par Frédéric Péters il y a plus de 8 ans

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

#32

Mis à jour par Serghei Mihai il y a plus de 8 ans

Alors pour le get_verbose_name

#33

Mis à jour par Frédéric Péters il y a plus de 8 ans

ok, go.

#34

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Statut changé de En cours à 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

Mis à jour par Serghei Mihai il y a environ 7 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF