summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/conf.py3
-rwxr-xr-xsearx/webapp.py20
-rw-r--r--searx/webutils.py16
3 files changed, 32 insertions, 7 deletions
diff --git a/docs/conf.py b/docs/conf.py
index ad884fd03..66c20594d 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -28,11 +28,8 @@ numfig = True
exclude_patterns = ['build-templates/*.rst']
from searx import webapp
-import searx.engines
-searx.engines.initialize_engines(searx.settings['engines'])
jinja_contexts = {
'webapp': dict(**webapp.__dict__),
- 'engines': searx.engines.engines
}
# usage:: lorem :patch:`f373169` ipsum
diff --git a/searx/webapp.py b/searx/webapp.py
index 5723734c1..c19d3f3cc 100755
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -65,7 +65,7 @@ from searx.engines import (
from searx.webutils import (
UnicodeWriter, highlight_content, get_resources_directory,
get_static_files, get_result_templates, get_themes,
- prettify_url, new_hmac
+ prettify_url, new_hmac, is_flask_run_cmdline
)
from searx.webadapter import get_search_query_from_webapp, get_selected_categories
from searx.utils import html_to_text, gen_useragent, dict_subset, match_language
@@ -114,9 +114,21 @@ app.jinja_env.lstrip_blocks = True
app.jinja_env.add_extension('jinja2.ext.loopcontrols')
app.secret_key = settings['server']['secret_key']
-if not searx_debug \
- or os.environ.get("WERKZEUG_RUN_MAIN") == "true" \
- or os.environ.get('UWSGI_ORIGINAL_PROC_NAME') is not None:
+# see https://flask.palletsprojects.com/en/1.1.x/cli/
+# True if "FLASK_APP=searx/webapp.py FLASK_ENV=development flask run"
+flask_run_development = \
+ os.environ.get("FLASK_APP") is not None\
+ and os.environ.get("FLASK_ENV") == 'development'\
+ and is_flask_run_cmdline()
+
+# True if reload feature is activated of werkzeug, False otherwise (including uwsgi, etc..)
+# __name__ != "__main__" if searx.webapp is imported (make test, make docs, uwsgi...)
+# see run() at the end of this file : searx_debug activates the reload feature.
+werkzeug_reloader = flask_run_development or (searx_debug and __name__ == "__main__")
+
+# initialize the engines except on the first run of the werkzeug server.
+if not werkzeug_reloader\
+ or (werkzeug_reloader and os.environ.get("WERKZEUG_RUN_MAIN") == "true"):
initialize_engines(settings['engines'])
babel = Babel(app)
diff --git a/searx/webutils.py b/searx/webutils.py
index 6dd0243d8..8be8fcecd 100644
--- a/searx/webutils.py
+++ b/searx/webutils.py
@@ -4,6 +4,7 @@ import csv
import hashlib
import hmac
import re
+import inspect
from io import StringIO
from codecs import getincrementalencoder
@@ -127,3 +128,18 @@ def highlight_content(content, query):
content, flags=re.I | re.U)
return content
+
+
+def is_flask_run_cmdline():
+ """Check if the application was started using "flask run" command line
+
+ Inspect the callstack.
+ See https://github.com/pallets/flask/blob/master/src/flask/__main__.py
+
+ Returns:
+ bool: True if the application was started using "flask run".
+ """
+ frames = inspect.stack()
+ if len(frames) < 2:
+ return False
+ return frames[-2].filename.endswith('flask/cli.py')