[doc] update docs/dev/plugins.rst
This commit is contained in:
		
							parent
							
								
									b941763e20
								
							
						
					
					
						commit
						0b27c8698f
					
				| @ -26,8 +26,8 @@ Example plugin | |||||||
|    # attach callback to the post search hook |    # attach callback to the post search hook | ||||||
|    #  request: flask request object |    #  request: flask request object | ||||||
|    #  ctx: the whole local context of the post search hook |    #  ctx: the whole local context of the post search hook | ||||||
|    def post_search(request, ctx): |    def post_search(request, search): | ||||||
|        ctx['search'].suggestions.add('example') |        search.result_container.suggestions.add('example') | ||||||
|        return True |        return True | ||||||
| 
 | 
 | ||||||
| External plugins | External plugins | ||||||
| @ -50,20 +50,52 @@ Plugin entry points | |||||||
| 
 | 
 | ||||||
| Entry points (hooks) define when a plugin runs. Right now only three hooks are | Entry points (hooks) define when a plugin runs. Right now only three hooks are | ||||||
| implemented. So feel free to implement a hook if it fits the behaviour of your | implemented. So feel free to implement a hook if it fits the behaviour of your | ||||||
| plugin. | plugin. A plugin doesn't need to implement all the hooks. | ||||||
| 
 | 
 | ||||||
| Pre search hook |  | ||||||
| --------------- |  | ||||||
| 
 | 
 | ||||||
| Runs BEFORE the search request. Function to implement: ``pre_search`` | .. py:function:: pre_search(request, search) -> bool | ||||||
| 
 | 
 | ||||||
| Post search hook |    Runs BEFORE the search request. | ||||||
| ---------------- |  | ||||||
| 
 | 
 | ||||||
| Runs AFTER the search request. Function to implement: ``post_search`` |    `search.result_container` can be changed. | ||||||
| 
 | 
 | ||||||
| Result hook |    Return a boolean: | ||||||
| ----------- |  | ||||||
| 
 | 
 | ||||||
| Runs when a new result is added to the result list. Function to implement: |    * True to continue the search | ||||||
| ``on_result`` |    * False to stop the search | ||||||
|  | 
 | ||||||
|  |    :param flask.request request: | ||||||
|  |    :param searx.search.SearchWithPlugins search: | ||||||
|  |    :return: False to stop the search | ||||||
|  |    :rtype: bool | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .. py:function:: post_search(request, search) -> None | ||||||
|  | 
 | ||||||
|  |    Runs AFTER the search request. | ||||||
|  | 
 | ||||||
|  |    :param flask.request request: Flask request. | ||||||
|  |    :param searx.search.SearchWithPlugins search: Context. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .. py:function:: on_result(request, search, result) -> bool | ||||||
|  | 
 | ||||||
|  |    Runs for each result of each engine. | ||||||
|  | 
 | ||||||
|  |    `result` can be changed. | ||||||
|  | 
 | ||||||
|  |    If `result["url"]` is defined, then `result["parsed_url"] = urlparse(result['url'])` | ||||||
|  | 
 | ||||||
|  |    .. warning:: | ||||||
|  |       `result["url"]` can be changed, but `result["parsed_url"]` must be updated too. | ||||||
|  | 
 | ||||||
|  |    Return a boolean: | ||||||
|  | 
 | ||||||
|  |    * True to keep the result | ||||||
|  |    * False to remove the result | ||||||
|  | 
 | ||||||
|  |    :param flask.request request: | ||||||
|  |    :param searx.search.SearchWithPlugins search: | ||||||
|  |    :param typing.Dict result: Result, see - :ref:`engine results` | ||||||
|  |    :return: True to keep the result | ||||||
|  |    :rtype: bool | ||||||
|  | |||||||
							
								
								
									
										38
									
								
								docs/src/searx.search.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								docs/src/searx.search.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | .. _searx.search: | ||||||
|  | 
 | ||||||
|  | ====== | ||||||
|  | Search | ||||||
|  | ====== | ||||||
|  | 
 | ||||||
|  | .. autoclass:: searx.search.EngineRef | ||||||
|  |   :members: | ||||||
|  | 
 | ||||||
|  | .. autoclass:: searx.search.SearchQuery | ||||||
|  |   :members: | ||||||
|  | 
 | ||||||
|  | .. autoclass:: searx.search.Search | ||||||
|  | 
 | ||||||
|  |   .. attribute:: search_query | ||||||
|  |     :type: searx.search.SearchQuery | ||||||
|  | 
 | ||||||
|  |   .. attribute:: result_container | ||||||
|  |     :type: searx.results.ResultContainer | ||||||
|  | 
 | ||||||
|  |   .. automethod:: search() -> searx.results.ResultContainer | ||||||
|  | 
 | ||||||
|  | .. autoclass:: searx.search.SearchWithPlugins | ||||||
|  |   :members: | ||||||
|  | 
 | ||||||
|  |   .. attribute:: search_query | ||||||
|  |     :type: searx.search.SearchQuery | ||||||
|  | 
 | ||||||
|  |   .. attribute:: result_container | ||||||
|  |     :type: searx.results.ResultContainer | ||||||
|  | 
 | ||||||
|  |   .. attribute:: ordered_plugin_list | ||||||
|  |     :type: typing.List | ||||||
|  | 
 | ||||||
|  |   .. attribute:: request | ||||||
|  |     :type: flask.request | ||||||
|  | 
 | ||||||
|  |   .. automethod:: search() -> searx.results.ResultContainer | ||||||
| @ -39,7 +39,7 @@ class Search: | |||||||
| 
 | 
 | ||||||
|     __slots__ = "search_query", "result_container", "start_time", "actual_timeout" |     __slots__ = "search_query", "result_container", "start_time", "actual_timeout" | ||||||
| 
 | 
 | ||||||
|     def __init__(self, search_query): |     def __init__(self, search_query: SearchQuery): | ||||||
|         # init vars |         # init vars | ||||||
|         super().__init__() |         super().__init__() | ||||||
|         self.search_query = search_query |         self.search_query = search_query | ||||||
| @ -163,7 +163,7 @@ class Search: | |||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     # do search-request |     # do search-request | ||||||
|     def search(self): |     def search(self) -> ResultContainer: | ||||||
|         self.start_time = default_timer() |         self.start_time = default_timer() | ||||||
|         if not self.search_external_bang(): |         if not self.search_external_bang(): | ||||||
|             if not self.search_answerers(): |             if not self.search_answerers(): | ||||||
| @ -172,11 +172,11 @@ class Search: | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SearchWithPlugins(Search): | class SearchWithPlugins(Search): | ||||||
|     """Similar to the Search class but call the plugins.""" |     """Inherit from the Search class, add calls to the plugins.""" | ||||||
| 
 | 
 | ||||||
|     __slots__ = 'ordered_plugin_list', 'request' |     __slots__ = 'ordered_plugin_list', 'request' | ||||||
| 
 | 
 | ||||||
|     def __init__(self, search_query, ordered_plugin_list, request): |     def __init__(self, search_query: SearchQuery, ordered_plugin_list, request: "flask.Request"): | ||||||
|         super().__init__(search_query) |         super().__init__(search_query) | ||||||
|         self.ordered_plugin_list = ordered_plugin_list |         self.ordered_plugin_list = ordered_plugin_list | ||||||
|         self.result_container.on_result = self._on_result |         self.result_container.on_result = self._on_result | ||||||
| @ -192,7 +192,7 @@ class SearchWithPlugins(Search): | |||||||
|     def _on_result(self, result): |     def _on_result(self, result): | ||||||
|         return plugins.call(self.ordered_plugin_list, 'on_result', self.request, self, result) |         return plugins.call(self.ordered_plugin_list, 'on_result', self.request, self, result) | ||||||
| 
 | 
 | ||||||
|     def search(self): |     def search(self) -> ResultContainer: | ||||||
|         if plugins.call(self.ordered_plugin_list, 'pre_search', self.request, self): |         if plugins.call(self.ordered_plugin_list, 'pre_search', self.request, self): | ||||||
|             super().search() |             super().search() | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ import typing | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class EngineRef: | class EngineRef: | ||||||
|  |     """Reference by names to an engine and category""" | ||||||
| 
 | 
 | ||||||
|     __slots__ = 'name', 'category' |     __slots__ = 'name', 'category' | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Alexandre Flament
						Alexandre Flament