diff options
Diffstat (limited to 'searx/__init__.py')
| -rw-r--r-- | searx/__init__.py | 77 |
1 files changed, 46 insertions, 31 deletions
diff --git a/searx/__init__.py b/searx/__init__.py index 7bda2d7f8..933c49c20 100644 --- a/searx/__init__.py +++ b/searx/__init__.py @@ -9,8 +9,7 @@ import logging import searx.unixthreadname import searx.settings_loader -from searx.settings_defaults import settings_set_defaults - +from searx.settings_defaults import SCHEMA, apply_schema # Debug LOG_FORMAT_DEBUG = '%(levelname)-7s %(name)-30.30s: %(message)s' @@ -21,14 +20,52 @@ LOG_LEVEL_PROD = logging.WARNING searx_dir = abspath(dirname(__file__)) searx_parent_dir = abspath(dirname(dirname(__file__))) -settings, settings_load_message = searx.settings_loader.load_settings() -if settings is not None: - settings = settings_set_defaults(settings) +settings = {} +searx_debug = False +logger = logging.getLogger('searx') _unset = object() +def init_settings(): + """Initialize global ``settings`` and ``searx_debug`` variables and + ``logger`` from ``SEARXNG_SETTINGS_PATH``. + """ + + global settings, searx_debug # pylint: disable=global-variable-not-assigned + + cfg, msg = searx.settings_loader.load_settings(load_user_settings=True) + cfg = cfg or {} + apply_schema(cfg, SCHEMA, []) + + settings.clear() + settings.update(cfg) + + searx_debug = settings['general']['debug'] + if searx_debug: + _logging_config_debug() + else: + logging.basicConfig(level=LOG_LEVEL_PROD, format=LOG_FORMAT_PROD) + logging.root.setLevel(level=LOG_LEVEL_PROD) + logging.getLogger('werkzeug').setLevel(level=LOG_LEVEL_PROD) + logger.info(msg) + + # log max_request_timeout + max_request_timeout = settings['outgoing']['max_request_timeout'] + if max_request_timeout is None: + logger.info('max_request_timeout=%s', repr(max_request_timeout)) + else: + logger.info('max_request_timeout=%i second(s)', max_request_timeout) + + if settings['server']['public_instance']: + logger.warning( + "Be aware you have activated features intended only for public instances. " + "This force the usage of the limiter and link_token / " + "see https://docs.searxng.org/admin/searx.limiter.html" + ) + + def get_setting(name, default=_unset): """Returns the value to which ``name`` point. If there is no such name in the settings and the ``default`` is unset, a :py:obj:`KeyError` is raised. @@ -50,20 +87,20 @@ def get_setting(name, default=_unset): return value -def is_color_terminal(): +def _is_color_terminal(): if os.getenv('TERM') in ('dumb', 'unknown'): return False return sys.stdout.isatty() -def logging_config_debug(): +def _logging_config_debug(): try: import coloredlogs # pylint: disable=import-outside-toplevel except ImportError: coloredlogs = None log_level = os.environ.get('SEARXNG_DEBUG_LOG_LEVEL', 'DEBUG') - if coloredlogs and is_color_terminal(): + if coloredlogs and _is_color_terminal(): level_styles = { 'spam': {'color': 'green', 'faint': True}, 'debug': {}, @@ -87,26 +124,4 @@ def logging_config_debug(): logging.basicConfig(level=logging.getLevelName(log_level), format=LOG_FORMAT_DEBUG) -searx_debug = settings['general']['debug'] -if searx_debug: - logging_config_debug() -else: - logging.basicConfig(level=LOG_LEVEL_PROD, format=LOG_FORMAT_PROD) - logging.root.setLevel(level=LOG_LEVEL_PROD) - logging.getLogger('werkzeug').setLevel(level=LOG_LEVEL_PROD) -logger = logging.getLogger('searx') -logger.info(settings_load_message) - -# log max_request_timeout -max_request_timeout = settings['outgoing']['max_request_timeout'] -if max_request_timeout is None: - logger.info('max_request_timeout=%s', repr(max_request_timeout)) -else: - logger.info('max_request_timeout=%i second(s)', max_request_timeout) - -if settings['server']['public_instance']: - logger.warning( - "Be aware you have activated features intended only for public instances. " - "This force the usage of the limiter and link_token / " - "see https://docs.searxng.org/admin/searx.limiter.html" - ) +init_settings() |