81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # 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]]())] |