__init__.py 3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
'''
searx is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

searx is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with searx. If not, see < http://www.gnu.org/licenses/ >.

(C) 2013- by Adam Tauber, <asciimoo@gmail.com>
'''

Adam Tauber's avatar
Adam Tauber committed
18
import logging
19
from os import environ
20
from os.path import realpath, dirname, join, abspath, isfile
21 22

import yaml
23

24
searx_dir = abspath(dirname(__file__))
25 26
engine_dir = dirname(realpath(__file__))

27 28 29 30 31 32 33

def check_settings_yml(file_name):
    if isfile(file_name):
        return file_name
    else:
        return None

34

35
# find location of settings.yml
36
if 'SEARX_SETTINGS_PATH' in environ:
37 38 39
    # if possible set path to settings using the
    # enviroment variable SEARX_SETTINGS_PATH
    settings_path = check_settings_yml(environ['SEARX_SETTINGS_PATH'])
40
else:
41 42 43 44 45
    # if not, get it from searx code base or last solution from /etc/searx
    settings_path = check_settings_yml(join(searx_dir, 'settings.yml')) or check_settings_yml('/etc/searx/settings.yml')

if not settings_path:
    raise Exception('settings.yml not found')
46

47
# load settings
48
with open(settings_path, 'r', encoding='utf-8') as settings_yaml:
49 50 51 52 53
    # XXX: docker-compose does not support yet yaml >= 5
    if int(yaml.__version__.split('.')[0]) >= 5:
        settings = yaml.load(settings_yaml, Loader=yaml.FullLoader)
    else:
        settings = yaml.load(settings_yaml)
54

55 56 57 58 59 60 61 62 63 64 65
'''
enable debug if
the environnement variable SEARX_DEBUG is 1 or true
(whatever the value in settings.yml)
or general.debug=True in settings.yml

disable debug if
the environnement variable SEARX_DEBUG is 0 or false
(whatever the value in settings.yml)
or general.debug=False in settings.yml
'''
66 67 68 69
searx_debug = True if settings.get('general', {}).get('debug') else False
searx_loglevel = 'DEBUG' if searx_debug else 'WARNING'
searx_loglevel = environ.get('SEARX_LOGGER', searx_loglevel).upper()
logging.basicConfig(level=getattr(logging, searx_loglevel))
Adam Tauber's avatar
Adam Tauber committed
70 71

logger = logging.getLogger('searx')
72
logger.debug('read configuration from %s', settings_path)
73

Adam Tauber's avatar
Adam Tauber committed
74
logger.info('Initialisation done')
75 76 77

if 'SEARX_SECRET' in environ:
    settings['server']['secret_key'] = environ['SEARX_SECRET']
78 79 80 81
if 'BASE_URL' in environ:
    settings['server']['base_url'] = environ['BASE_URL']
if 'IMAGE_PROXY' in environ:
    settings['server']['image_proxy'] = environ['IMAGE_PROXY']
82
if 'SEARX_REDIS_HOST' in environ:
Nicolas Gelot's avatar
Nicolas Gelot committed
83
    settings['redis']['enable'] = True
84
    settings['redis']['host'] = environ['SEARX_REDIS_HOST']
85 86 87 88
if 'HTTP_PROXY_URL' in environ:
    settings['proxies']['http'] = environ['HTTP_PROXY_URL']
if 'HTTPS_PROXY_URL' in environ:
    settings['proxies']['https'] = environ['HTTPS_PROXY_URL']