Je crée une application de ligne de commande écrite en Python. Je voudrais utiliser les idées de profils, où chaque profil a des valeurs différentes à utiliser dans l'application.Variables dans le contexte de l'application pour l'application de ligne de commande
Je parviens à créer un fichier properties.ini
et à créer un fichier config_parser.py
qui contient une fonction qui reçoit les profils et charge les propriétés dans certaines variables. Ensuite, je l'importe dans tous les fichiers dont j'ai besoin pour les utiliser.
Je voudrais passer le profil en tant qu'argument lorsque j'exécute l'application, charger les bonnes propriétés et les mettre dans le contexte de l'application entière, en évitant import config_parser
partout.
Par exemple, dans mon properties.ini
je:
[DEFAULT]
[email protected]
[e2e_testing]
[email protected]
Dans le config_parser.py
j'ai:
import configparser
config = configparser.ConfigParser()
config.read('properties.ini')
GLOBAL_EMAIL = ''
def load_config(profile):
global GLOBAL_EMAIL
GLOBAL_EMAIL = config[profile]['GLOBAL_EMAIL']
Et pour chaque script que je besoin d'utiliser les propriétés que je fais:
from application import config_parser as CFG
def method(profile):
CFG.load_config(profile)
print CFG.GLOBAL_EMAIL
Idéalement, j'aimerais que cette configuration soit chargée pendant l'exécution de main.py
(qui est le point d'entrée de mon application), puis partagé à travers les modules à l'intérieur de ce paquet, donc je n'ai pas besoin d'importer le config_parser
partout ni de passer la variable profile
.
Je l'ai lu et __builtin__
pensé à faire le config_parser
ajouter les variables dans le __builtin__
(ils seront disponibles pour tous les modules de ce package), mais je ne suis pas sûr de savoir comment tester l'unité avec le Pytest depuis __builtin__
sera être disponible uniquement pour les modules dans le dossier source et je vais devoir me moquer d'une manière ou d'une autre.
Merci d'avance!
Pourquoi ne pas analyser la configuration une fois dans main.py et transmettre le résultat à tous vos modules? – ThisSuitIsBlackNot