searxng/searx/shared/__init__.py
Markus Heiser 4809bf705c [mod] shared.storage: implement a backend to store in the redis DB
- implement shared_redis.RedisCacheSharedDict to store key/value pairs in the
  redis DB.  The default key_prefix is 'SearXNG_SharedDict'.

- simplify searx.shared and import RedisCacheSharedDict, set
  key_prefix to 'SearXNG_storage'

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2022-09-24 19:56:14 +02:00

48 lines
1.2 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""Module implements a :py:obj:`storage`."""
__all__ = ['schedule', 'storage']
import logging
import importlib
from . import redisdb
from . import shared_redis
from . import shared_simple
logger = logging.getLogger('searx.shared')
SharedDict = None
schedule = None
if redisdb.init():
SharedDict = shared_redis.RedisCacheSharedDict
logger.info('use redis DB for SharedDict')
try:
from . import shared_uwsgi
uwsgi = importlib.import_module('uwsgi')
uwsgi.cache_update('dummy', b'dummy')
if uwsgi.cache_get('dummy') != b'dummy':
raise Exception()
schedule = shared_uwsgi.schedule
logger.info('use shared_uwsgi for schedule')
if SharedDict is None:
SharedDict = shared_simple.SimpleSharedDict
logger.info('use shared_uwsgi for SharedDict')
except Exception: # pylint: disable=broad-except
logger.debug('skip uwsgi setup ..', exc_info=1)
if SharedDict is None:
logger.info('use shared_simple for SharedDict')
SharedDict = shared_simple.SimpleSharedDict
if schedule is None:
logger.info('use shared_simple for schedule')
schedule = shared_simple.schedule
storage = SharedDict(key_prefix='SearXNG_storage')