Code source de lgrez.blocs.env
"""lg-rez / blocs / Lecture des variables d'environnement
"""
import sys
import os
from dotenv import load_dotenv
# À l'import
if len(sys.argv) > 1:
path = sys.argv[1]
else:
path = ".env"
load_dotenv(path)
[docs]def load(VAR_NAME):
"""Lit une valeur depuis les variables d'environnement.
Les variables sont recherchées dans les variables d'environnement ;
à l'import de ce module, celles-ci sont chargées par
``dotenv.load_dotenv`` à partir du fichier passé en premier
argument en ligne de commande (``.env`` par défaut).
Équivaut globalement à :func:`os.getenv` suivi d'une vérification
que la variable existe.
Args:
VAR_NAME (str): nom de la variable à charger (``LGREZ_...``)
Returns:
:class:`str`
Raises:
RuntimeError: la variable d'environnement n'est pas définie
"""
var = os.getenv(VAR_NAME)
if var is None:
raise RuntimeError(f"Variable d'environnement {VAR_NAME} manquante")
return var
[docs]def __getattr__(attr):
"""Raccourci pour accéder aux variables d'environnement.
Permet d'utiliser ``blocs.env.VAR_NAME`` comme raccourci pour
:func:`blocs.env.load(VAR_NAME) <.load>`, à la différence près
que c'est une exception :exc:`AttributeError` qui sera levée si
la variable n'est pas définie.
"""
try:
return load(attr)
except RuntimeError:
raise AttributeError(
f"module '{__name__}' has no attribute '{attr}'"
) from None