answerer.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. import hashlib
  3. import random
  4. import string
  5. import uuid
  6. from flask_babel import gettext
  7. # required answerer attribute
  8. # specifies which search query keywords triggers this answerer
  9. keywords = ('random',)
  10. random_int_max = 2**31
  11. random_string_letters = string.ascii_lowercase + string.digits + string.ascii_uppercase
  12. def random_characters():
  13. return [random.choice(random_string_letters) for _ in range(random.randint(8, 32))]
  14. def random_string():
  15. return ''.join(random_characters())
  16. def random_float():
  17. return str(random.random())
  18. def random_int():
  19. return str(random.randint(-random_int_max, random_int_max))
  20. def random_sha256():
  21. m = hashlib.sha256()
  22. m.update(''.join(random_characters()).encode())
  23. return str(m.hexdigest())
  24. def random_uuid():
  25. return str(uuid.uuid4())
  26. def random_color():
  27. color = "%06x" % random.randint(0, 0xFFFFFF)
  28. return f"#{color.upper()}"
  29. random_types = {
  30. 'string': random_string,
  31. 'int': random_int,
  32. 'float': random_float,
  33. 'sha256': random_sha256,
  34. 'uuid': random_uuid,
  35. 'color': random_color,
  36. }
  37. # required answerer function
  38. # can return a list of results (any result type) for a given query
  39. def answer(query):
  40. parts = query.query.split()
  41. if len(parts) != 2:
  42. return []
  43. if parts[1] not in random_types:
  44. return []
  45. return [{'answer': random_types[parts[1]]()}]
  46. # required answerer function
  47. # returns information about the answerer
  48. def self_info():
  49. return {
  50. 'name': gettext('Random value generator'),
  51. 'description': gettext('Generate different random values'),
  52. 'examples': ['random {}'.format(x) for x in random_types],
  53. }