Projet

Général

Profil

Development #27782

arcgis : ajouter un système de map-service-query pré-remplie

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
06 novembre 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

suite de #17763, ajouter sur les map service la possibilité d'avoir des query pré-machés, un peu comme sur les csvdatasource.

Copié d'une duplication de ce ticket (#39622):

Ce ticket vise à remplacer la proposition dans #39612, le but étant de passer un minimum de chose bien typés dans les URLs vers le connecteur ArcGis:
  • par rapport à #39612 ça évite de toucher à l'existant
  • ce sera beaucoup plus simple à utiliser

Je reprends ici les sources de donnée définies pour Cannes (donné dans #39612) :

{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=adresse%20like%20%27%{{form_var_recherche_adresse|default:"XYZXYZ"|upper|urlencode}}%%27&template=%7B%7Battributes.adresse%7Csafe%7D%7D+—+%7B%7Battributes.codepost|default:""%7D%7D+%7B%7Battributes.sectpost|default:""%7D%7D&id_template=%7B%7Battributes.ident%7D%7D&orderByFields=nomvoie,numero_num&full=on

45:    {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=1&folder=geocannes&service=GEOCANNES_RU&where=id_parc=%27{% if "adresse" in form_var_methode %}{{ form_var_parcelle_adresse }}{% elif "cart" in form_var_methode %}{{ form_var_parcelle_carte }}{% else %}{{ form_var_parcelle_manuelle }}{% endif %}%27

49:    {% if form_var_num_voie %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%20{{form_var_num_voie}}%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.quartier%7D%7D&full=on{% else %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%200%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.quartier%7D%7D&full=on{% endif %}

50:    {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%200%20AND%20adresse%20like%20%27%{{form_var_recherche_adresse|default:"XYZXYZ"|upper}}%%27&template=%7B%7Battributes.nomvoie%7Csafe%7D%7D&orderByFields=nomvoie&full=on

51:    {% if form_var_num_voie %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%20{{form_var_num_voie}}%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.secteur%7D%7D&full=on{% else %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%200%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.secteur%7D%7D&full=on{% endif %}

52:    {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.numero_num%7D%7D&orderByFields=numero_num&full=on

53:    {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=adresse%20like%20%27%{{form_var_recherche_adresse|default:"XYZXYZ"|upper}}%%27&template=%7B%7Battributes.adresse%7D%7D+—+%7B%7Battributes.quartier%7D%7D+—+%7B%7Battributes.codepost|default:""%7D%7D+%7B%7Battributes.sectpost|default:""%7D%7D&id_template=%7B%7Battributes.ident%7D%7D&orderByFields=nomvoie,numero_num&full=on

Sont utilisés, les champs :
  • layer
  • folder
  • service
  • where
  • template
  • id_template
  • full
  • f (json / geojson / ???)

On y ajouterait un nom, un slug et une description pour obtenir un endpoint.

Au niveau du champ where on accepterait une chaîne de formatage Python standard (syntaxe différent de #39612) avec obligation de nommer les arguments, ex.:

Where :
[ adresse LIKE {adresse:s} AND population < {population:d} ]

L'idée étant de pouvoir déduire les arguments et types attendus pour le endpoint (ici un argument adresse de type chaîne et un argument population de type entier).

Ce serait appelable ainsi :

{{ passerelle_url }}/arcgis/geocannes/q/adresse-population/?adresse=AVENUE+D'ANNAM&population=10000

Fichiers


Demandes liées

Lié à Passerelle - Development #39612: arcgis: supporter des paramètres à la requête whereRejeté06 février 2020

Actions
Dupliqué par Passerelle - Support #39622: arcgis: pouvoir définir des requêtesFermé07 février 2020

Actions

Révisions associées

Révision 0251636f (diff)
Ajouté par Benjamin Dauvergne il y a environ 4 ans

templates: factorize endpoint template (#27782)

Révision 7999106c (diff)
Ajouté par Benjamin Dauvergne il y a environ 4 ans

misc: allow hiding of endpoints (#27782)

For endpoints which are dynamic.

Révision b4d1050e (diff)
Ajouté par Benjamin Dauvergne il y a environ 4 ans

arcgis: add query system (#27782)

Révision 945cffdb (diff)
Ajouté par Benjamin Dauvergne il y a environ 4 ans

arcgis: hide district endpoint (#27782)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Dupliqué par Support #39622: arcgis: pouvoir définir des requêtes ajouté
#2

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Description mis à jour (diff)
#3

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Description mis à jour (diff)
#4

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Lié à Development #39612: arcgis: supporter des paramètres à la requête where ajouté
#5

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Description mis à jour (diff)
#6

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Assigné à mis à Benjamin Dauvergne
#7

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Description mis à jour (diff)
  • Assigné à Benjamin Dauvergne supprimé
#8

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Voilà où j'en suis, les requête sont intégrées aux autres endpoints et présentées de la même façon (il faudrait cacher le endpoint 'q' qui ne sert à rien tout seul mais on verra ça une autre fois).

Ça permet la requête suivante :

http://localhost:8000/arcgis/geocannes/q/adresse/?adresse=GAUl&orderByFields=nomvoie,numero_num

{
  "data": [
    {
      "attributes": {
        "nominus": "Avenue du Général De Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_771_0",
        "codepost": "06400",
        "objectid": 727,
        "sectpost": "Cannes",
        "coordx": 1022883.61,
        "numero_num": 0,
        "adresse": "AVENUE DU GENERAL DE GAULLE",
        "numero": "sans numero",
        "quartier": "Croix-des-Gardes / Picaud",
        "secteur": "Croix-des-Gardes",
        "coordy": 6282326.48,
        "typo": "Adresses sans numéro",
        "idsect": "29",
        "adresse_complete": null,
        "idcanton": "7",
        "canton": "CANNES-1",
        "nomvoie": "AVENUE DU GENERAL DE GAULLE",
        "idquart": "Q_6" 
      },
      "id": "VOIE_771_0",
      "text": "AVENUE DU GENERAL DE GAULLE - " 
    },
    {
      "attributes": {
        "nominus": "Place du Général de Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_302_0",
        "codepost": "06400",
        "objectid": 561,
        "sectpost": "Cannes",
        "coordx": 1024534.73,
        "numero_num": 0,
        "adresse": "PLACE DU GENERAL DE GAULLE",
        "numero": "sans numero",
        "quartier": "Centre-ville",
        "secteur": "Félix Faure / Allées de la Liberté",
        "coordy": 6280792.44,
        "typo": "Adresses sans numéro",
        "idsect": "40",
        "adresse_complete": null,
        "idcanton": "8",
        "canton": "CANNES-2",
        "nomvoie": "PLACE DU GENERAL DE GAULLE",
        "idquart": "Q_1" 
      },
      "id": "VOIE_302_0",
      "text": "PLACE DU GENERAL DE GAULLE - " 
    },
    {
      "attributes": {
        "nominus": "Place du Général de Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_302_1",
        "codepost": "06400",
        "objectid": 13376,
        "sectpost": "Cannes",
        "coordx": 1024559.53,
        "numero_num": 1,
        "adresse": "1 PLACE DU GENERAL DE GAULLE",
        "numero": "1",
        "quartier": "Centre-ville",
        "secteur": "Félix Faure / Allées de la Liberté",
        "coordy": 6280779.64,
        "typo": "Numéros de voies",
        "idsect": "40",
        "adresse_complete": null,
        "idcanton": "8",
        "canton": "CANNES-2",
        "nomvoie": "PLACE DU GENERAL DE GAULLE",
        "idquart": "Q_1" 
      },
      "id": "VOIE_302_1",
      "text": "1 PLACE DU GENERAL DE GAULLE - " 
    },
    {
      "attributes": {
        "nominus": "Place du Général de Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_302_2",
        "codepost": "06400",
        "objectid": 13390,
        "sectpost": "Cannes",
        "coordx": 1024554.32,
        "numero_num": 2,
        "adresse": "2 PLACE DU GENERAL DE GAULLE",
        "numero": "2",
        "quartier": "Centre-ville",
        "secteur": "Félix Faure / Allées de la Liberté",
        "coordy": 6280807.99,
        "typo": "Numéros de voies",
        "idsect": "40",
        "adresse_complete": null,
        "idcanton": "8",
        "canton": "CANNES-2",
        "nomvoie": "PLACE DU GENERAL DE GAULLE",
        "idquart": "Q_1" 
      },
      "id": "VOIE_302_2",
      "text": "2 PLACE DU GENERAL DE GAULLE - " 
    },
    {
      "attributes": {
        "nominus": "Place du Général de Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_302_3",
        "codepost": "06400",
        "objectid": 13388,
        "sectpost": "Cannes",
        "coordx": 1024552.77,
        "numero_num": 3,
        "adresse": "3 PLACE DU GENERAL DE GAULLE",
        "numero": "3",
        "quartier": "Centre-ville",
        "secteur": "Félix Faure / Allées de la Liberté",
        "coordy": 6280816.45,
        "typo": "Numéros de voies",
        "idsect": "40",
        "adresse_complete": null,
        "idcanton": "8",
        "canton": "CANNES-2",
        "nomvoie": "PLACE DU GENERAL DE GAULLE",
        "idquart": "Q_1" 
      },
      "id": "VOIE_302_3",
      "text": "3 PLACE DU GENERAL DE GAULLE - " 
    },
    {
      "attributes": {
        "nominus": "Place du Général de Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_302_4",
        "codepost": "06400",
        "objectid": 13391,
        "sectpost": "Cannes",
        "coordx": 1024545.66,
        "numero_num": 4,
        "adresse": "4 PLACE DU GENERAL DE GAULLE",
        "numero": "4",
        "quartier": "Centre-ville",
        "secteur": "Félix Faure / Allées de la Liberté",
        "coordy": 6280816.14,
        "typo": "Numéros de voies",
        "idsect": "40",
        "adresse_complete": null,
        "idcanton": "8",
        "canton": "CANNES-2",
        "nomvoie": "PLACE DU GENERAL DE GAULLE",
        "idquart": "Q_1" 
      },
      "id": "VOIE_302_4",
      "text": "4 PLACE DU GENERAL DE GAULLE - " 
    },
    {
      "attributes": {
        "nominus": "Place du Général de Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_302_5",
        "codepost": "06400",
        "objectid": 13386,
        "sectpost": "Cannes",
        "coordx": 1024533.75,
        "numero_num": 5,
        "adresse": "5 PLACE DU GENERAL DE GAULLE",
        "numero": "5",
        "quartier": "Centre-ville",
        "secteur": "Félix Faure / Allées de la Liberté",
        "coordy": 6280813.86,
        "typo": "Numéros de voies",
        "idsect": "40",
        "adresse_complete": null,
        "idcanton": "8",
        "canton": "CANNES-2",
        "nomvoie": "PLACE DU GENERAL DE GAULLE",
        "idquart": "Q_1" 
      },
      "id": "VOIE_302_5",
      "text": "5 PLACE DU GENERAL DE GAULLE - " 
    },
    {
      "attributes": {
        "nominus": "Place du Général de Gaulle",
        "codinsee": "06029",
        "ident": "VOIE_302_6",
        "codepost": "06400",
        "objectid": 13389,
        "sectpost": "Cannes",
        "coordx": 1024524.13,
        "numero_num": 6,
        "adresse": "6 PLACE DU GENERAL DE GAULLE",
        "numero": "6",
        "quartier": "Centre-ville",
        "secteur": "Félix Faure / Allées de la Liberté",
        "coordy": 6280812.06,
        "typo": "Numéros de voies",
        "idsect": "40",
        "adresse_complete": null,
        "idcanton": "8",
        "canton": "CANNES-2",
        "nomvoie": "PLACE DU GENERAL DE GAULLE",
        "idquart": "Q_1" 
      },
      "id": "VOIE_302_6",
      "text": "6 PLACE DU GENERAL DE GAULLE - " 
    }
  ],
  "err": 0
}

Il me reste à vérifier l'import/export des requêtes pour que ce soit complet; je pourrai rajouter d'autres champs aux champs supportés (comme orderByFields).

#9

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Statut changé de Nouveau à Solution proposée

Import/export implémenté.

#11

Mis à jour par Frédéric Péters il y a environ 4 ans

Je préférerais que la présentation des requêtes suive ce qui existe aujourd'hui pour les requêtes du connecteur tableur.

#12

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

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

Je préférerais que la présentation des requêtes suive ce qui existe aujourd'hui pour les requêtes du connecteur tableur.

Je ne vois pas comment ce serait possible, on parle d'un moteur SQL ici, je ne peux pas récupérer les données (je ne sais même pas si c'est possible) et les filtrer coté passerelle et je ne vois pas comment convertir du python en SQL (et obliger les gens à construire du SQL avec des expressions python je ne vois pas non plus où ça nous amène, personne ne pensera à faire le .replace("'", "''") nécessaire pour des chaînes).

Mais peut-être ne parles-tu que des projections (ici id_template et text_template) ? Dans ce cas oui pas de souci on peut faire cela.

#13

Mis à jour par Frédéric Péters il y a environ 4 ans

Je parle de l'interface; j'ai survolé le patch je suis arrivé à .icon-edit:before { content: "\f044"; } et je me suis demandé pourquoi il y avait besoin de ça alors qu'on a déjà un système de requête côté tableur, dont l'interface existe sans cette icône. (ce qui permet alors de regarder les deux, voir que c'est une liste, dans sa propre section, avec des icônes supprimer, etc. tout ça vite rangé dans "présentation des requêtes").

#14

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

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

Je parle de l'interface; j'ai survolé le patch je suis arrivé à .icon-edit:before { content: "\f044"; } et je me suis demandé pourquoi il y avait besoin de ça alors qu'on a déjà un système de requête côté tableur, dont l'interface existe sans cette icône. (ce qui permet alors de regarder les deux, voir que c'est une liste, dans sa propre section, avec des icônes supprimer, etc. tout ça vite rangé dans "présentation des requêtes").

Oui mais c'est moins bien, là on le descriptif des paramètres et la description de la requête. Je veux bien faire un truc moins bien mais pas pour juste économiser une ligne de CSS; mais je note que j'ai oublié le lien pour supprimer et la séparation dans une section à part ne me dérange pas non plus. Par contre revenir à une bête liste qui n'apporte aucune information je trouve que ça n'apporte rien (et on a rien pour mutualiser les templates à ce niveau de toute façon). Les deux informations les plus importantes sont : que fait cette requête et comment on l'appelle. S'il faut s'aligne à un moment, il me semble que ça doit être sur l'IHM la plus pratique pas sur l'existant.

#15

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Statut changé de Solution proposée à En cours
#16

Mis à jour par Frédéric Péters il y a environ 4 ans

Du côté du connecteur tableur, les endpoints créés via les requêtes sont repris dans la section des endpoints, avec toutes les infos, c'est indépendant de la section où les requêtes sont éditées.

#17

Mis à jour par Frédéric Péters il y a environ 4 ans

En fait je (re?)découvre que #39032 n'est pas encore là et du coup le connecteur CSV n'est pas aligné avec la présentation des endpoints. Donc pour décrire le souhait plutôt que faire référence à un truc qui n'existe pas :

Dans les endpoints, tous les endpoints, y compris ceux créés via une requête.

Puis une section requêtes, avec liste et boutons supprimer.

#18

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Voilà j'ai mis la même interface que csvdatasource, j'ai aussi ajouté de quoi cacher le endpoint de base "q" qui ne sert à rien sans requête configurée (il faudrait faire de même sur csvdatasource), la ligne de CSS est virée ainsi que le support d'une edit_url dans le template d'affiche d'une endpoint.

Branche à jour.

#19

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Statut changé de En cours à Solution proposée
#20

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Assigné à mis à Benjamin Dauvergne
#21

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Patch proposed changé de Non à Oui
#22

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

J'attendrai que #39032 passe pour rebaser.

#23

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Voilà c'est rebasé et j'ai intégré les changements de #39032, c'est à dire deux points :
  • le besoin de class="endpoints" sur le <ul> encapsulant les endpoints
  • le retrait du <span> explicite contenant le verbe HTTP

Je remarque au passage que la description longue d'un endpoint est en gras, je ne sais pas si c'était voulu.

#24

Mis à jour par Frédéric Péters il y a environ 4 ans

Je remarque au passage que la description longue d'un endpoint est en gras, je ne sais pas si c'était voulu.

Moi non plus, #39033.

#25

Mis à jour par Thomas Noël il y a environ 4 ans

Ca semble pas mal du tout. Mais deux choses :
  • id_template et text_template ne doivent pas être obligatoires (et les placer en bas, tiens, pour laisser ensemble en haut folder, service et layer, dans cet ordre)
  • en plus de q et full, il faut pouvoir envoyer lat et lon

Aussi, faut mettre à jour ou refaire la migration. Un makemigrations m'a montré des modifs sur verbose_name, etc.

#26

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • migration mise à jour
  • id_template et text_templte rendus optionnels
  • folder,service,layer réordonnés (et migration encore refaite au passage)
  • tous les paramètres de mapservice_query sont désormais recopiés s'ils n'ont pas été surchargé par la query

(branche à jour avec des commits temporaires pour voir les modifications)

#27

Mis à jour par Thomas Noël il y a environ 4 ans

  • Statut changé de Solution proposée à Solution validée

Tout chouette !

En loucedé tu ajouterais un petit commit avec un show:False sur le endpoint district ? (vieux truc mal foutu spécifique à Nancy, à chaque fois on me demande "c'est quoi ça ?").

#28

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 945cffdbd0081db49959f12dc5a081fb28d08ff5
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Mar 13 17:05:13 2020 +0100

    arcgis: hide district endpoint (#27782)

commit b4d1050ef3247a231d7d62369225a96644a205f2
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Feb 7 08:37:16 2020 +0100

    arcgis: add query system (#27782)

commit 7999106ce5a9ca6b42ca7ba1d9e82b8ecd6031b9
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Feb 11 15:29:16 2020 +0100

    misc: allow hiding of endpoints (#27782)

    For endpoints which are dynamic.

commit 0251636f5758a0a95bc8e563812295a5568084e5
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Feb 7 12:30:42 2020 +0100

    templates: factorize endpoint template (#27782)
#29

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF