mirror of
				https://github.com/searxng/searxng.git
				synced 2025-10-30 18:22:31 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # SPDX-License-Identifier: AGPL-3.0-or-later
 | |
| # pylint: disable=missing-module-docstring
 | |
| 
 | |
| 
 | |
| 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]]())]
 |