Skip to content

Ajout d'un moyen de récupérer la valeur d'un paramètre du configurator (issue #7)

Nathan Menny requested to merge issue-7 into main

Ajout d'un moyen de récupérer la valeur d'un paramètre du configurator directement depuis ce dernier.

On a maintenant une classe "Configurator" qui permet de gérer les paramètres du modèle que l'on souhaite manipuler via l'interface HTML. On peut lui ajouter une description, un certain nombre de contraintes (min, max, appartenance) ainsi qu'un certain nombre de fonctions qui s'enclenchent quand le client envoie une nouvelle configuration.

Lorsque le client se connecte, le serveur envoie en plus ces infos de configuration afin que le client puisse afficher toutes les infos qui vont bien pour pouvoir modifier ces valeurs (tout est dans le menu déroulant "configuration").

Un nouveau message pour les sockets à été mis en place, il s'agit du message "conf" qui est géré par le WebServer, le FontHandler et les ImageProcessor en suivant la même logique que pour les messages précédents.


Voici un exemple de comment mettre en place une nouvelle configuration :

1- Dans la classe de l'ImageProcessor souhaitée, ajoutée un attribut de type Configurator (appelons-là config)

2- Ajouter les paramètres que l'on souhaite pouvoir contrôler dans config (par exemple, "monParametre" qui vaut 15 par défaut et qui est entre 10 et 50)

config.add_param("monParametre", 15)
config.add_description("monParametre", "Petite description qui explique à quoi elle correspond")
config.add_min_max("monParametre", min_value=10, max_value=50)

3- [Optionnel] Il est possible d'associer ces paramètres à l'objet courant afin de pouvoir les appeler comme s'il s'agissait d'attributs de l'objet

for key in self._config.param_dict:
            setattr(self, key, self._config.param_dict[key])

Maintenant on peut faire : self.monParametre Si la valeur change dans le configurator elle ne changera pas automatiquement dans l'objet

4- [Optionnel] En faisant l'opération précédente, il est alors nécéssaire d'ajouter un handler qui va se lancer lorsque le client va changer la configuration ( Concurrence possible); mais il peut aussi être intéréssant d'ajouter un handler pour autre chose

config.add_change_handler("monParametre", self.monParameterHandler)

La fonction Handler passée prend un paramètre qui correspond à la nouvelle valeur prise par le paramètre lors de sa mise à jour

5- Là où ce paramètre est utilisé dans l'ImageProcessor, on peut récupérer sa valeur avec :

config.get_value("monParametre")

ou alors, si l'étape 3 est faite

self.monParametre

6- Définir les méthodes config() et process_config() dans l'ImageProcessor pour que tout marche bien.

Voilà, logiquement ça devrait fonctionner. Tu peux tout trouver dans la branche "issue-7".

La méthode Configurator.check_contraintes() est équivalente à Configurator.check_in_interval() pour le moment mais j'ai des idées d'améliorations pour enrichir check_contraintes(); c'est pour ça que je l'ai laissée.

Edited by Nathan Menny

Merge request reports

Loading