Projet

Général

Profil

Development #60698

API export/import pour la création et l'installation d'applications

Ajouté par Frédéric Péters il y a environ 2 ans. Mis à jour il y a environ 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
16 janvier 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Dans le cadre du projet d'applification il y a pour l'assemblage d'une application besoin d'API pour lister/exporter les objets possibles, et pour l'installation d'une API prenant un bundle d'objets.


Fichiers


Demandes liées

Lié à Publik - Development #49204: "Applification" des modules (applications métiers) PublikEn cours08 décembre 2020

Actions

Révisions associées

Révision 950abc92 (diff)
Ajouté par Frédéric Péters il y a environ 2 ans

trivial: add slug property to forms/cards (#60698)

Révision 1c93862e (diff)
Ajouté par Frédéric Péters il y a environ 2 ans

misc: add export/import API (#60698)

Historique

#1

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

  • Lié à Development #49204: "Applification" des modules (applications métiers) Publik ajouté
#2

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

0001 pour ajouter un alias slug (vers url_name) sur les formdef/carddef.

0002 avec le vrai boulot, par endpoint ça donne :

  • api/export-import/, la liste des types d'objets qu'on peut exporter (formulaires, démarches, etc.) c'est bidon,
  • api/export-import/(?P<objects>[\w-]+)/, la liste des objets du type donné, c'est tout aussi bidon,
  • api/export-import/(?P<objects>[\w-]+)/(?P<slug>[\w_-]+)/, la sérialisation de l'objet donné, on n'est pas sorti du bidon.
  • api/export-import/(?P<objects>[\w-]+)/(?P<slug>[\w_-]+)/dependencies/, les dépendances de l'objet donné,

Il s'agit des dépendances directes (hobo à l'assemblage fera le parcours pour suivre celles-ci), ça passe par l'ajout d'une méthode get_dependencies à divers endroits, sont couverts les endroits faciles et évidents. Ne sont pas couverts les autres, comme par exemple une condition qui aurait en expression une requête basée sur des fiches, ou un champ commentaire qui aurait comme contenu le résultat d'un appel webservice. Ça pourra venir mais ça n'était pas essentiel.

  • api/export-import/bundle-import/, le chargement d'une application,

Ça couvre installation et mise à jour; deux trucs particuliers sont à noter :

1/ il y a une installation en deux phases, la première crée juste certains objets avec leur slug; la deuxième fait l'import réel des objets, qui ne risquent à ce moment-là plus d'échouer sur une dépendance qui n'existe pas (parce que phase 1).

2/ pour les formulaires et modèles de fiche il y a une série d'attributs qui sont conservés (options de workflow, attribution des rôles, paramètres de publication).

#3

Mis à jour par Lauréline Guérin il y a environ 2 ans

def test_export_import_form_404(pub):
    get_app(pub).get(sign_uri('/api/export-import/xxx/plop/'), status=404)

mauvaise url ? (xxx => forms ?)

#4

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

Dans ma tête c'était pour passer sur

def get_object(objects, slug):
    klass = klasses.get(objects)
    if not klass:
        raise Http404()

mais je vais en ajouter un autre pour gérer/tester la 404 sur le mauvais slug.

#5

Mis à jour par Lauréline Guérin il y a environ 2 ans

Dans wcs/fields.py get_dependencies:

                yield NamedDataSource.get_by_slug(data_source_type, ignore_errors=True)

data_source_type pourrait être None, mais c'est géré par
        for dependency in obj.get_dependencies():
            if dependency is None or isinstance(dependency, StubNamedDataSource):
                continue

?

#6

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

Oui, j'ai préféré laisser le StubNamedDataSource passer et les traiter derrière dans for dependency in obj.get_dependencies(), dans l'idée que des sources de données pourraient être mentionnées ailleurs (condition ou gabarit) et que je ne voulais pas répéter le traitement du cas StubNamedDataSource (même si ces cas ne sont actuellement pas traités).

#7

Mis à jour par Lauréline Guérin il y a environ 2 ans

pour moi c'est ok, une autre personne veut relire ?

#8

Mis à jour par Lauréline Guérin il y a environ 2 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 1c93862e6051d8107db382db4a19aa948b44f2d8
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Fri Dec 31 14:59:14 2021 +0100

    misc: add export/import API (#60698)

commit 950abc925b770ed32b61b835bd7d8f92d544b070
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sun Jan 16 19:06:32 2022 +0100

    trivial: add slug property to forms/cards (#60698)
#10

Mis à jour par Transition automatique il y a environ 2 ans

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

Mis à jour par Transition automatique il y a presque 2 ans

Automatic expiration

Formats disponibles : Atom PDF