Projet

Général

Profil

Development #13709

endpoint select pour csvdatasource

Ajouté par Benjamin Dauvergne il y a plus de 7 ans. Mis à jour il y a presque 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
21 octobre 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Le but est de permettre avec un seul CSV de représenter un ensemble de données relationelles, exemples:
  • lignes de bus:
    line,stop,schedule
    A,Rue du Coq,08:00
    A,Rue du Coq,09:00
    A,Rue du Lendemain,08:15
    A,Rue du Lendemain,09:15
    B,Place Coin,09:15
    
    • on récupère la liste des lignes avec /select/?projection=id%3Aligne&projection=text%3Aline&distinct=line&structure=dict
    • on récupère la liste des arrêts de la ligne A avec /select/?projection=id%3Astop&projection=text%3Astop&distinct=stop&where=line%3D%3D%22A%22
  • encoder les parcours SVE dans un seul CSV:
    ville,type,role,svx,delai
    La Seyne,Demande Enfance,La Seyne - Service Enfance,sva,86400
    La Seyne,Voirie,La Seyne - Service Généraux,svr,86400
    Sospel,Voirie,Sospel - Service Généraux,svr,86400
    
    • cela devrait permettre une simplification substantielle d'un workflow gérant de nombreux destinataires, la qualification des demandes en sva/svr et la gestion des délais de traitement pour sva/svr ; cela suppose des fonctions qui n'existent pas encore comme affecté un rôle à une fonction via son nom.

À voir encore comment sont passés les différentes expressions, ou voir si ce ne serait pas plus simple sous forme de requêtes stockées (i.e. pas possible de vraiment requêter librement par le web-service, mais on peut exprimer des requêtes au niveau du connecteur et ça crée des nouveaux endpoints, un par requête).


Fichiers

0001-csvdatasource-add-select-endpoint.patch (13,5 ko) 0001-csvdatasource-add-select-endpoint.patch Benjamin Dauvergne, 21 octobre 2016 11:59
0001-csvdatasource-add-select-endpoint.patch (14,2 ko) 0001-csvdatasource-add-select-endpoint.patch Benjamin Dauvergne, 21 octobre 2016 12:42
0001-csvdatasource-add-support-for-preset-queries-13709.patch (29,3 ko) 0001-csvdatasource-add-support-for-preset-queries-13709.patch Frédéric Péters, 24 octobre 2016 15:42
0001-csvdatasource-add-support-for-preset-queries-13709.patch (30,6 ko) 0001-csvdatasource-add-support-for-preset-queries-13709.patch Frédéric Péters, 24 octobre 2016 16:53
0001-csvdatasource-check-expressions-syntax-in-Query-form.patch (2,16 ko) 0001-csvdatasource-check-expressions-syntax-in-Query-form.patch Benjamin Dauvergne, 24 octobre 2016 17:03
0001-csvdatasource-check-expressions-syntax-in-Query-form.patch (1,87 ko) 0001-csvdatasource-check-expressions-syntax-in-Query-form.patch Benjamin Dauvergne, 24 octobre 2016 17:05
0001-csvdatasource-check-expressions-syntax-in-Query-form.patch (1,88 ko) 0001-csvdatasource-check-expressions-syntax-in-Query-form.patch Benjamin Dauvergne, 24 octobre 2016 17:06
0001-csvdatasource-check-expressions-syntax-in-Query-form.patch (2,57 ko) 0001-csvdatasource-check-expressions-syntax-in-Query-form.patch Benjamin Dauvergne, 24 octobre 2016 17:16
0002-csvdatasource-add-support-for-preset-queries-13709.patch (32,3 ko) 0002-csvdatasource-add-support-for-preset-queries-13709.patch Frédéric Péters, 24 octobre 2016 17:35
Capture d’écran 2016-10-24 à 17.35.59.png (138 ko) Capture d’écran 2016-10-24 à 17.35.59.png Frédéric Péters, 24 octobre 2016 17:36
Sans titre.png (4,71 ko) Sans titre.png Frédéric Péters, 24 octobre 2016 19:12
Sans titre.png (10,5 ko) Sans titre.png Frédéric Péters, 24 octobre 2016 19:14
0001-csvdatasource-check-expressions-syntax-in-Query-form.patch (1,96 ko) 0001-csvdatasource-check-expressions-syntax-in-Query-form.patch Benjamin Dauvergne, 24 octobre 2016 21:37
0001-csvdatasource-add-tests-for-csv-query-management-UI-.patch (1,84 ko) 0001-csvdatasource-add-tests-for-csv-query-management-UI-.patch Frédéric Péters, 24 octobre 2016 23:42

Demandes liées

Lié à Passerelle - Development #11415: csv datasource: ajouter la possibilité de désigner une colonne comme id ou textFermé17 juin 2016

Actions

Révisions associées

Révision 056437bf (diff)
Ajouté par Benjamin Dauvergne il y a plus de 7 ans

csvdatasource: add select endpoint (#13709)

Révision 620fea33 (diff)
Ajouté par Frédéric Péters il y a plus de 7 ans

csvdatasource: add support for preset queries (#13709)

Révision 4b22a9fd (diff)
Ajouté par Benjamin Dauvergne il y a plus de 7 ans

csvdatasource: check expressions'syntax in Query form (#13709)

Révision 282bd2cb (diff)
Ajouté par Frédéric Péters il y a plus de 7 ans

csvdatasource: add tests for csv query management UI (#13709)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

C'est vraiment penser pour les différents projets SVE en fait (mais j'ai repensé aux vieilles demandes de Victor aussi).

#3

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

Est-ce que ça doit vraiment être un endpoint séparé, la prise en charge de projection/where/dictinct/order ne pourrait pas aller dans l'endpoint data existant ?

Et les paramètres acceptés par celui-ci seraient réinterprétés pour alimenter le "where". (comme quand il y a eu l'ajout de filtres et que le paramètre "q" a été réinterprété en leurs termes).

Ensuite, il faudra une présentation dans csvdatasource_detail.html.

#4

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Je me suis dit que c'était bien plus simple et moins casse-gueule de développer un nouveau endpoint et de migrer dessus au besoin, et puis surtout je ne suis pas certain que permettre d'envoyer des expressions python soit très judicieux, c'est plus une preuve de concept. Une version plus utile ne permettrait de définir ces requêtes que dans passerelle. En l'état ce nouveau endpoint fait déjà tout ce que fait l'autre (et je peux éventuellement ajouter le support de q

#5

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

En fait si je comprends mieux, c'était un premier patch développé en local comme proof of concept et posté ici pour inviter l'un ou l'autre à partir de là pour le terminer, requêtes stockées comme tu l'écris, mes commentaires ou pas, etc. ?

#6

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Non je pense que je vais devoir le finir si on veut pas que Mike devienne fou avec les formulaires SVE (mais si quelqu'un a une autre idée pour gérer un workflow à 200 et quelques communes traitantes qu'il le dise), disons que ça ne me dérangerait pas d'avoir des endpoints en béta dans passerelle, le temps qu'on comprenne bien ce qu'on fait là. Là ce qui m'inquiète c'est que si la datasource est publique et que quelqu'un envoie '100**232323233' dans une condition, ça va faire partir le worker en sucette. Donc déjà je n'autorisera ce endpoint qu'à un utilisateur authentifié quelque soit le contrôle d'accès en place. Je vois bien plusieurs itérations se faire, ce endpoint dans un premier temps, et une version avec requêtes purement définies coté passerelle ensuite histoire d'avancer vite.

#7

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Et pour être exact ça a été en partie développé dans le train depuis Lyon hier.

#8

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

  • Assigné à mis à Frédéric Péters

Je prends la main pour développer à partir de ce patch, pour avoir rapidement une "version avec requêtes purement définies" comme noté plus haut.

#9

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

Voilà; j'étais d'abord parti sur une multiplication des modèles (Query, Projection, Filter, etc.) pour au final me limiter à un seul modèle Query, avec dedans des TextField, parce que c'est quand même bien plus simple en terme d'UI derrière.

#10

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

J'ai juste un souci avec le changement where -> filters, en fait un seul filtre est possible (le test se fait ensuite sur le premier résultat de la séquence new_row), il ne faudrait donc pas utiliser get_list('filters') mais juste faire stream_expresions([query.filter], ...) car de toute façon le résultat des autres expressions filters sont ignorés.

Il manque le fichier csvdatasource/query_form.html.

La possibilité d'écraser les variables issues des lignes du CSV via **kwargs me parait potentiellement gênante, pour limiter ça je verrai plutôt l.224:

row_vars['query'] = kwargs

Ça oblige à faire des query['xxx'] dans les expressions, ce n'est pas mortel.

J'attache un patch avec de la validation des expressions pour le formulaire.

Sinon ack à tout, plus tard comme dans w.c.s. on pourra proposer un module evalutils (pour jouer avec les dates ou les valeurs numérique formatées à la française notamment).

#11

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

C'est bien sûr sous-performant mais modifié comme ça, on pourrait avoir plusieurs filtres, non ?

         filters = query.get_list('filters')
         if filters:
-            data = [row for new_row, row in stream_expressions(filters, data, kind='filters')
-                    if new_row[0]]
+            for clause in filters:
+                data = [row for new_row, row in stream_expressions([clause], data, kind='filters')
+                        if new_row[0]]

#12

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

Patch modifié pour inclure le fichier manquant et avoir les paramètres de l'URL dans une variable "query".

#13

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

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

C'est bien sûr sous-performant mais modifié comme ça, on pourrait avoir plusieurs filtres, non ?

[...]

Ça rajoute de l'implicite dans le fait qu'il y a un and entre les filtres, mais si tu veux oui.

J'attache le patch oublié dans mon dernier commentaire.

#16

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Un patch qui marche enfin, aussi dans la vue de détail csvdatasource ces nouveaux endpoints ne sont pas listés (ça n'en donne pas l'URL).

#17

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

Voilà, patch du milieu modifié pour ajouter la liste des endpoints "query" dans la première partie de la page (et au passage j'ai synchronisé ce template avec le template générique, pour avoir les bons id sur les éléments).

#19

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

     {{ form.non_field_errors }}
     <pre>{{ form.errors }}</pre>

Je ne sais pas très bien quelle est l'intention ici, d'un formulaire vide je cliquer sur enregistrer et le résultat est désastreux.

#20

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

#21

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Dsl j'ai oublié du debug en développant les clean_*() (j'avais oublié qu'il fallait retourner toujours la valeur maintenant).

#23

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Ack, je mettrai à jour le sictiam pour que Mike béta-test tout ça.

#24

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

  • Statut changé de En cours à Résolu (à déployer)
commit 282bd2cb6e2309a749315ae9c4fe3441f2a75d6a
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Oct 24 23:40:13 2016 +0200

    csvdatasource: add tests for csv query management UI (#13709)

commit 4b22a9fded81f2d195c9ee3761a10631e04b3b02
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Mon Oct 24 21:11:01 2016 +0200

    csvdatasource: check expressions'syntax in Query form (#13709)

commit 620fea3391fec06c6e2c58ba5a0b1460a3c63a1d
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Oct 24 15:41:46 2016 +0200

    csvdatasource: add support for preset queries (#13709)

commit 056437bf1c68a1be82192238583ba93d7d3884ca
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Oct 21 10:16:15 2016 +0200

    csvdatasource: add select endpoint (#13709)
#25

Mis à jour par Josué Kouka il y a environ 7 ans

  • Lié à Development #11415: csv datasource: ajouter la possibilité de désigner une colonne comme id ou text ajouté
#26

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

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

Formats disponibles : Atom PDF