| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | """Within this module we implement a *demo offline engine*.  Do not look to
 | 
					
						
							|  |  |  | close to the implementation, its just a simple example.  To get in use of this | 
					
						
							|  |  |  | *demo* engine add the following entry to your engines list in ``settings.yml``: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. code:: yaml | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - name: my offline engine | 
					
						
							|  |  |  |     engine: demo_offline | 
					
						
							|  |  |  |     shortcut: demo | 
					
						
							|  |  |  |     disabled: false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import json | 
					
						
							| 
									
										
										
										
											2025-01-27 16:43:43 +01:00
										 |  |  | from searx.result_types import EngineResults | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | engine_type = 'offline' | 
					
						
							|  |  |  | categories = ['general'] | 
					
						
							|  |  |  | disabled = True | 
					
						
							|  |  |  | timeout = 2.0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | about = { | 
					
						
							|  |  |  |     "wikidata_id": None, | 
					
						
							|  |  |  |     "official_api_documentation": None, | 
					
						
							|  |  |  |     "use_official_api": False, | 
					
						
							|  |  |  |     "require_api_key": False, | 
					
						
							|  |  |  |     "results": 'JSON', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # if there is a need for globals, use a leading underline | 
					
						
							|  |  |  | _my_offline_engine = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  | def init(engine_settings=None): | 
					
						
							|  |  |  |     """Initialization of the (offline) engine.  The origin of this demo engine is a
 | 
					
						
							|  |  |  |     simple json string which is loaded in this example while the engine is | 
					
						
							|  |  |  |     initialized. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     global _my_offline_engine  # pylint: disable=global-statement | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     _my_offline_engine = ( | 
					
						
							|  |  |  |         '[ {"value": "%s"}' | 
					
						
							|  |  |  |         ', {"value":"first item"}' | 
					
						
							|  |  |  |         ', {"value":"second item"}' | 
					
						
							|  |  |  |         ', {"value":"third item"}' | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |         ']' % engine_settings.get('name') | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-27 16:43:43 +01:00
										 |  |  | def search(query, request_params) -> EngineResults: | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  |     """Query (offline) engine and return results.  Assemble the list of results from
 | 
					
						
							|  |  |  |     your local engine.  In this demo engine we ignore the 'query' term, usual | 
					
						
							|  |  |  |     you would pass the 'query' term to your local engine to filter out the | 
					
						
							|  |  |  |     results. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2025-01-27 16:43:43 +01:00
										 |  |  |     res = EngineResults() | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     result_list = json.loads(_my_offline_engine) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for row in result_list: | 
					
						
							|  |  |  |         entry = { | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             'query': query, | 
					
						
							| 
									
										
										
										
											2022-09-29 20:54:46 +02:00
										 |  |  |             'language': request_params['searxng_locale'], | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             'value': row.get("value"), | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  |             # choose a result template or comment out to use the *default* | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             'template': 'key-value.html', | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-01-27 16:43:43 +01:00
										 |  |  |         res.append(entry) | 
					
						
							| 
									
										
										
										
											2021-06-03 12:51:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-27 16:43:43 +01:00
										 |  |  |     return res |