123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # 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]]())]
|