Projet

Général

Profil

Development #11204

Ne pas nécessiter de vue pour chaque endpoint

Ajouté par Frédéric Péters il y a presque 8 ans. Mis à jour il y a plus de 5 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Lié à Passerelle - Autre #11198: Alléger le développement de nouveaux connecteursFermé04 juin 2016

Actions

Révisions associées

Révision e644b3cf (diff)
Ajouté par Frédéric Péters il y a presque 8 ans

general: add generic endpoint view (#11204)

Historique

#1

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

#2

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é
#3

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

(fichier oublié, mini-décorateur, prêt à être étendu).

#4

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).

#5

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

(corrigé)

#6

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.

#7

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.

#8

Mis à jour par Serghei Mihai il y a presque 8 ans

Ack

#9

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)
#10

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

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

Formats disponibles : Atom PDF