master.py : passer d'une logique stateless à statefull #82
Labels
No Label
Core
bug
duplicate
easy
enhancement
help wanted
invalid
performance
proposal
question
security
warning
wontfix
No Milestone
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: devs/PCv5#82
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Quand on exécute le script master.py, il exécute quoi qu'il arrive la suppression puis la création des assets qu'on souhaite : comptes par défaut, groupes, trophées, etc.
C'est problématique lorsque l'on veut ajouter un asset à la volée : les relations de la BDD sont déjà créées, donc on ne peut pas supprimer un item sans avoir à reconstruire intégralement la BDD.
L'idée est donc de regarder si les éléments existent, et pour ceux qui n'existent pas, les créer.
On a malheureusement pas d'ID unique sur les assets, donc si le nom d'un asset est modifié, un nouveau sera créé au lieu de modifier l'ancien. On doit pouvoir s'en sortir en ajoutant des ID à la main dans le
yaml
de config. À voir…Ce mode de fonctionnement me parait intéressant y compris en prod, car on a de mémoire laissé tomber l'ajout de groupes/trophées via le panel admin web. Donc si il faut détruire la base de prod à chaque fois qu'on veut ajouter un truc, ça va être marrant ;)
Tout ça est juste. D'un autre côté le master script était à l'origine pensé vraiment que pour initialiser l'instance du site. L'idée initiale était de faire la maintenance via le site. Et il faut admettre qu'il y avait un flou considérable sur la période de développement, où on fait beaucoup plus de changements qu'en régime de croisière.
C'est peut-être le moment de se poser cette question. On a la migration Alembic pour le schéma de la bdd, et en effet rien du tout pour les contenus. Peut-être que le master script peut servir à ça. Mais dans ce cas je souhaiterais au moins séparer les fonctionnalités «d'initialisation» de celles «de maintenance». Sinon je valide l'idée générale.
Petite update puisque Darks me le fait remarquer sur la shout. Parmi les données manipulées par le script, certaines ne sont pas générées/réécrites :
Pour les données générées/modifiées :
Les forums sont mis à jour sans destruction, sauf si on change l'URL, qui sert d'identifiant, depuis
75f3a90f20
. Si on veut changer les URLs, le plus safe est de fairegroups update
qui créera les forums en double, déplacer les topics vers les nouveaux forums en CLI avecflask shell
, et supprimer les anciens. Je l'ai fait récemment, ça marche sans mauvaises surprises.Pour les groupes et leurs permissions, pareil depuis
c8661ca50f
. L'identifiant est le nom (en français). S'il doit changer, faut faire pareil que pour les forums.Les comptes communs sont encore supprimés à chaque fois. Mais d'un côté, on peut les modifier via l'interface du site, il n'y a pas de trop de raison de faire autre chose que les créer vides dans le master script.
Les trophées sont encore détruits avant d'être régénérés. Ça faudra le modifier.
Donc bon progrès, en gros y'a que les trophées à corriger et un nettoyage général à faire avec. Un peu tôt pour fermer mais on n'est pas loin. ^^
Voilà avec ces changements tout est enfin nettoyé.
On notera que
master.py
reste le moyen préféré d'ajouter des trophées puisque c'est le seul qui donne accès aux icônes. L'interface web existe mais fait concurrence, et les changements de l'un écrasent l'autre. Je sais qu'on a changé de position plusieurs fois sur ce sujet, en tous cas pour l'instant seul le master script donne accès à tous les paramètres.IMHO les trophées sont des éléments qui n'ont pas vocation à changer régulièrement (demandent potentiellement du code coté backend). Donc je serais plutôt d'avis de dégager l'interface web. Ce qui permet au passage de rendre le truc plus ou moins traçable via les modifications du fichier yaml de référence.
Je reconnais faire un peu marche arrière sur le sujet, mais de l'autre coté le rôle du master script a légèrement évolué entre temps, et permet de prendre en charge plus sereinement ce type d'évolutions ^^
Va pour supprimer l'interface web si ça ne te gêne pas. Je trouve aussi que c'est plus simple de passer par le script (parce qu'effectivement de toute façon il faut modifier le code pour attribuer les trophées...).
L'interface web me semble inutile, j'avais même oublié son existence tellement elle me semblait inutile. Ça peut être pratique pour corriger une typo, comme je l'ai fait dans le yaml mais il faudrait de toute façon reproduire la modification dans le fichier a un moment ou un autre.