ConfigTools - ConfigValidator
Ci-dessous le README d'une classe python que j'ai codée quand je me suis heurté aux limitations de la librairie python native configparser - excellente classe au demeurant.
configparser permet de gérer simplement un fichier de configuration, mais ne permet ni de valider cette configuration, à savoir vérifier la présence de variables, ni de typer les variables de cette configuration - toutes les variables sont des string.
Cette classe étend configparser de sorte à lui octroyer la possibilité de valider une configuration et de typer ses variables au moyen d'une définition de configuration au format dictionnaire python.
Code source disponible sur la page dédiée du projet Git AlienLab.
Validation et typage pour configparser.ConfigParser
ConfigValidator étend la classe native python configparser.ConfigParser pour lui apporter la validation d'une configuration :
- par la vérification de la présence de variables requises
- par la vérification du typage de ces variables
Propriétés ajoutées à configparser.ConfigParser
configdef: dictionnaire définissant le contenu et les variables de la configuration
Méthodes ajoutées à configparser.ConfigParser
validate(): Vérifie la validité de la configuration en fonction de configdefto_dict(): exporte la configuration sous la forme d'un dictionnaire pythonto_typed_dict(): exporte la configuration sous la forme d'un dictionnaire python avec des valeurs typéesto_object(): exporte la configuration sous la forme d'un objet dont les propriétés sont les variablesto_typed_object(): exporte la configuration sous la forme d'un objet dont les propriétés sont les variables typées
Structure de configdef
definition = {
'<nom de la section>': {
'required': True|False # section requise ou optionnelle,
'content': { # contenu de la section
'<nom de variable>': {
'required': True|False, # variable requise ou optionnelle
'type': [ <type1>, <type2> ], # types de la variable (liste ou type unique)
'allowed': [ 'val1', 'val2' ] # valeurs autorisées pour cette variable
},
'<nom de variable 2>': {
'type': int
},
'<nom de variable 3>': {
'allowed': ['yes', 'no' ]
},
}
},
'<nom de la section 2>': {
'required': False,
'content': {
'var1': { 'required': True, 'type': int, 'allowed': [ 1, 2 ] }
}
}
}
Utilisation de la classe ConfigValidator
ConfigValidator s'utilise comme configparser.ConfigParser, avec un paramètre positionnel obligatoire supplémentaire : configdef, à savoir la définition de la configuration, détaillée ci-dessus.
Exemple :
definition = {
'Section1': {
'required': True,
'content': {
'MyVar1': {
'required': True,
'type': int
}
}
}
}
conf = ConfigValidator(definition)
conf.read('config.ini')
conf.validate()
Member discussion