Projet

Général

Profil

Development #12574

endpoints avec composants (exemple: children/<id>)

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

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

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Actuellement les @endpoints définissent juste des URLs de type /funcname/

Or on a besoin de pouvoir aller un peu plus loin, par exemple pour faire un peu "restful" : /children/ et /children/<id>/


Fichiers

0001-add-pattern-parameter-to-generic-endpoints.patch (2,69 ko) 0001-add-pattern-parameter-to-generic-endpoints.patch Benjamin Dauvergne, 13 juillet 2016 17:25
0001-add-pattern-parameter-to-generic-endpoints.patch (3,4 ko) 0001-add-pattern-parameter-to-generic-endpoints.patch Benjamin Dauvergne, 13 juillet 2016 18:27
0002-remove-need-for-urlpatterns-in-base_adresse-connecto.patch (6,13 ko) 0002-remove-need-for-urlpatterns-in-base_adresse-connecto.patch Benjamin Dauvergne, 13 juillet 2016 18:28
0001-add-pattern-parameter-to-generic-endpoints.patch (3,4 ko) 0001-add-pattern-parameter-to-generic-endpoints.patch Benjamin Dauvergne, 13 juillet 2016 18:47
0002-remove-need-for-urlpatterns-in-base_adresse-connecto.patch (6,3 ko) 0002-remove-need-for-urlpatterns-in-base_adresse-connecto.patch Benjamin Dauvergne, 13 juillet 2016 18:47
0005-trivial-pep8-indenting.patch (1,96 ko) 0005-trivial-pep8-indenting.patch Benjamin Dauvergne, 13 juillet 2016 22:40
0004-trivial-remove-dead-assignment.patch (767 octets) 0004-trivial-remove-dead-assignment.patch Benjamin Dauvergne, 13 juillet 2016 22:40
0003-trivial-remove-dead-import.patch (744 octets) 0003-trivial-remove-dead-import.patch Benjamin Dauvergne, 13 juillet 2016 22:40
0001-add-pattern-parameter-to-generic-endpoints.patch (3,38 ko) 0001-add-pattern-parameter-to-generic-endpoints.patch Benjamin Dauvergne, 13 juillet 2016 22:41
0002-remove-need-for-urlpatterns-in-base_adresse-connecto.patch (7,03 ko) 0002-remove-need-for-urlpatterns-in-base_adresse-connecto.patch Benjamin Dauvergne, 13 juillet 2016 22:41
0001-add-pattern-parameter-to-generic-endpoints.patch (3,52 ko) 0001-add-pattern-parameter-to-generic-endpoints.patch Benjamin Dauvergne, 14 juillet 2016 12:37

Révisions associées

Révision 543b42b0 (diff)
Ajouté par Benjamin Dauvergne il y a presque 8 ans

add pattern parameter to generic endpoints (#12574)

Révision c40f0a6d (diff)
Ajouté par Benjamin Dauvergne il y a presque 8 ans

remove need for urlpatterns in base_adresse connector (fixes #12574)

Using the new pattern parameter of the endpoint decorator, also add dependency
on django-webtest for tests.

Historique

#1

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

Idée basique :

  • modifier le urls.py : /(?P<endpoint>[\w,-]+)$ deviendrait /(?P<endpoint>[\w,-]+)(?P<components>/.*)?$
  • et lors de l'appel du endpoint, on envoie le components.split('/') dans les *args

Charge alors au endpoint de gérer ce qu'il reçu dans ses args.

(Ca manque sans doute un peu de possibilité de contrôle.)

#2

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

  • Fichier 0001-add-pattern-parameter-to-generic-endpoints.patch ajouté

Une idée, en réutilisant l'objet RegexURLPattern de Django (absolument pas testé mais c'est pas loin du but).

#3

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

  • Fichier 0001-add-pattern-parameter-to-generic-endpoints.patch supprimé
#5

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

Ça me semble dans l'esprit; ça pourrait être intégré et par exemple utilisé dans le connecteur base adresse, pour remplacer le /search/(?P<path.*) ? (avec un test)

#6

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

J'ai regardé le connecteur mais on a perdu le endpoint reverse depuis ce commit:

commit e644b3cfc8efce9481cce8e67c976b0a53f67372
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sun Jun 5 10:00:59 2016 +0200

    general: add generic endpoint view (#11204)

#7

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

Bon l'interaction entre get(), post(), perform() et get_params() dans GenericEndpointView c'est un peu cracra on dirait de la mauvaise inspiration par django-rest-framework; je veux bien qu'on m'explique si il y a un sens à tout ça et le refaire proprement avant de commiter.

Le deuxième patch applique ce nouveau paramètre pattern pour se passer du urls.py et views.py du connecteur base_adresse et restaure le fonctionne de la vue reverse.

#8

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

J'ai modifié get_params() pour permettre d'avoir si on veut soit des paramètres d'URL soit du pattern matching sur l'URL (là par exemple on pourra avoir search?q= ou search/xxx.

#9

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

  • Statut changé de Nouveau à En cours

J'ai regardé le connecteur mais on a perdu le endpoint reverse depuis ce commit:

? https://passerelle-demo.dev.entrouvert.org/base-adresse/ban/reverse?lat=48.833708&lon=2.323349&format=json fonctionne.

~~

Tu as un truc dans ton éditeur qui reformate du code; tu pourrais le désactiver pour notamment garder l'alignement avec le code existant ? et aussi, si ça a un intérêt, mettre ces changements dans un commit différent ?

Dans les tests :

AccessRight(codename='can_access', resource=ba, apiuser=api_user_all).save()

Il n'y a pas de restriction de sécurité dans le connecteur. Utiliser mock pour assurer un retour sans réseau ?

#10

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

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

J'ai regardé le connecteur mais on a perdu le endpoint reverse depuis ce commit:

? https://passerelle-demo.dev.entrouvert.org/base-adresse/ban/reverse?lat=48.833708&lon=2.323349&format=json fonctionne.

Hmm c'est de ne pas voir de regexp pour /reverse alors qu'il y en a une pour /search qui m'a perturbé, mais en fait elles viennent en plus de celles générées pour GenericEndpointView. Mais bon ça m'a fait rajouter un test pour reverse ce n'est pas plus mal.

~~

Tu as un truc dans ton éditeur qui reformate du code; tu pourrais le désactiver pour notamment garder l'alignement avec le code existant ?

Non non c'est moi, pyflake me dit que l'alignement n'est pas bon, il n'a pas tort: https://www.python.org/dev/peps/pep-0008/#indentation

et aussi, si ça a un intérêt, mettre ces changements dans un commit différent ?

Ok.

Dans les tests :

AccessRight(codename='can_access', resource=ba, apiuser=api_user_all).save()

Ok.

Il n'y a pas de restriction de sécurité dans le connecteur. Utiliser mock pour assurer un retour sans réseau ?

Ok, je vais ajouter du httmock.

#12

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

J'ai modifié get_params() pour ne pas poser de paramètre à None si la regexp ne match pas. C'est en prévision de #12580.

#13

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

C'est au #12583 que je pensais, non pas #12580.

#14

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

Je peux le faire dans un prochain commit qui ajoutera la possibilité de documenter le endpoint mais ça commence à être utile d'ajouter une docstring à la class endpoint.

Je dirais que c'est ok, et JB aura un peu à adapter ses modifications au connecteur base adresse. (#10892)

#15

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

Ok pour moi aussi (mais je boude)

#16

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

  • Statut changé de En cours à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#17

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

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

Formats disponibles : Atom PDF