diff --git a/README.md b/README.md index 929cd18..fb29c2c 100644 --- a/README.md +++ b/README.md @@ -143,3 +143,12 @@ remove every line starting with "pyaudio" in requirements.txt $ sed -i '/# Packaged commands/,$d' anki/sound.py $ sed -i '/^pyaudio/d' requirements.txt + +ENVVAR configuration overrides +============================== + +Configuration values can be set via environment variables using `ANKISYNCD_` prepended +to the uppercase form of the configuration value. E.g. the environment variable, +`ANKISYNCD_AUTH_DB_PATH` will set the configuration value `auth_db_path` + +Environment variables override the values set in the `ankisyncd.conf`. diff --git a/ankisyncd/config.py b/ankisyncd/config.py index 5b490f7..4bbae2c 100644 --- a/ankisyncd/config.py +++ b/ankisyncd/config.py @@ -11,6 +11,16 @@ paths = [ os.path.join(dirname(dirname(realpath(__file__))), "ankisyncd.conf"), ] +# Get values from ENV and update the config. To use this prepend `ANKISYNCD_` +# to the uppercase form of the key. E.g, `ANKISYNCD_SESSION_MANAGER` to set +# `session_manager` +def load_from_env(conf): + logging.debug("Loading/overriding config values from ENV") + for env in os.environ: + if env.startswith('ANKISYNCD_'): + config_key = env[10:].lower() + conf[config_key] = os.getenv(env) + logging.info("Setting {} from ENV".format(config_key)) def load(path=None): choices = paths @@ -23,6 +33,7 @@ def load(path=None): parser.read(path) conf = parser['sync_app'] logging.info("Loaded config from {}".format(path)) + load_from_env(conf) return conf except KeyError: pass