X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/4cb6dc01f382e9fb748efbe4517442af2274f210..3f73a363f42cb3cb6627ddcea371e3a22810daa6:/nominatim/config.py diff --git a/nominatim/config.py b/nominatim/config.py index 271d2d4d..72aaf0bd 100644 --- a/nominatim/config.py +++ b/nominatim/config.py @@ -7,6 +7,8 @@ from pathlib import Path from dotenv import dotenv_values +from nominatim.errors import UsageError + LOG = logging.getLogger() class Configuration: @@ -15,7 +17,7 @@ class Configuration: Nominatim uses dotenv to configure the software. Configuration options are resolved in the following order: - * from the OS environment + * from the OS environment (or the dirctionary given in `environ` * from the .env file in the project directory of the installation * from the default installation in the configuration directory @@ -23,11 +25,12 @@ class Configuration: avoid conflicts with other environment variables. """ - def __init__(self, project_dir, config_dir): + def __init__(self, project_dir, config_dir, environ=None): + self.environ = environ or os.environ self.project_dir = project_dir self.config_dir = config_dir self._config = dotenv_values(str((config_dir / 'env.defaults').resolve())) - if project_dir is not None: + if project_dir is not None and (project_dir / '.env').is_file(): self._config.update(dotenv_values(str((project_dir / '.env').resolve()))) # Add defaults for variables that are left empty to set the default. @@ -36,11 +39,21 @@ class Configuration: self._config['NOMINATIM_ADDRESS_LEVEL_CONFIG'] = \ str(config_dir / 'address-levels.json') + class _LibDirs: + pass + + self.lib_dir = _LibDirs() + + def set_libdirs(self, **kwargs): + """ Set paths to library functions and data. + """ + for key, value in kwargs.items(): + setattr(self.lib_dir, key, Path(value).resolve()) def __getattr__(self, name): name = 'NOMINATIM_' + name - return os.environ.get(name) or self._config[name] + return self.environ.get(name) or self._config[name] def get_bool(self, name): """ Return the given configuration parameter as a boolean. @@ -57,7 +70,7 @@ class Configuration: return int(self.__getattr__(name)) except ValueError: LOG.fatal("Invalid setting NOMINATIM_%s. Needs to be a number.", name) - raise + raise UsageError("Configuration error.") def get_libpq_dsn(self): @@ -98,6 +111,6 @@ class Configuration: merged in. """ env = dict(self._config) - env.update(os.environ) + env.update(self.environ) return env