Module pour le chargement et la modification de fichier de configuration
Project description
Présentation
Ce module fournit un système complet de gestion de fichiers de configuration permettant :
- YAML / JSON / TOML
- Templates Jinja2 (avec variables,
env(),vault(),vault_encryption()) - Chargement lazy - Auto-save - Export
- Validation via schéma hiérarchique et règles globales
- Accès dynamique par attributs ou indexés (
cfg.db.host) - Merge / Update sans écrasement
- Auto-reload du fichier via watchdog
- Compatibilité Vault (clé protégée et décryptage)
Installation
[user@host ~]# pip install zpp_config
Utilisation
Initialisation
from zpp_config import Config
config = Config("config.yaml")
Le backend est automatiquement choisi selon l’extension du fichier, mais il est possible de définir le type de configuration avec l'attribut filetype (yaml, json ou toml).
Lors de l'initialisation, il est également possible de définir plusieurs paramètres qui seront utile pour le render Jinja.
context: défini un dictionnaire contenant les variables Jinja vault_file: emplacement du fichier vault vault_keyfile: emplacement du fichier contenant le mot de passe du vault vault_password: mot de passe du vault vault_encryption_keyfile: emplacement du fichier contenant le mot de passe du vault_encryption vault_encryption_password: mot de passe du vault_encryption
from core.config import Config
config = Config(
"config.yaml",
context={"env": "prod"},
vault_file="secrets.vlt",
vault_encryption_password="1234"
)
set_context()
Il est possible de redéfinir le context après chargement grâce à:
config.set_context({"env": "staging", "debug": True})
config.reload() # re-rend le template avec le nouveau contexte
Chargement du fichier
Il est possible de forcer le chargement du fichier avec la méthode load
config.load()
Toutefois, la configuration sera chargé automatiquement lors du premier appel de la configuration.
Auto-reload
Il est possible d'activer l'auto-reload pour permet de recharger la configuration dans le cas où le fichier de configuration change
config.autoreload(True)
Il est possible de définir un callback a déclenché lorsque la configuration est rechargé
def on_reload(cfg):
print("Configuration rechargée !")
config._on_reload = on_reload
config.autoreload(True)
On est également désactiver l'auto-reload avec:
config.stop_autoreload()
Accès aux valeurs
Par attributs
db_host = config.db.host
Par index
db_host = config["db.host"]
Par get()
db_host = config.get("db.host", default="127.0.0.1")
Itération
for key, sub in config.db.items():
print(key, sub.to_dict())
Vérifier l’existence d’un chemin
"db.host" in config # True / False
Modification des valeurs
config.db.user = "admin"
config["db.password"] = "secret"
config.set("feature.enable", True)
config.delete("db.password")
Toutes les modifications sont gardées en mémoire tant qu’on ne sauvegarde pas.
Suppression des valeurs
config.delete("db.password")
del config["db.password"]
del config.db.password
Sauvegarde
Sauvegarde manuelle
Pour sauvegarder la configuration, on utilise la méthode save
config.save()
L'argument filepath permettra de définir le fichier de sortie.
Sauvegarde automatique
Il est possible d'activer la sauvegarde automatique avec auto_save
config.auto_save(True)
Merge / Update
Fusionne un dictionnaire dans le node courant :
config.merge({"db": {"port": 3307}}, overload=True)
Met à jour une partie :
config.update("db", {"user": "root"})
overload=False→ ne remplace pas les valeurs existantesoverload=True→ écrase celles existantes
Vault et données chiffrées
Le render Jinja fournis 2 méthodes pour récupérer des données chiffrées depuis un fichier vault ou un string vault_encryption
La méthode vault permet de récupérer des clés depuis un vault
password: "{{ vault('db_password') }}"
Lors de l'initialisation de la config, il faudra forcément vault_file et vault_password ou vault_keyfile
La méthode vault_encryption permet de déchiffrer des clés vault_encryption
api_key: "{{ vault_encryption('encrypted_api_key') }}"
Lors de l'initialisation de la config, il faudra forcément vault_encryption_keyfile ou vault_encryption_password
Méthode complémentaire Jinja
Méthode env
La méthode env permet de récupérer des variables d'environnements
debug: "{{ env('DEBUG', False) }}"
url: "https://{{ env('DOMAIN') }}/api"
Enregistrement Jinja (filtres / tests / globals)
Tu peux enrichir l'environnement Jinja utilisé pour rendre le fichier de config.
register_filter(name: str, func)
Enregistre un filtre Jinja utilisable dans le template.
Exemple :
def join_commas(items):
return ",".join(items)
config.register_filter("join_commas", join_commas)
Utilisation dans config.yaml :
list_as_str: "{{ mylist | join_commas }}"
register_test(name: str, func)
Enregistre un test Jinja (ex. is_even pour if x is is_even).
Exemple :
def is_even(n):
return isinstance(n, int) and n % 2 == 0
config.register_test("is_even", is_even)
Utilisation :
{% if myvalue is is_even %}even{% endif %}
register_global(name: str, obj: Any)
Expose un objet/fonction comme global dans les templates Jinja ({{ myglobal(...) }}).
Exemple :
def now():
from datetime import datetime
return datetime.utcnow().isoformat()
config.register_global("now", now)
Utilisation :
generated_at: "{{ now() }}"
Validation de la configuration
Validation via schéma hiérarchique
Il est possible de vérifier une configuration à partir d'un schéma. Le schéma va décrire l'architecture et les prérequis des clés définis.
schema = {
"db": {
"host": {"_type": str, "_required": True},
"port": {"_type": int, "_min": 1, "_max": 65535}
}
}
errors = config.validate(schema=schema)
Validation via des règles
Il est possible de vérifier une configuration à partir d'un schéma. Le schéma va décrire l'architecture et les prérequis des clés définis.
rules = {
r"password$": {"_min_len": 8}
r"hostname": {"_enum": ['localhost', '127.0.0.1']}
}
errors = config.validate(rules=rules, strict=False)
Définition possible
| Règle | Pour | Description |
|---|---|---|
_required |
Tout | Clé obligatoire |
_type |
Tout | Type Python attendu |
_min, _max |
Numérique | Limites |
_len, _min_len, _max_len |
Chaînes | Taille |
_regex |
Chaînes | Validation Regex |
_enum |
Tout | Liste de valeurs autorisées |
_not |
Tout | Valeur interdite |
Export
config.export("output.yaml", type="yaml")
config.export("output.json", type="json")
config.export("output.toml", type="toml")
Conversion
Ces méthodes permettent d'obtenir des formats de sortie facilement utilisables.
to_dict()
Retourne le contenu du nœud courant (ou racine) sous forme de dict Python standard.
Exemple :
data = config.to_dict()
# data est un dict prêt à être sérialisé
to_json(indent: int = 4)
Retourne une chaîne JSON formatée du nœud courant :
json_str = config.to_json()
to_yaml(sort_keys: bool = True)
Retourne YAML sérialisé :
yaml_str = config.to_yaml()
to_toml()
Retourne TOML sérialisé (si toml est disponible) :
toml_str = config.to_toml()
Ces méthodes n’écrivent pas sur le disque — elles renvoient des chaînes. Pour écrire un fichier, utilise export(filepath, type=...) ou save().
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zpp_config-2.2.2.tar.gz.
File metadata
- Download URL: zpp_config-2.2.2.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: nexus/0.5.0 CPython/3.13.11 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1cd98407f497358b51d795f21ebc53eb019f604bcbb46137be2d538a12b3e93
|
|
| MD5 |
6c9a322e8095b8f75b57b93d4763290a
|
|
| BLAKE2b-256 |
2076197a5a84b2109dd85d49639ee17ab1f9b90d21b6bfaec53d42ebfedf5bd2
|
File details
Details for the file zpp_config-2.2.2-py3-none-any.whl.
File metadata
- Download URL: zpp_config-2.2.2-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: nexus/0.5.0 CPython/3.13.11 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a3d41529798333e24b294f54ecc6788e5daf6a131f6b9c74c139da2fd2c7790
|
|
| MD5 |
2eb942bc86bc90ea2c872d48cb828cf0
|
|
| BLAKE2b-256 |
4d4846ada68162144b2719ec773a92aea433f9aa8cab539971df33e48a823454
|