Source code for invenio_config.utils
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2015-2018 CERN.
#
# Invenio is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.
"""Default configuration loader usable by e.g. Invenio-Base."""
from __future__ import absolute_import, print_function
from .default import InvenioConfigDefault
from .entrypoint import InvenioConfigEntryPointModule
from .env import InvenioConfigEnvironment
from .folder import InvenioConfigInstanceFolder
from .module import InvenioConfigModule
[docs]def create_config_loader(config=None, env_prefix='APP'):
"""Create a default configuration loader.
A configuration loader takes a Flask application and keyword arguments and
updates the Flask application's configuration as it sees fit.
This default configuration loader will load configuration in the following
order:
1. Load configuration from ``invenio_config.module`` entry points
group, following the alphabetical ascending order in case of
multiple entry points defined.
For example, the config of an app with entry point name ``10_app``
will be loaded after the config of an app with entry point name
``00_app``.
2. Load configuration from ``config`` module if provided as argument.
3. Load configuration from the instance folder:
``<app.instance_path>/<app.name>.cfg``.
4. Load configuration keyword arguments provided.
5. Load configuration from environment variables with the prefix
``env_prefix``.
If no secret key has been set a warning will be issued.
:param config: Either an import string to a module with configuration or
alternatively the module itself.
:param env_prefix: Environment variable prefix to import configuration
from.
:return: A callable with the method signature
``config_loader(app, **kwargs)``.
.. versionadded:: 1.0.0
"""
def _config_loader(app, **kwargs_config):
InvenioConfigEntryPointModule(app=app)
if config:
InvenioConfigModule(app=app, module=config)
InvenioConfigInstanceFolder(app=app)
app.config.update(**kwargs_config)
InvenioConfigEnvironment(app=app, prefix='{0}_'.format(env_prefix))
InvenioConfigDefault(app=app)
return _config_loader
[docs]def create_conf_loader(*args, **kwargs): # pragma: no cover
"""Create a default configuration loader.
.. deprecated:: 1.0.0b1
Use :func:`create_config_loader` instead. This function will be removed
in version 1.0.1.
"""
import warnings
warnings.warn(
'"create_conf_loader" has been renamed to "create_config_loader".',
DeprecationWarning
)
return create_config_loader(*args, **kwargs)