mirror of
https://github.com/searxng/searxng.git
synced 2025-06-28 19:49:53 +00:00
The types necessary for weather information such as GeoLocation, DateTime, Temperature,Pressure, WindSpeed, RelativeHumidity, Compass (wind direction) and symbols for the weather have been implemented. There are unit conversions and translations for weather property labels. Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""This module implements the :origin:`searxng_msg <babel.cfg>` extractor to
|
|
extract messages from:
|
|
|
|
- :origin:`searx/searxng.msg`
|
|
|
|
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 = [path.join(path.dirname(__file__), SEARXNG_MSG_FILE)]
|
|
|
|
|
|
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 obj_name in namespace['__all__']:
|
|
obj = namespace[obj_name]
|
|
if isinstance(obj, list):
|
|
for msg in obj:
|
|
# (lineno, funcname, message, comments)
|
|
yield 0, '_', msg, [f"{obj_name}"]
|
|
elif isinstance(obj, dict):
|
|
for k, msg in obj.items():
|
|
yield 0, '_', msg, [f"{obj_name}['{k}']"]
|
|
else:
|
|
raise ValueError(f"{obj_name} should be list or dict")
|