Browse Source

Remove usage of SEARX environment variables

Alexandre FLAMENT 2 years ago
parent
commit
4adc9920e9
3 changed files with 21 additions and 36 deletions
  1. 0 16
      searx/settings_defaults.py
  2. 18 17
      searx/settings_loader.py
  3. 3 3
      tests/unit/test_settings_loader.py

+ 0 - 16
searx/settings_defaults.py

@@ -41,16 +41,6 @@ STR_TO_BOOL = {
 }
 }
 _UNDEFINED = object()
 _UNDEFINED = object()
 
 
-# compatibility
-SEARX_ENVIRON_VARIABLES = {
-    'SEARX_DISABLE_ETC_SETTINGS': 'SEARXNG_DISABLE_ETC_SETTINGS',
-    'SEARX_SETTINGS_PATH': 'SEARXNG_SETTINGS_PATH',
-    'SEARX_DEBUG': 'SEARXNG_DEBUG',
-    'SEARX_PORT': 'SEARXNG_PORT',
-    'SEARX_BIND_ADDRESS': 'SEARXNG_BIND_ADDRESS',
-    'SEARX_SECRET': 'SEARXNG_SECRET',
-}
-
 
 
 class SettingsValue:
 class SettingsValue:
     """Check and update a setting value"""
     """Check and update a setting value"""
@@ -227,11 +217,5 @@ SCHEMA = {
 
 
 
 
 def settings_set_defaults(settings):
 def settings_set_defaults(settings):
-    # compatibility with searx variables
-    for searx, searxng in SEARX_ENVIRON_VARIABLES.items():
-        if searx in os.environ and searxng not in os.environ:
-            os.environ[searxng] = os.environ[searx]
-            logger.warning('%s uses value from %s', searxng, searx)
-
     apply_schema(settings, SCHEMA, [])
     apply_schema(settings, SCHEMA, [])
     return settings
     return settings

+ 18 - 17
searx/settings_loader.py

@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: AGPL-3.0-or-later
 # SPDX-License-Identifier: AGPL-3.0-or-later
 
 
+from typing import Optional
 from os import environ
 from os import environ
 from os.path import dirname, join, abspath, isfile
 from os.path import dirname, join, abspath, isfile
 from collections.abc import Mapping
 from collections.abc import Mapping
@@ -13,7 +14,7 @@ from searx.exceptions import SearxSettingsException
 searx_dir = abspath(dirname(__file__))
 searx_dir = abspath(dirname(__file__))
 
 
 
 
-def check_settings_yml(file_name):
+def existing_filename_or_none(file_name: str) -> Optional[str]:
     if isfile(file_name):
     if isfile(file_name):
         return file_name
         return file_name
     return None
     return None
@@ -30,29 +31,29 @@ def load_yaml(file_name):
 
 
 
 
 def get_default_settings_path():
 def get_default_settings_path():
-    return check_settings_yml(join(searx_dir, 'settings.yml'))
+    return existing_filename_or_none(join(searx_dir, 'settings.yml'))
 
 
 
 
-def get_user_settings_path():
-    # find location of settings.yml
+def get_user_settings_path() -> Optional[str]:
+    """Get an user settings file.
+    By descending priority:
+    1. ``environ['SEARXNG_SETTINGS_PATH']``
+    2. ``/etc/searxng/settings.yml`` except if ``SEARXNG_DISABLE_ETC_SETTINGS`` is ``true`` or ``1``
+    3. ``None``
+    """
+
+    # check the environment variable SEARXNG_SETTINGS_PATH
+    # if the environment variable is defined, this is the last check
     if 'SEARXNG_SETTINGS_PATH' in environ:
     if 'SEARXNG_SETTINGS_PATH' in environ:
-        # if possible set path to settings using the
-        # enviroment variable SEARXNG_SETTINGS_PATH
-        return check_settings_yml(environ['SEARXNG_SETTINGS_PATH'])
+        return existing_filename_or_none(environ['SEARXNG_SETTINGS_PATH'])
 
 
+    # if SEARXNG_DISABLE_ETC_SETTINGS don't look any futher
     if environ.get('SEARXNG_DISABLE_ETC_SETTINGS', '').lower() in ('1', 'true'):
     if environ.get('SEARXNG_DISABLE_ETC_SETTINGS', '').lower() in ('1', 'true'):
         return None
         return None
 
 
-    # if not, get it from searx code base or last solution from /etc/searxng
-    try:
-        return check_settings_yml('/etc/searxng/settings.yml')
-    except SearxSettingsException as e:
-        # fall back to searx settings
-        try:
-            return check_settings_yml('/etc/searx/settings.yml')
-        except SearxSettingsException:
-            # if none are found, raise the exception about SearXNG
-            raise e  # pylint: disable=raise-missing-from
+    # check /etc/searxng/settings.yml
+    # (continue with other locations if the file is not found)
+    return existing_filename_or_none('/etc/searxng/settings.yml')
 
 
 
 
 def update_dict(default_dict, user_dict):
 def update_dict(default_dict, user_dict):

+ 3 - 3
tests/unit/test_settings_loader.py

@@ -22,11 +22,11 @@ class TestLoad(SearxTestCase):
         with self.assertRaises(SearxSettingsException):
         with self.assertRaises(SearxSettingsException):
             settings_loader.load_yaml(join(test_dir, '/settings/empty_settings.yml'))
             settings_loader.load_yaml(join(test_dir, '/settings/empty_settings.yml'))
 
 
-    def test_check_settings_yml(self):
-        self.assertIsNone(settings_loader.check_settings_yml('/dev/zero'))
+    def test_existing_filename_or_none(self):
+        self.assertIsNone(settings_loader.existing_filename_or_none('/dev/zero'))
 
 
         bad_settings_path = join(test_dir, 'settings/syntaxerror_settings.yml')
         bad_settings_path = join(test_dir, 'settings/syntaxerror_settings.yml')
-        self.assertEqual(settings_loader.check_settings_yml(bad_settings_path), bad_settings_path)
+        self.assertEqual(settings_loader.existing_filename_or_none(bad_settings_path), bad_settings_path)
 
 
 
 
 class TestDefaultSettings(SearxTestCase):
 class TestDefaultSettings(SearxTestCase):