summaryrefslogtreecommitdiff
path: root/searx/babel_extract.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/babel_extract.py')
-rw-r--r--searx/babel_extract.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/searx/babel_extract.py b/searx/babel_extract.py
new file mode 100644
index 000000000..5f575f6d4
--- /dev/null
+++ b/searx/babel_extract.py
@@ -0,0 +1,51 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# lint: pylint
+"""This module implements the :origin:`searxng_msg <babel.cfg>` extractor to
+extract messages from:
+
+- None
+
+The ``searxng.msg`` files are selected by Babel_, see Babel's configuration in
+:origin:`babel.cfg`::
+
+ searxng_msg = searx.babel_extract.extract
+ ...
+ [searxng_msg: **/searxng.msg]
+
+A ``searxng.msg`` file is a python file that is *executed* by the
+:py:obj:`extract` function. Additional ``searxng.msg`` files can be added by:
+
+1. Adding a ``searxng.msg`` file in one of the SearXNG python packages and
+2. implement a method in :py:obj:`extract` that yields messages from this file.
+
+.. _Babel: https://babel.pocoo.org/en/latest/index.html
+
+"""
+
+from os import path
+
+SEARXNG_MSG_FILE = "searxng.msg"
+_MSG_FILES = []
+
+
+def extract(
+ # pylint: disable=unused-argument
+ fileobj,
+ keywords,
+ comment_tags,
+ options,
+):
+ """Extract messages from ``searxng.msg`` files by a custom extractor_.
+
+ .. _extractor:
+ https://babel.pocoo.org/en/latest/messages.html#writing-extraction-methods
+ """
+ if fileobj.name not in _MSG_FILES:
+ raise RuntimeError("don't know how to extract messages from %s" % fileobj.name)
+
+ namespace = {}
+ exec(fileobj.read(), {}, namespace) # pylint: disable=exec-used
+
+ for name in namespace['__all__']:
+ for k, v in namespace[name].items():
+ yield 0, '_', v, ["%s['%s']" % (name, k)]