Projet

Général

Profil

Development #28930

Avoir un setting loader qui se base sur des variables hobo

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
12 décembre 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

L'idée est de pouvoir poser une variable "SETTING_WHATEVER" à la valeur "x" et que cela ajoute WHATEVER = json.loads("x") dans les settings de l'application concernée.

Au niveau des contextes de template toutes les variables commençant par "SETTING_" devraient être ignorés (ne pas ouvrir une visibilité sur les settings qui normalement n'est pas possible).


Fichiers


Demandes liées

Lié à Authentic 2 - Development #6648: Allow managing LDAP servers from the managerNouveau09 mars 2015

Actions

Révisions associées

Révision 8b45ce49 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 5 ans

hobo: add setting loader for variables (#28930)

Variables must be prefixed with SETTING_, suffix .extend and .update are
supported.

Ex.: SETTING_LDAP_AUTH_SETTINGS.extend = [{...}]

Historique

#1

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

SETTING_WHATEVER = json.loads("x") dans l'application

Sauf que souvent dans l'application ça ne commencera pas par SETTING, tu voulais ici écrire juste WHATEVER ? (genre on écrirait SETTING_NEWSLETTERS_CELL_ENABLED et ça mettrait NEWSLETTERS_CELL_ENABLED) ?

~~~

Ou plutôt WHATEVER ici c'est imaginé un nom d'application, SETTING_COMBO = {...} et ça taperait en vrac dans combo.

Mais l'unité, ce n'est pas l'application, c'est le service. (on a deux combo, genre).

Et les variables peuvent déjà être attachées à un service particulier si on les veut uniquement dans celui-là.

#2

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

  • Description mis à jour (diff)

Je modifie la description, je pensais justement à ça et j'ai écrit autre chose.

#3

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

Frédéric Péters a écrit :

Et les variables peuvent déjà être attachées à un service particulier si on les veut uniquement dans celui-là.

Oui je pensais plutôt à ça, l'histoire d'une variable qui s'appliquerait à tous les services d'un même type a sa place dans les thèmes mais pas ici je pense.

#4

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

Maintenant on peut imaginer des variables globales de setting aussi, par exemple pour la durée des cookies de session.

#5

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

  • Assigné à mis à Benjamin Dauvergne
#6

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

Une première version du truc dont je ne suis pas entièrement satisfait:
  • ça laisse accès à beaucoup trop de settings (on peut facilement péter la configuration d'un peu n'importe quoi), mais difficile de créer une whitelist (ou pas, chaque projet pourrait déclarer les clés qu'il souhaite exposer, via un setting)
  • ça ne supporte pas des type de données importants: chaînes, nombres et booléens. Un SESSION_COOKIE_AGE=600 ne peut pas être défini par ce moyen ou un DEBUG=True.
#7

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

Je précise pour les types de données, ça vient de hobo.environment.models.Variable qui ne parse le JSON qu'on entre que si la chaîne démarre par [ ou {.

#8

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

Mon utilisation première ce serait LDAP_AUTH_SETTINGS, mais en plus général tout ce qu'on met dans settings.json en fait (et c'est pour ça que la limitation de type me gêne un peu, DEBUG=True dans settings.json ça peut être bien pratique en prod, même si un DEBUG=<mon-IP> serait encore mieux, mais c'est pour un autre jour).

#9

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

Ça a son utilité aussi pour prototyper des cellules JSON ou jouer avec le nouveau moteur de recherche du portail agent (et j'en oublie certainement).

#10

Mis à jour par Thomas Noël il y a plus de 5 ans

Mettre le

tenant_settings.TEMPLATE_VARS[key] = value

dans un else pour éviter que les variables de type SETTING_FOO ne se retrouvent accessibles dans les templates (facilement lisibles via une cellule json, visibles dans des traces, ce genre de truc ; mais aussi parce qu'il n'ont rien à y faire de toute façon)

Ensuite ce qui me chiffonne un peu, c'est que les settings vont se retrouver partout, sur tous les logiciels, et par exemple la config ldap avec ses éventuels petits secrets, j'ai pas forcément envie de la voir répandue sur chrono ou combo... Voir dans quelle mesure on pourrait avoir « setting_prefix = 'COMBO_SETTING_' » et équivalent...? (genre via un settings.PROJECT_NAME.replace('-', '_').upper())

#11

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

Thomas Noël a écrit :

Ensuite ce qui me chiffonne un peu, c'est que les settings vont se retrouver partout, sur tous les logiciels, et par exemple la config ldap avec ses éventuels petits secrets, j'ai pas forcément envie de la voir répandue sur chrono ou combo... Voir dans quelle mesure on pourrait avoir « setting_prefix = 'COMBO_SETTING_' » et équivalent...? (genre via un settings.PROJECT_NAME.replace('-', '_').upper())

Ils seront dans le hobo.json (donc sur la VM qui fait tourner combo/chrono/etc..) mais pas charger dans l'application elle même puisque pour LDAP_AUTH_SETTINGS on utilisera vraisemblablement une variable de service, la solution à ça nécessiterait de revoir le système de déploiement pour envoyer un hobo.json différent (sans les variables qui ne concerne pas ce type de brique, voir même un hobo.json par instance) à chaque brique.

#13

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

J'ai ajouté un flag sur Variable pour permettre de passer n'importe quel type de JSON (ça pourait être plus joli comme les champs expressions dans w.c.s., je vous l'accorde). Le JS c'est gratuit, on peut ignorer.

#14

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

#15

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

Ça commence à compliquer outre mesure pour quelque chose qui ne devait être qu'un pis-aller :/

#16

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

Frédéric Péters a écrit :

Ça commence à compliquer outre mesure pour quelque chose qui ne devait être qu'un pis-aller :/

Autant quand on me dit faut pas complexifier la fabrique de formulaire, ça s'entend, autant là pour un écran où personne ne va jamais j'ai plus de mal. Si on peut faire disparaître les settings.json je pense qu'on y gagne grandement.

#17

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

Il y aurait un tour des settings.json à faire, sans doute, perso j'y imagine de la configuration LDAP (#6648) et FranceConnect (pas trouvé de ticket); côté combo depuis peu les trucs de recherche (#26260, #26261), il y a eu davantage mais ça arrive désormais à être lié à l'intégration graphique; côté welco il y a la gestion des permissions d'accès mais on arrête de toute fçaon welco.

Remplacer les settings.json où nous sommes les seuls à aller par ces variables dans Hobo avec comme argument qu'on sera les seuls à y aller, je n'accroche pas.

Et même dans Hobo la direction est à faire des écrans dédiés, spécifiques (comme la configuration des emails), plutôt que l'interface générique des variables.

Que ça puisse en certaines situations dépanner, j'entends, mais il y a quand même un coût à maintenir un espace supplémentaire de configuration.

Bref, sur ce patch, avoir l'assurance que ça va rester du dépannage, du temporaire, qu'on n'oubliera pas ça, est pour moi nécessaire.

#18

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

Frédéric Péters a écrit :

Il y aurait un tour des settings.json à faire, sans doute, perso j'y imagine de la configuration LDAP (#6648) et FranceConnect (pas trouvé de ticket); côté combo depuis peu les trucs de recherche (#26260, #26261), il y a eu davantage mais ça arrive désormais à être lié à l'intégration graphique; côté welco il y a la gestion des permissions d'accès mais on arrête de toute fçaon welco.

Remplacer les settings.json où nous sommes les seuls à aller par ces variables dans Hobo avec comme argument qu'on sera les seuls à y aller, je n'accroche pas.

Non certaines personnes ne peuvent pas y aller, les CPFs, Mike est obligé de bidouiller des cellules JSON et se fait rétorquer qu'il ne faut pas faire comme cela; et je ne vois pas trop comment gérer un client qui voudrait pondre une cellule JSON tout en étant en SaaS.

Je suis tout à fait ouvert à prévoir une whitelist dans cette optique.

#19

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

Non certaines personnes ne peuvent pas y aller, les CPFs, Mike est obligé de bidouiller des cellules JSON et se fait rétorquer qu'il ne faut pas faire comme cela; et je ne vois pas trop comment gérer un client qui voudrait pondre une cellule JSON tout en étant en SaaS.

Je ne vois pas en quoi ça aide la situation du développement de cellules JSON vu que le fichier de gabarit doit être sur le filesystem.

S'il y a à faire évoluer la manière dont on développe les cellules JSON, c'est intéressant, ayons cette discussion sur la liste, pas dans un ticket "permettre de taper des settings divers via hobo".

#20

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

Frédéric Péters a écrit :

Non certaines personnes ne peuvent pas y aller, les CPFs, Mike est obligé de bidouiller des cellules JSON et se fait rétorquer qu'il ne faut pas faire comme cela; et je ne vois pas trop comment gérer un client qui voudrait pondre une cellule JSON tout en étant en SaaS.

Je ne vois pas en quoi ça aide la situation du développement de cellules JSON vu que le fichier de gabarit doit être sur le filesystem.

Objection retenue.

S'il y a à faire évoluer la manière dont on développe les cellules JSON, c'est intéressant, ayons cette discussion sur la liste, pas dans un ticket "permettre de taper des settings divers via hobo".

Il reste encore d'autres settings...

#21

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

Comme je gâche mes chances de faire passer la fonctionnalité de base, je resoumets juste le premier patch qui pourra être utile même si uniquement via des écrans dédiés dans hobo, par exemple pour #29149.

#22

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

Pour moi ça irait mais 1/ soit déplacer ça hors de TemplateVars, 2/ soit préparer derrière un ticket qui réunirait en un unique HoboJsonSettings(?) une série de settings loaders (je dirais KnownServices, TemplateVars, CORSSettings, SharedThemeSettings).

#24

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

Le taper avant SettingsJSON, que ce dernier reste prioritaire ?

#25

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

Frédéric Péters a écrit :

Le taper avant SettingsJSON, que ce dernier reste prioritaire ?

J'ai un doute sur le plus pertinent: vaut-il mieux qu'un truc visible dans le BO s'applique avant ou après un truc planqué dans un fichier sur le disque ? À mon avis le BO devrait avoir la priorité sur le settings.json, dans l'ordre /etc, tenant-dir, puis BO. Non ?

#26

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

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

Oui, sans doute que je m'imaginais encore à merger les différents SettingsLoader; mais c'est un argument contre, ou en tout cas pour laisser celui-ci à part. Je vais tourner avec ça en local puis ce sera bon pour le prochain cycle.

#27

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

  • Statut changé de Solution validée à Résolu (à déployer)
#28

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

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

Formats disponibles : Atom PDF