diff options
Diffstat (limited to 'searx/engines/annas_archive.py')
| -rw-r--r-- | searx/engines/annas_archive.py | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/searx/engines/annas_archive.py b/searx/engines/annas_archive.py index f5312f7e5..d2dd7e8f5 100644 --- a/searx/engines/annas_archive.py +++ b/searx/engines/annas_archive.py @@ -32,18 +32,24 @@ Implementations =============== """ +import typing as t -from typing import List, Dict, Any, Optional from urllib.parse import urlencode from lxml import html +from lxml.etree import ElementBase from searx.utils import extract_text, eval_xpath, eval_xpath_getindex, eval_xpath_list from searx.enginelib.traits import EngineTraits from searx.data import ENGINE_TRAITS from searx.exceptions import SearxEngineXPathException +from searx.result_types import EngineResults + +if t.TYPE_CHECKING: + from searx.extended_types import SXNG_Response + # about -about: Dict[str, Any] = { +about: dict[str, t.Any] = { "website": "https://annas-archive.org/", "wikidata_id": "Q115288326", "official_api_documentation": None, @@ -53,7 +59,7 @@ about: Dict[str, Any] = { } # engine dependent config -categories: List[str] = ["files"] +categories: list[str] = ["files"] paging: bool = True # search-url @@ -85,7 +91,7 @@ aa_ext: str = '' """ -def init(engine_settings=None): # pylint: disable=unused-argument +def init(engine_settings: dict[str, t.Any]) -> None: # pylint: disable=unused-argument """Check of engine's settings.""" traits = EngineTraits(**ENGINE_TRAITS['annas archive']) @@ -99,8 +105,8 @@ def init(engine_settings=None): # pylint: disable=unused-argument raise ValueError(f'invalid setting ext: {aa_ext}') -def request(query, params: Dict[str, Any]) -> Dict[str, Any]: - lang = traits.get_language(params["language"], traits.all_locale) # type: ignore +def request(query: str, params: dict[str, t.Any]) -> None: + lang = traits.get_language(params["language"], traits.all_locale) args = { 'lang': lang, 'content': aa_content, @@ -112,11 +118,10 @@ def request(query, params: Dict[str, Any]) -> Dict[str, Any]: # filter out None and empty values filtered_args = dict((k, v) for k, v in args.items() if v) params["url"] = f"{base_url}/search?{urlencode(filtered_args)}" - return params -def response(resp) -> List[Dict[str, Optional[str]]]: - results: List[Dict[str, Optional[str]]] = [] +def response(resp: "SXNG_Response") -> EngineResults: + res = EngineResults() dom = html.fromstring(resp.text) # The rendering of the WEB page is strange; positions of Anna's result page @@ -126,16 +131,17 @@ def response(resp) -> List[Dict[str, Optional[str]]]: for item in eval_xpath_list(dom, '//main//div[contains(@class, "js-aarecord-list-outer")]/div'): try: - results.append(_get_result(item)) + kwargs: dict[str, t.Any] = _get_result(item) except SearxEngineXPathException: - pass - return results + continue + res.add(res.types.LegacyResult(**kwargs)) + return res -def _get_result(item): +def _get_result(item: ElementBase) -> dict[str, t.Any]: return { 'template': 'paper.html', - 'url': base_url + extract_text(eval_xpath_getindex(item, './a/@href', 0)), + 'url': base_url + eval_xpath_getindex(item, './a/@href', 0), 'title': extract_text(eval_xpath(item, './div//a[starts-with(@href, "/md5")]')), 'authors': [extract_text(eval_xpath_getindex(item, './/a[starts-with(@href, "/search")]', 0))], 'publisher': extract_text( @@ -160,9 +166,9 @@ def fetch_traits(engine_traits: EngineTraits): engine_traits.custom['sort'] = [] resp = get(base_url + '/search') - if not resp.ok: # type: ignore + if not resp.ok: raise RuntimeError("Response from Anna's search page is not OK.") - dom = html.fromstring(resp.text) # type: ignore + dom = html.fromstring(resp.text) # supported language codes |