diff options
Diffstat (limited to 'searx/answerers/random.py')
| -rw-r--r-- | searx/answerers/random.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/searx/answerers/random.py b/searx/answerers/random.py new file mode 100644 index 000000000..495a077ed --- /dev/null +++ b/searx/answerers/random.py @@ -0,0 +1,80 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# pylint: disable=missing-module-docstring + +from __future__ import annotations + +import hashlib +import random +import string +import uuid +from flask_babel import gettext + +from searx.result_types import Answer +from searx.result_types.answer import BaseAnswer + +from . import Answerer, AnswererInfo + + +def random_characters(): + random_string_letters = string.ascii_lowercase + string.digits + string.ascii_uppercase + return [random.choice(random_string_letters) for _ in range(random.randint(8, 32))] + + +def random_string(): + return ''.join(random_characters()) + + +def random_float(): + return str(random.random()) + + +def random_int(): + random_int_max = 2**31 + return str(random.randint(-random_int_max, random_int_max)) + + +def random_sha256(): + m = hashlib.sha256() + m.update(''.join(random_characters()).encode()) + return str(m.hexdigest()) + + +def random_uuid(): + return str(uuid.uuid4()) + + +def random_color(): + color = "%06x" % random.randint(0, 0xFFFFFF) + return f"#{color.upper()}" + + +class SXNGAnswerer(Answerer): + """Random value generator""" + + keywords = ["random"] + + random_types = { + "string": random_string, + "int": random_int, + "float": random_float, + "sha256": random_sha256, + "uuid": random_uuid, + "color": random_color, + } + + def info(self): + + return AnswererInfo( + name=gettext(self.__doc__), + description=gettext("Generate different random values"), + keywords=self.keywords, + examples=[f"random {x}" for x in self.random_types], + ) + + def answer(self, query: str) -> list[BaseAnswer]: + + parts = query.split() + if len(parts) != 2 or parts[1] not in self.random_types: + return [] + + return [Answer(answer=self.random_types[parts[1]]())] |