summaryrefslogtreecommitdiff
path: root/searx/user_help.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/user_help.py')
-rw-r--r--searx/user_help.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/searx/user_help.py b/searx/user_help.py
new file mode 100644
index 000000000..2822d3a0d
--- /dev/null
+++ b/searx/user_help.py
@@ -0,0 +1,38 @@
+from typing import Dict
+import os.path
+import pkg_resources
+
+import flask
+
+from . import get_setting
+from .version import GIT_URL
+
+HELP: Dict[str, str] = {}
+""" Maps a filename under help/ without the file extension to the rendered HTML. """
+
+
+def render(app: flask.Flask):
+ """
+ Renders the user documentation. Must be called after all Flask routes have been
+ registered, because the documentation might try to link to them with Flask's `url_for`.
+
+ We render the user documentation once on startup to improve performance.
+ """
+ for filename in pkg_resources.resource_listdir(__name__, 'help'):
+ rootname, ext = os.path.splitext(filename)
+ if ext != '.html':
+ continue
+
+ text = pkg_resources.resource_string(__name__, 'help/' + filename).decode()
+
+ base_url = get_setting('server.base_url') or None
+ # we specify base_url so that url_for works for base_urls that have a non-root path
+
+ with app.test_request_context(base_url=base_url):
+ # the request context is needed for Flask's url_for
+ # (otherwise we'd need to set app.config['SERVER_NAME'],
+ # which we don't want)
+
+ interpolated = flask.render_template_string(text, get_setting=get_setting, searx_git_url=GIT_URL)
+
+ HELP[rootname] = interpolated