Python: Dynaconf soll die Konfiguration für neue Projekte vereinfachen

© Shutterstock / MR Gao
Für neue Python-Projekte kann ein größerer Konfigurationsaufwand anfallen. Neben Einstellungen für verschiedene Umgebungen und dem Ablageort für wichtige Werte müssen noch weitere Parameter berücksichtigt werden. Das quelloffene Tool Dynaconf soll diese Arbeit erleichtern.
Anstatt Einstellungen an unterschiedlichen Orten in einem Projekt zu hinterlegen, oder sie nur umständlich abrufbar zu machen, können sie mit Dynaconf in einer zentralen Konfigurationsdatei bereitgestellt werden. Standardmäßig werden hierfür die Formate .py, .toml, .ini und .json unterstützt. Wenn PyYAML installiert ist, werden auch .yaml-Files gelesen.
Um die Konfigurationsdatei nach der Entwicklung auch in der Produktion weiterverwenden zu können, erlaubt Dynaconf innerhalb eines Files die Spezifikation von Settings für verschiedene Umgebungen. Ist ein Block mit [development]
, [testing]
oder [production]
gekennzeichnet, ist klar, für welche Umgebung die darunter notierten Einstellungen gedacht sind. Daneben können unter [default]
auch umgebungsübergreifende Vorgaben gemacht werden. Listing 1 zeigt, wie Settings.toml aussehen könnte (Quelle: GitHub).
# When ENV_FOR_DYNACONF=TESTING [testing] environment = "this is testing from toml" host = "test_server.com from toml" works = 'only_in_test' # When ENV_FOR_DYNACONF=DEVELOPMENT [development] environment = "this is development from toml" host = "dev_server.com from toml" works = 'only_in_dev'
Dynaconf und sensible Daten
Das Team hinter dem Projekt rät davon ab, Passwörter, Zugangsschlüssel und andere sensible Informationen in der Konfiguration zu speichern. Für das Handling solcher Daten kann das Tool mit entsprechenden Secrets-Dateien umgehen. Analog zu settings.toml wäre dies dann .secrets.toml. Wenn sich dieses File im Gitignore-Verzeichnis befindet, wird es auch nicht versehentlich in ein (öffentliches) Repository hochgeladen. Außerdem werden Informationen aus einem Secrets-File im Rahmen eventueller Debugging-Ausgaben nur verschleiert dargestellt.
Support für Django und Flask
Support für die beiden beliebten Python-Frameworks Django und Flask ist durch entsprechende Extensions gegeben. Die Extensions lassen sich mit kurzen Code-Stücken einbinden. Innerhalb der Konfigurationsdatei muss die entsprechende Notation vorgenommen werden, damit das Framework genutzt werden kann. Die Listings 2 und 3 dienen als Beispiel für die Verwendung von Flask mit YAML. In Listing 2 wird eine settings.yml gezeigt, Listng 3 stellt die zugehörige app.py dar (Quelle: GitHub).
default: DEBUG: true SERVER: flaskdynaconf.com PORT: 6666 MESSAGE: Dynaconf works like a charm with Flask and YAML TEST_RULE: /flask_with_yaml development: DEBUG: true SERVER: dev.flaskdynaconf.com production: DEBUG: false SERVER: prod.flaskdynaconf.com
from flask import Flask from flask import render_template from dynaconf import FlaskDynaconf # create your app app = Flask(__name__) FlaskDynaconf(app) @app.route("/") def index(): return render_template("dynaconf.html") app.add_url_rule(app.config.TEST_RULE, view_func=lambda: "test") if __name__ == "__main__": app.run()
Dynaconf liegt aktuell in Version 2.0.0 vor und steht unter MIT-Lizenz. Die Leitung der Entwicklung liegt bei Bruno Rocha (Quality Engineer, Red Hat). Weitere Informationen über das Projekt stehen im zugehörigen Repository auf GitHub sowie in einer von Rocha verfassten Projektvorstellung auf dev.to zum Abruf bereit.
Hinterlasse einen Kommentar