Projet

Général

Profil

Development #39425

Commande de management pour importer des ressources (assets)

Ajouté par Nicolas Roche il y a environ 4 ans. Mis à jour il y a plus de 3 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Copié/Collé de #8183 :
Ça serait utile pour avoir des déclinaisons des modèles de site, pour être appelé par le déploiement par hobo.


Fichiers

0001-assets-add-import_assets-management-command-39425.patch (13,2 ko) 0001-assets-add-import_assets-management-command-39425.patch Nicolas Roche, 03 février 2020 09:29
0001-data-merge-assets-and-site-export-file-39425.patch (53 ko) 0001-data-merge-assets-and-site-export-file-39425.patch Nicolas Roche, 13 février 2020 14:19
0002-assets-factorize-import-export-code-39425.patch (11,1 ko) 0002-assets-factorize-import-export-code-39425.patch Nicolas Roche, 17 février 2020 09:30
0001-trivial-remove-unused-imports-39425.patch (3,69 ko) 0001-trivial-remove-unused-imports-39425.patch Nicolas Roche, 17 février 2020 09:30
0003-general-add-import-export-tar-format-for-site-39425.patch (19,6 ko) 0003-general-add-import-export-tar-format-for-site-39425.patch Nicolas Roche, 17 février 2020 09:30
0003-manager-add-tar-format-for-site-export-import-39426.patch (10,8 ko) 0003-manager-add-tar-format-for-site-export-import-39426.patch Nicolas Roche, 13 juillet 2020 19:19
0002-commands-add-tar-format-for-site-export-import-39426.patch (14,1 ko) 0002-commands-add-tar-format-for-site-export-import-39426.patch Nicolas Roche, 13 juillet 2020 19:19
0001-assets-factorize-import-export-code-39425.patch (10,4 ko) 0001-assets-factorize-import-export-code-39425.patch Nicolas Roche, 13 juillet 2020 19:19
0002-commands-add-tar-format-for-site-export-import-39426.patch (14,1 ko) 0002-commands-add-tar-format-for-site-export-import-39426.patch Nicolas Roche, 14 juillet 2020 19:50
0001-assets-factorize-import-export-code-39425.patch (10,5 ko) 0001-assets-factorize-import-export-code-39425.patch Nicolas Roche, 27 juillet 2020 16:53
0002-commands-add-tar-format-for-site-export-import-39425.patch (14,1 ko) 0002-commands-add-tar-format-for-site-export-import-39425.patch Nicolas Roche, 27 juillet 2020 16:53

Demandes liées

Lié à Combo - Development #6756: Import/export de /media/Fermé17 mars 2015

Actions
Lié à Combo - Development #45128: Importer des ressources (assets) via l'IHM d'import de site/pagesFermé15 juillet 2020

Actions
Dupliqué par Combo - Development #44675: Commande de management d'import de resourcesRejeté01 juillet 2020

Actions

Révisions associées

Révision f0e0de43 (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

assets: factorize import/export code (#39425)

Révision 0f856f13 (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

commands: add tar format for site export/import (#39425)

Historique

#2

Mis à jour par Nicolas Roche il y a environ 4 ans

#3

Mis à jour par Nicolas Roche il y a environ 4 ans

J'ai factorisé de code lié aux manipulation du TAR,
et j'ai renommé l'option "--is-empty' en '--overwrite'.

#4

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

Je serais plutôt pour que ce travail soit intégré dans les commandes existantes (import/export_site), l'idée d'ensuite qu'il puisse y avoir un format d'export unique, pages + assets, dans la suite de #37674.

#5

Mis à jour par Nicolas Roche il y a environ 4 ans

Oui cela simplifiera la gestion des ressources.
Mais cela veut-il dire qu'il faudra gérer un second format (tar) d'import des sites en parallèle, en attendant que le premier (json) devienne obsolète ?

#6

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

Gérer de recevoir un .tar en entrée, oui, mais il n'y a pas de plan pour rendre obsolète le json simple, c'est notamment ce que donne l'export direct d'une page.

#7

Mis à jour par Nicolas Roche il y a environ 4 ans

J'ai mergé les 2 formats dans un seul TAR :
  • export des assets comme avant : TAR avec _assets.json et les fichiers des assets
  • export de site : le même TAR avec en plus le contenu JSON inséré dans _site.json

J'ai gardé la possibilité d'utiliser des flux en entrée / sortie, ce qui rend le patch complètement illisible (surtout pour les tests).

J'ai suivi ce plan :
1) casser la dépendance (qui deviendrait circulaire) d'import_assets envers import site
2) factorisation du code dans assets/utils.py
3) nouveau format TAR pour export sites : utils.py, export_site.py, views.py
4) nouveau format TAR pour import sites: utils.py, import_site.py, views.py
Mais je n'ai pas découpé en plusieurs commit, parce que je n'ai corrigé les tests qu'à la fin.

#8

Mis à jour par Nicolas Roche il y a environ 4 ans

#9

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

     def render_to_response(self, context, **response_kwargs):
-        response = HttpResponse(content_type='application/json')
-        json.dump(export_site(), response, indent=2)
-        return response
+        fd = BytesIO()
+        tar = tarfile.open(mode='w', fileobj=fd)
+        export_site(tar)
+        tar.close()
+        return HttpResponse(fd.getvalue(), content_type='application/x-tar')

Je crains timeout + consommation mémoire excessive; ça s'imagine de gérer ça avec StreamingHttpResponse (en imaginant le tar créé petit à petit) ou FileResponse (en imaginant le tar créé dans un fichier temporaire, même si ça ne répond pas au bout timeout). (je ferai un ticket différent pour ça) (vu qu'on a le même "problème" pour l'export des ressources).

Je ne comprends pas comment les tests se retrouvent à tant devoir changer, avec fixtures capsysbinary/monkeypatch. (et je suis bien plus intéressé par un patch qui ne demande pas ça que par une explication).

flux en entrée / sortie

Ça se fait pour du texte, pas pour du binaire.

Là je dirais, à garder les choses ainsi, que la commande d'export doit gagner un paramètre --json (ou --format-json), qui permettra de sortir uniquement le json, et qui lui pourrait se trouver sur stdout. Mais que dans le mode "tar" par défaut, pas d'utilisation de sys.stdout. Et je pense que faire ça ainsi répondra directement à mon commentaire sur les tests, il suffira que ceux-ci passent --json, et rien d'autre ne sera alors à changer.

#10

Mis à jour par Nicolas Roche il y a environ 4 ans

Travail principalement découpé en 2 parties pour en faciliter la relecture :
  • 0002: aucune modification fonctionnelle (les anciens tests passent en l'état).
  • 0003: code qui réutilise l'ancien code JSON sans le modifier.
    Les changement concernent principalement les interfaces : commands et views, qui gérent les 2 formats.
#11

Mis à jour par Valentin Deniaud il y a presque 4 ans

#12

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

Pas évident à suivre.

Pour ressusciter ce ticket je suggérerais de passer 0001 et 0002 qui me semblent ok plus une nouveau 0003 bidon qui dans la CLI de import-site ferait juste un import_assets(overwrite=False) si le fichier est au format tar sans rien demander à l'utilisateur (en excluant stdin de ce mécanisme).

Et la suite posée clairement dans autre ticket.

#13

Mis à jour par Nicolas Roche il y a presque 4 ans

Pas évident à suivre.

Oui, il y a 2 formats à gérer pour les imports : JSON et TAR (qui contient le JSON)
Le format TAR fonctionne déjà pour l'import des assets (proposé uniquement via l'IHM).
Les deux formats fonctionneront sur l'import complet du site ou des pages individuelles (via l'IHM et en ligne de commande).

Pour ressusciter ce ticket je suggérerais ...

J'ai revu la gestions des paramètres : plutôt que de déduire 'overwrite' (qui s'applique individuellement à chacun des fichiers d'assets) de 'if_empty' (qui s'applique à l'ensemble du site), je rajoute un paramètre d'overwrite à l'import pour traiter les fichiers assets. (par défaut overwrite=False).

J'ai découpé l'ancien 0003 en 2 :
  • 0002 qui ne traite que l'ajout du format TAR pour l'import/export en ligne de commande
  • 0003 qui utilise désormais le format TAR via l'IHM pour l'export et qui prend en
    compte les 2 formats lors de l'import.

0003 est donné à tire indicatif ; je le proposerai dans un nouveau patch et ce sera peut-être l'occasion de proposer un système de téléchargement asynchrone en prévision des gros volumes.

#14

Mis à jour par Nicolas Roche il y a presque 4 ans

0003 retiré de la branche et appel à close() ajouté dans export_site.py

#15

Mis à jour par Nicolas Roche il y a presque 4 ans

  • Lié à Development #45128: Importer des ressources (assets) via l'IHM d'import de site/pages ajouté
#16

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

0001, il faut deux lignes vides entre les fonctions; à part ça je n'ai pas testé mais je pense que ça doit rouler.

#18

Mis à jour par Valentin Deniaud il y a plus de 3 ans

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

J'ai testé et ça marche pour moi. D'une lecture très rapide du code, je remarque juste que

+from combo.apps.assets.utils import (add_tar_content, clean_assets_files,
+        untar_assets_files, tar_assets_files)

n'est pas indenté correctement.

#19

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 0f856f1334b19282acd0fb3cc2d724d5b4b76b9e
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Mon Jul 13 17:45:49 2020 +0200

    commands: add tar format for site export/import (#39425)

commit f0e0de43e560ff47e031de40485a1cbb441e5331
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Sun Feb 16 17:05:53 2020 +0100

    assets: factorize import/export code (#39425)
#20

Mis à jour par Frédéric Péters il y a plus de 3 ans

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

Formats disponibles : Atom PDF