+"""
+Nominatim configuration accessor.
+"""
+import sys
+import os
+
+from dotenv import dotenv_values
+
+class Configuration:
+ """ Load and manage the project configuration.
+
+ Nominatim uses dotenv to configure the software. Configuration options
+ are resolved in the following order:
+
+ * from the OS environment
+ * from the .env file in the project directory of the installation
+ * from the default installation in the configuration directory
+
+ All Nominatim configuration options are prefixed with 'NOMINATIM_' to
+ avoid conflicts with other environment variables.
+ """
+
+ def __init__(self, project_dir, config_dir):
+ self._config = dotenv_values(str((config_dir / 'env.defaults').resolve()))
+ self._config.update(dotenv_values(str((project_dir / '.env').resolve())))
+
+ def __getattr__(self, name):
+ name = 'NOMINATIM_' + name
+
+ return os.environ.get(name) or self._config[name]
+
+ def get_os_env(self):
+ """ Return a copy of the OS environment with the Nominatim configuration
+ merged in.
+ """
+ env = dict(os.environ)
+ env.update(self._config)
+
+ return env