""" Nominatim configuration accessor. """ 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())) if project_dir is not None: 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_libpq_dsn(self): """ Get configured database DSN converted into the key/value format understood by libpq and psycopg. """ dsn = self.DATABASE_DSN if dsn.startswith('pgsql:'): # Old PHP DSN format. Convert before returning. return dsn[6:].replace(';', ' ') return dsn def get_os_env(self): """ Return a copy of the OS environment with the Nominatim configuration merged in. """ env = dict(self._config) env.update(os.environ) return env