Development #11204
Ne pas nécessiter de vue pour chaque endpoint
0%
Description
Pour le moment chaque endpoint doit venir d'une vue (et de sa déclaration dans l'urls.py du connecteur) et très souvent la vue n'est qu'un mini-wrapper vers une méthode de la classe (ou pourrait l'être).
Voici donc une proposition pour viser directement la méthode, permettre d'avoir :
class BaseAdresse(BaseResource): [...] @endpoint def search(self, request, q): result = ... return result
(oui ça peut avoir des airs de quixote).
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a presque 8 ans
- Fichier 0001-general-add-generic-endpoint-view-11204.patch 0001-general-add-generic-endpoint-view-11204.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a presque 8 ans
- Lié à Autre #11198: Alléger le développement de nouveaux connecteurs ajouté
Mis à jour par Frédéric Péters il y a presque 8 ans
- Fichier 0001-general-add-generic-endpoint-view-11204.patch 0001-general-add-generic-endpoint-view-11204.patch ajouté
(fichier oublié, mini-décorateur, prêt à être étendu).
Mis à jour par Frédéric Péters il y a presque 8 ans
(la version qui est dans la branche publiée force le décorateur @to_json à tous les endpoints, ce qui n'est pas corect. À corriger).
Mis à jour par Benjamin Dauvergne il y a presque 8 ans
Il me semble qu'an ajoutant un champ description et un champ query_example
on pourrait se passer complètement des surcharges du template detail, et mettre directement la partie endpoints dans service_view (je vois qu'un bloc commun est créé dans un patch plus loin mais j'irai vers un truc comme ça:):
<ul> {% block endpoints_list %} {% for endpoint in object.get_endpoints %} <li>{{ endpoint.description %} {% url "generic_endpoint" connector=endpoint.connector slug=object.slug endpoint=endpoint.name as endpoint_url %} <a href="{{ endpoint_url }}{% if endpoint.example_query %}{{ endpoint.example_query }}{% endif %}"> {{ site_base_uri }}{{ endpoint_url }}{% if endpoint.example_query %}{{ endpoint.example_query }}{% endif %} </a> </li> {% endfor %} {% endblock %} </ul>
Il faudrait recopier func.__name__ dans endpoint.name et le app_name dans endpoint.connector (ou les passer tout bêtement dans le contexte de la vue Detail ).
Ça laisse la place aux endpoints "non génériques" en utilisant {{ block.super }} dans le template surchargé.
Plus tard on pourra aussi essayer d'extraire la docstring, la parser avec docutils et l'afficher.
À part cette remarque de fond, ack.
Mis à jour par Frédéric Péters il y a presque 8 ans
Yep, c'est bien l'objectif, avoir du déclaratif pour ne pas devoir maintenir une liste parallèle dans le template html.
Mis à jour par Frédéric Péters il y a presque 8 ans
- Statut changé de En cours à Résolu (à déployer)
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)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
general: add generic endpoint view (#11204)