[fix] settings_loader.py - use update_dict only for mapping types

I can't set `default_doi_resolver` in `settings.yml` if I'm using
`use_default_settings`.  Searx seems to try to interpret all settings at root
level in `settings.yml` as dict, which is correct except for
`default_doi_resolver` which is at root level and a string::

    File "/usr/lib/python3.9/site-packages/searx/settings_loader.py", line 125, in load_settings
        update_settings(default_settings, user_settings)
    File "/usr/lib/python3.9/site-packages/searx/settings_loader.py", line 61, in update_settings
        update_dict(default_settings[k], v)
    File "/usr/lib/python3.9/site-packages/searx/settings_loader.py", line 48, in update_dict
        for k, v in user_dict.items():
    AttributeError: 'str' object has no attribute 'items'

Signed-off-by: Markus Heiser <markus@darmarit.de>
Suggested-by:  @0xhtml https://github.com/searx/searx/issues/2722#issuecomment-813391659
This commit is contained in:
Markus Heiser 2021-04-05 16:33:48 +02:00
parent 7089526723
commit 9c10b15096

View File

@ -57,7 +57,7 @@ def update_settings(default_settings, user_settings):
# merge everything except the engines # merge everything except the engines
for k, v in user_settings.items(): for k, v in user_settings.items():
if k not in ('use_default_settings', 'engines'): if k not in ('use_default_settings', 'engines'):
if k in default_settings: if k in default_settings and isinstance(v, Mapping):
update_dict(default_settings[k], v) update_dict(default_settings[k], v)
else: else:
default_settings[k] = v default_settings[k] = v