random.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # pylint: disable=missing-module-docstring
  3. from __future__ import annotations
  4. import hashlib
  5. import random
  6. import string
  7. import uuid
  8. from flask_babel import gettext
  9. from searx.result_types import Answer
  10. from searx.result_types.answer import BaseAnswer
  11. from . import Answerer, AnswererInfo
  12. def random_characters():
  13. random_string_letters = string.ascii_lowercase + string.digits + string.ascii_uppercase
  14. return [random.choice(random_string_letters) for _ in range(random.randint(8, 32))]
  15. def random_string():
  16. return ''.join(random_characters())
  17. def random_float():
  18. return str(random.random())
  19. def random_int():
  20. random_int_max = 2**31
  21. return str(random.randint(-random_int_max, random_int_max))
  22. def random_sha256():
  23. m = hashlib.sha256()
  24. m.update(''.join(random_characters()).encode())
  25. return str(m.hexdigest())
  26. def random_uuid():
  27. return str(uuid.uuid4())
  28. def random_color():
  29. color = "%06x" % random.randint(0, 0xFFFFFF)
  30. return f"#{color.upper()}"
  31. class SXNGAnswerer(Answerer):
  32. """Random value generator"""
  33. keywords = ["random"]
  34. random_types = {
  35. "string": random_string,
  36. "int": random_int,
  37. "float": random_float,
  38. "sha256": random_sha256,
  39. "uuid": random_uuid,
  40. "color": random_color,
  41. }
  42. def info(self):
  43. return AnswererInfo(
  44. name=gettext(self.__doc__),
  45. description=gettext("Generate different random values"),
  46. keywords=self.keywords,
  47. examples=[f"random {x}" for x in self.random_types],
  48. )
  49. def answer(self, query: str) -> list[BaseAnswer]:
  50. parts = query.split()
  51. if len(parts) != 2 or parts[1] not in self.random_types:
  52. return []
  53. return [Answer(answer=self.random_types[parts[1]]())]