Project

General

Profile

Development #57258

Ajouter un connecteur Plone

Added by Nicolas Roche 23 days ago. Updated 1 day ago.

Status:
Solution proposée
Priority:
Normal
Assignee:
Target version:
-
Start date:
24 Sep 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Pour simplifier les requêtes GET depuis combo.
https://dev.entrouvert.org/issues/51765#note-26

Pour paramétrer le libellé et la description à afficher dans les tuiles.
https://dev.entrouvert.org/issues/56545#note-5

Et aussi pour gérer l'envoie de contenus.
https://dev.entrouvert.org/issues/56545#note-3


Files


Related issues

Related to Intégrations graphiques Publik - Development #56545: braine l’alleud, adapter la cellule Actualité pour aller chercher les contenus sur plone.En cours01 Sep 2021

Actions

History

#1

Updated by Nicolas Roche 23 days ago

Je suis parti d'un connecteur de type "donnée" (opendatasoft et j'ai laissé la recherche sur q/id).

J'ai ajouté un champ "meta" au retour des appels sur les requêtes qui indique le nom et la description de l'objet requête (pour les afficher dans la tuille).

#2

Updated by Frédéric Péters 20 days ago

Je n'ai pas regardé mais tu peux appeler le connecteur plone-restapi, vu que ça s'attaque à ça, plutôt que "plone" en général ?

#4

Updated by Nicolas Roche 20 days ago

  • Related to Development #56545: braine l’alleud, adapter la cellule Actualité pour aller chercher les contenus sur plone. added
#5

Updated by Nicolas Roche 3 days ago

J'ai retiré l'authentification basique au profit de l'authentification OIDC.
Je table sur le fait qu'actuellement on n'en a pas besoin (#57755) et qu'à terme tout passera par OIDC.

Bien que l'authentification OIDC soit spécifique à Imio, j'ai laissé le connecteur dans "apps" parce que la partie requête de recherche peut toujours s'utiliser de façon anonyme.

Pour aider la relecture :
  • connecteur copié depuis opendatasoft, pour avoir des objets Query très similaires.
  • connection OIDC avec token copié depuis lille_kimoce.
  • système CRUD copié depuis esirius.
  • payload du post et du put sans schéma comme sur greco.

Le connecteur est documenté ici :
https://dev.entrouvert.org/projects/braine-l-alleud/wiki/Plone_REST_API

#6

Updated by Frédéric Péters 2 days ago

    @classmethod
    def plone_to_wcs(cls, key):
        return 'portal_%s' % key[1:] if key[0] == '@' else None

    @classmethod
    def wcs_to_plone(cls, key):
        return '@%s' % key[7:] if key[0:7] == 'portal_' else None

Il manque autour de ça des commentaires et peut-être des meilleurs noms de méthodes pour expliciter ce que c'est supposé faire. Je comprends que ça tourne autour d'un normalize_record() mais c'est confus.

        path = '/'.join(x for x in [path.rstrip('/'), uri.strip('/'), uid.strip('/')] if x)

Uh? Sans être sûr de moi je dirais que c'est du code pour éviter un double-slash quelque part mais c'est abscons. Et peut-être pas ça. Et à mon avis à laisser de côté.

connecteur copié depuis opendatasoft, pour avoir des objets Query très similaires.

Il faut quand même pas trop copié/collé, ce truc de refine/exclude facet est beaucoup trop le vocabulaire spécifique opendatasoft :

        help_text=_('Specify refine and exclude facet expressions separated lines'),

~~

from django.utils.six.moves.urllib import parse as urlparse

Il faut arrêter avec six, on ne fait plus que du python3.

query = urlparse.urlsplit(self.service_url)[3]

c'est peu clair d'utiliser [3], on gagne vraiment en compréhension à plutôt faire .query.

    models.UUIDField,

sort de nulle part. (?)

#7

Updated by Nicolas Roche 2 days ago

Il manque autour de ça des commentaires et peut-être des meilleurs noms de méthodes pour expliciter ce que c'est supposé faire.

C'est pour éviter ces complications dans combo
https://dev.entrouvert.org/issues/51764#note-15

<a href="{{actu|get:'@id'}}">

Mais aussi parce que pour passer ces champs dans la query string vers Plone il faut les renommer de la sorte.
https://dev.entrouvert.org/issues/51764#note-9

https://conseil.staging.imio.be/@search?portal_type=Meeting

Dans le payload, Plone accepte les 2 syntaxes. J'ai trouvé plus cohérent de renommer les clés partout.
J'ai essayé d'être plus explicite dans le code/commentaires.

c'est du code pour éviter un double-slash quelque part

oui, et pour gérer les paramètres vides (j'ai simplifié).

Il faut quand même pas trop copié/collé,

J'ai modifié :

filter_expression -> 'Specify more URL parameters (key=value) separated by lines'

Il faut arrêter avec six, on ne fait plus que du python3.
c'est peu clair d'utiliser [3], on gagne vraiment en compréhension à plutôt faire .query.

Fait.

sort de nulle part. (?)

Un oubli, merci.

#8

Updated by Frédéric Péters 2 days ago

C'est pour éviter ces complications dans combo
Mais aussi parce que pour passer ces champs dans la query string vers Plone il faut les renommer de la sorte.

Je crains que ça n'amène plus de confusion qu'autre chose, sauf impossibilité (à exprimer) je ferais vraiment sans.

#9

Updated by Nicolas Roche 1 day ago

Je crains que ça n'amène plus de confusion qu'autre chose, sauf impossibilité (à exprimer) je ferais vraiment sans.

Merci, je me suis trompé : il faut nécessairement passer '@truc' dans le payload (ici testé avec "portal_type") :

{'message': "Property '@type' is required", 'type': 'BadRequest'}

Pour la récupération des champs 'truc' dans combo et wcs, je vois un endroit où ça pourrait coincer : dans le gabarit du connecteur où l'on ne dispose pas du filtre @get.
Aussi, wcs ne reconstruit pas de variable qui permet d'atteindre des valeurs dont le chemin contient des des clé préfixées par des '@'.
Je propose de laisser le renommage des clé de Plone, là où l'on fait la normalisation.

Par contre cela m'amène à un autre point que j'ai zappé.
Dans wcs, pour passer des dictionnaires et des tableaux je dois faire "unflatten" sur le payload.

#10

Updated by Frédéric Péters 1 day ago

Merci, je me suis trompé : il faut nécessairement passer '@truc' dans le payload (ici testé avec "portal_type") :

Au plus je regarde au moins je comprends.

Dans https://dev.entrouvert.org/attachments/58388 qui est ton script d'envoi d'infos, ça envoie une clé title, pas @title.

Mais en fait en passant du temps à décortiquer ce qui a pu changer entre tes patchs, la situation du dernier serait en fait bien "on envoie les données que wcs envoie, comme wcs les envoie". Mais que par contre "on modifie les données reçues de Plone : on remplace les @ en préfixe par portal_".

Ça m'a l'air encore totalement confusion. Le fichier de test qui ne correspondent pas du tout à nos cas pratiques n'aide pas.

S'il fallait un truc, je serais pour quelque chose de bien explicite : noter que les clés @id et @type qui peuvent se trouver dans les réponses de plone sont converties en clés PLONE_id et PLONE_type : 1/ on explicite les clés concernées, on annonce qu'on ne va pas aller modifier n'importe quoi, 2/ on explicite le changement que ça amène et on met un changement qui est bien clair, genre PLONE_ plutôt que portal_ qui ne signifie rien.

Qu'il soit clair aussi que j'ai une détestation assez tenace du mot "normalize" qui veut juste rien dire, donc quand je répète explicite ci-dessus, c'est aussi pour encourager un nom de méthode explicite, genre adapt_id_and_type_plone_attributes.

Dans wcs, pour passer des dictionnaires et des tableaux je dois faire "unflatten" sur le payload.

On gagnerait à un exemple pratique. (je ne vais pas creuser)

#11

Updated by Nicolas Roche 1 day ago

Dans https://dev.entrouvert.org/attachments/58388 qui est ton script d'envoi d'infos, ça envoie une clé title, pas @title.

(je ne comprend pas à quoi fait référence la clé @title)

Ça m'a l'air encore totalement confusion. Le fichier de test qui ne correspondent pas du tout à nos cas pratiques n'aide pas.

Fait. Ça me permet d'ajouter des données de test qui contiennent un exemple avec de la geolocalisation et des d'horaires.

S'il fallait un truc, je serais pour quelque chose de bien explicite :
noter que les clés @id et @type qui peuvent se trouver dans les réponses de plone sont converties en clés PLONE_id et PLONE_type

Fait en commentaire.

1/ on explicite les clés concernées, on annonce qu'on ne va pas aller modifier n'importe quoi,

Cela concerne uniquement les clé qui commencent par '@', mais oui, ici il n'y en a que 3 : '@id', '@type' et '@components'.
Je les ai posées dans une variable.

2/ on explicite le changement que ça amène et on met un changement qui est bien clair, genre PLONE_ plutôt que portal_ qui ne signifie rien.

Oui, PLONE_ pour la réponse ; portal_ c'est pour la query-string, ça n'a rien à voir ici.

Qu'il soit clair aussi que j'ai une détestation assez tenace du mot "normalize" qui veut juste rien dire, donc quand je répète explicite ci-dessus, c'est aussi pour encourager un nom de méthode explicite, genre adapt_id_and_type_plone_attributes.

Fait.

Dans wcs, pour passer des dictionnaires et des tableaux je dois faire "unflatten" sur le payload.
On gagnerait à un exemple pratique. (je ne vais pas creuser)

C'est ma faute, je ne me suis mal relu : je dois faire -> je fait à présent appel à "unflatten"
cf test_create :

    payload = {
        'topics/0/title': 'Tourisme',
        'topics/0/token': 'tourism',
    }

Also available in: Atom PDF