Ik gebruik diverse Python scripts en er is iets waar ik niet goed uit kom. De documentatie die ik tot nu toe kon vinden richt zich op CLI arguments, configuration files of lokale/globale variabelen maar ik zoek juist naar hoe ik die op een nette manier kan combineren.
Ik begrijp dat ik in een configuratiefile de settings per omgeving zou kunnen vastleggen. Maar los van de keuze voor de omgeving zijn er nog wat settings die je via de CLI kan wijzigen waardoor je niet alles als constante in een config file kunt zetten, en daarnaast zorgen sommige CLI opties ook voor een override van zo'n waarde die je normaal in de configfile zet dus constanten vallen daarmee ook af. Voorbeeld: de dev omgeving moet normaal gesproken geen data versturen maar alleen loggen, tenzij expliciet aangegeven wordt dat dat wel moet gebeuren. Zo is het lijstje nog wel wat langer dan in het voorbeeld dus laten we even niet op de specifieke voorbeeldparameters ingaan.
Maar wat nu? Om bij elke functie call in het script een lijst van 20 settings als parameter mee te geven is ook weer zowat. Ik gebruik nu globale variabelen maar dat geldt over het algemeen ook niet als heel netjes. Net als eventueel tijdens runtime configfiles steeds maar wijzingen. Maar wat dan wel netjes is weet ik eigenlijk ook niet.
Eventueel dacht ik nog aan omgevingsvariabelen via os.environ. Maar binnen python zelf moet toch ook wel iets mogelijk zijn lijkt me?
Ik begrijp dat ik in een configuratiefile de settings per omgeving zou kunnen vastleggen. Maar los van de keuze voor de omgeving zijn er nog wat settings die je via de CLI kan wijzigen waardoor je niet alles als constante in een config file kunt zetten, en daarnaast zorgen sommige CLI opties ook voor een override van zo'n waarde die je normaal in de configfile zet dus constanten vallen daarmee ook af. Voorbeeld: de dev omgeving moet normaal gesproken geen data versturen maar alleen loggen, tenzij expliciet aangegeven wordt dat dat wel moet gebeuren. Zo is het lijstje nog wel wat langer dan in het voorbeeld dus laten we even niet op de specifieke voorbeeldparameters ingaan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| if __name__ == "__main__": for i, arg in enumerate(sys.argv): if (arg.upper() == '-ENV'): envI = i if (envI > 0 and i == (envI + 1)): currEnv = arg.upper() if (arg.upper() == '-SENDDATAENABLED'): sendDataEnabled = True if (arg.upper() == '-INCLUDECATEGORIES'): doIncludeCategories = True |
Maar wat nu? Om bij elke functie call in het script een lijst van 20 settings als parameter mee te geven is ook weer zowat. Ik gebruik nu globale variabelen maar dat geldt over het algemeen ook niet als heel netjes. Net als eventueel tijdens runtime configfiles steeds maar wijzingen. Maar wat dan wel netjes is weet ik eigenlijk ook niet.
Eventueel dacht ik nog aan omgevingsvariabelen via os.environ. Maar binnen python zelf moet toch ook wel iets mogelijk zijn lijkt me?