• Les cookies assurent le bon fonctionnement de nos services. En poursuivant votre navigation, vous acceptez l'utilisation de cookies.

Nouveautés tiramisu version 0.55
Cadoles , Technique , Tiramisu

La version 0.55 de tiramisu apporte son lot de nouveautés.

Voici une liste des nouveautés les plus marquantes.

Meilleure séparation des objets

Le travail de fond de séparation des objets Option/Config/Settings/Values/Multi arrive à son terme.

Le principe est :

  • Settings : s'occupe de toutes les propriétés, les permissions temporaires et de la vérification des accès aux valeurs ;
  • Values : stocke les valeurs des options, gestion des utilisateurs et calculs ;
  • Multi : gestion des variables "multi" (notamment les valeurs maîtres/esclaves) et la longueur de la liste ;
  • Option : les variables, les valeurs par défaut, propriétés par défaut, ... ;
  • Config : point d'entrée.

Simplification de l'API pour les utilisations courantes

Un certain nombre de modifications ont été apportées pour faciliter l'usage courant de tiramisu.

Pour connaître le propriétaire d'une option, il fallait faire :

opt = cfg.unwrap_from_path("ip_admin_eth0.ip_admin_eth0")
print cfg.cfgimpl_get_values().getowner(opt)

(opt étant l'objet option qui a pour nom ip_admin_eth0)

Maintenant on peut avoir le propriétaire directement :

print cfg.getowner("ip_admin_eth0.ip_admin_eth0")
C'est la même chose pour passer en mode "lecture seule" ou "lecture écriture" :
cfg.read_only()
cfg.read_write()
au lieu de :
cfg.cfgimpl_get_settings().read_only()
cfg.cfgimpl_get_settings().read_write()
De manière plus générale il est plus facile de gérer les propriétés.

Ainsi, les tests sur les propriétés :

c.cfgimpl_get_settings().has_property('hidden')
c.cfgimpl_get_settings().has_property('hidden', option1)
deviennent
'hidden' in c.cfgimpl_get_settings()
'frozen' in c.cfgimpl_get_settings()[opt]
(opt et option1 sont les objets option)

Les accès aux propriétés :

c.cfgimpl_get_settings().get_properties()
c.cfgimpl_get_settings().get_properties(option1)
deviennent
c.cfgimpl_get_settings()
c.cfgimpl_get_settings()[option1]
(option1 est l'objet option)

L'ajout, la suppression des propriétés :

c.cfgimpl_get_settings().add_property('hidden', option1)
c.cfgimpl_get_settings().del_property('hidden', option1)
deviennent
c.cfgimpl_get_settings()[option1].append('hidden')
c.cfgimpl_get_settings()[option1].remove('hidden')
L'activation, la désactivation des propriétés :
c.cfgimpl_get_settings().enable_property('hidden')
c.cfgimpl_get_settings().disable_property('hidden')
deviennent
c.cfgimpl_get_settings().append('hidden')
c.cfgimpl_get_settings().remove('hidden')
Il est possible de revenir plus facilement à une valeur par défaut :
config.unwrap_from_path("string").reset(config)
devient :
del(config.string)

Gestion des erreurs

Un gros refactoring a été entrepris pour valider la gestion des erreurs.

Les erreurs utilisées par tiramisu sont maintenant au nombre de 8 (3 standard et 5 personnalisées) :

  • ValueError : erreur de validation, validation des paramètres, une liste à la place d'une multi et si la valeur n'est pas logique ;
  • TypeError : erreur de type dans un paramètre ;
  • AttributeError : chemin incorrect ou option/optiondescription inconnue dans une optiondescription ;
  • PropertiesOptionError (dépend de AttributeError) : tente d'accéder à une variable interdite par une propriété ;
  • ConfigError : erreur dans le calcul d'une variable ou tente de changer le propriétaire d'une variable sans valeur ;
  • ConflictError : option dupliquée ou avec le même nom ;
  • RequirementRecursionError : erreur de récursion (par exemple si les propriétés d'une optiondescription dépendent d'une option fille).

Validation et cohérence

Dans les versions précédentes de tiramisu, il existait déjà deux sortes de validation.

Les validations de type. Un IntOption n'attend qu'un entier, pas une chaîne de caractère.

Il était possible d'ajouter une fonction personnalisée permettant de faire une validation plus approfondie de la variable.

Un nouveau type de validation a été ajouté : la validation de la "cohérence" entre différentes variables. Par exemple une IP et un netmask peuvent être liés. Une IP avec un netmask incohérent renverra une erreur.

Pour les validations personnalisées, le code est maintenant commun avec les valeurs par défaut calculées. Cela ouvre de nouvelles possibilités.

Les valeurs par défaut calculées

Les valeurs par défaut calculées ne fonctionnaient qu'avec une fonction présente dans le fichier creole/eosfunc.py. Maintenant il faut passer une fonction directement à l'initialisation de l'option. La fonction peut se trouver n'importe où.

Nouvelles options

Cinq nouvelles options ont été ajoutées :
  • UnicodeOption ;
  • IPOption avec une option supplémentaire à l'initialisation de l'option : only_private pour valider les IPs et obliger des IP privées.;
  • NetworkOption ;
  • NetmaskOption avec une option supplémentaire à l'initialisation de l'option : opt_ip qui peut être une IPOption ou NetworkOption permettant de valider le netmask sur l'IP ou le réseau ;
  • DomainnameOption avec deux options supplémentaires à l'initialisation de l'option : allow_ip permet de mettre alternativement un nom de domaine ou une IP, type_ qui peut être "netbios", "hostname" ou "domainname" (valeur par défaut).

Cache

Deux caches ont été ajoutés, un cache pour les propriétés (dans les Settings) et pour les valeurs (dans les Values). Le cache est d'une durée de 5 secondes et se vide automatique si nécessaire ou manuellement via :
config.cfgimpl_clean_cache()

Traduction

L'ensemble des chaînes d'erreur sont traduisibles via gettext. Cette traduction n'est pas encore réalisée, mais le sera rapidement.

Nouvelle propriété : force_store_value

Une nouvelle propriété a été ajoutée : "force_store_value". Une variable calculée avec cet attribut sera considérée comme modifiée dès le premier calcul.

Commentaires

Aucun commentaire pour l'instant, soyez le premier !

Cadoles recrute !

Nous recherchons de nouveaux coopérateurs :