__init__.py 3.29 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>
'''

18
import certifi
Adam Tauber's avatar
Adam Tauber committed
19
import logging
20
from os import environ
21
from os.path import realpath, dirname, join, abspath, isfile
22
from io import open
23
from ssl import OPENSSL_VERSION_INFO, OPENSSL_VERSION
24
25
try:
    from yaml import load
26
except ImportError:
27
28
29
30
    from sys import exit, stderr
    stderr.write('[E] install pyyaml\n')
    exit(2)

31
searx_dir = abspath(dirname(__file__))
32
33
engine_dir = dirname(realpath(__file__))

34
35
36
37
38
39
40

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

41

42
# find location of settings.yml
43
if 'SEARX_SETTINGS_PATH' in environ:
44
45
46
    # if possible set path to settings using the
    # enviroment variable SEARX_SETTINGS_PATH
    settings_path = check_settings_yml(environ['SEARX_SETTINGS_PATH'])
47
else:
48
49
50
51
52
    # 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')
53

54
# load settings
55
with open(settings_path, 'r', encoding='utf-8') as settings_yaml:
56
    settings = load(settings_yaml)
57

58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
'''
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
'''
searx_debug_env = environ.get('SEARX_DEBUG', '').lower()
if searx_debug_env == 'true' or searx_debug_env == '1':
    searx_debug = True
elif searx_debug_env == 'false' or searx_debug_env == '0':
    searx_debug = False
else:
    searx_debug = settings.get('general', {}).get('debug')

if searx_debug:
Adam Tauber's avatar
Adam Tauber committed
78
79
80
81
82
    logging.basicConfig(level=logging.DEBUG)
else:
    logging.basicConfig(level=logging.WARNING)

logger = logging.getLogger('searx')
83
logger.debug('read configuration from %s', settings_path)
84
85
86
# Workaround for openssl versions <1.0.2
# https://github.com/certifi/python-certifi/issues/26
if OPENSSL_VERSION_INFO[0:3] < (1, 0, 2):
87
88
    if hasattr(certifi, 'old_where'):
        environ['REQUESTS_CA_BUNDLE'] = certifi.old_where()
89
90
    logger.warning('You are using an old openssl version({0}), please upgrade above 1.0.2!'.format(OPENSSL_VERSION))

Adam Tauber's avatar
Adam Tauber committed
91
logger.info('Initialisation done')
92
93
94

if 'SEARX_SECRET' in environ:
    settings['server']['secret_key'] = environ['SEARX_SECRET']
95
96
97
98
if 'BASE_URL' in environ:
    settings['server']['base_url'] = environ['BASE_URL']
if 'IMAGE_PROXY' in environ:
    settings['server']['image_proxy'] = environ['IMAGE_PROXY']
99
100
if 'SEARX_REDIS_HOST' in environ:
    settings['redis']['host'] = environ['SEARX_REDIS_HOST']