diff options
Diffstat (limited to 'searx/engines/searchcode_code.py')
| -rw-r--r-- | searx/engines/searchcode_code.py | 87 |
1 files changed, 35 insertions, 52 deletions
diff --git a/searx/engines/searchcode_code.py b/searx/engines/searchcode_code.py index 2196b0ad2..c0a6550a0 100644 --- a/searx/engines/searchcode_code.py +++ b/searx/engines/searchcode_code.py @@ -1,79 +1,62 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -"""Searchcode (IT) +"""Searchcode (IT)""" -""" +from __future__ import annotations + +import typing as t -from json import loads from urllib.parse import urlencode +from searx.result_types import EngineResults +from searx.extended_types import SXNG_Response + # about about = { - "website": 'https://searchcode.com/', + "website": "https://searchcode.com/", "wikidata_id": None, - "official_api_documentation": 'https://searchcode.com/api/', + "official_api_documentation": "https://searchcode.com/api/", "use_official_api": True, "require_api_key": False, - "results": 'JSON', + "results": "JSON", } # engine dependent config -categories = ['it'] -search_api = 'https://searchcode.com/api/codesearch_I/?' - -# special code-endings which are not recognised by the file ending -code_endings = {'cs': 'c#', 'h': 'c', 'hpp': 'cpp', 'cxx': 'cpp'} +categories = ["it"] +search_api = "https://searchcode.com/api/codesearch_I/?" # paging is broken in searchcode.com's API .. not sure it will ever been fixed # paging = True -def request(query, params): - args = urlencode( - { - 'q': query, - # paging is broken in searchcode.com's API - # 'p': params['pageno'] - 1, - # 'per_page': 10, - } - ) - params['url'] = search_api + args - logger.debug("query_url --> %s", params['url']) - return params +def request(query: str, params: dict[str, t.Any]) -> None: + args = { + "q": query, + # paging is broken in searchcode.com's API + # "p": params["pageno"] - 1, + # "per_page": 10, + } + params["url"] = search_api + urlencode(args) + logger.debug("query_url --> %s", params["url"]) -def response(resp): - results = [] - search_results = loads(resp.text) +def response(resp: SXNG_Response) -> EngineResults: + res = EngineResults() # parse results - for result in search_results.get('results', []): - href = result['url'] - title = "" + result['name'] + " - " + result['filename'] - repo = result['repo'] - + for result in resp.json().get("results", []): lines = {} - for line, code in result['lines'].items(): + for line, code in result["lines"].items(): lines[int(line)] = code - code_language = code_endings.get( - result['filename'].split('.')[-1].lower(), result['filename'].split('.')[-1].lower() - ) - - # append result - results.append( - { - 'url': href, - 'title': title, - 'content': '', - 'repository': repo, - 'codelines': sorted(lines.items()), - 'code_language': code_language, - 'template': 'code.html', - 'strip_whitespace': True, - 'strip_new_lines': True, - } + res.add( + res.types.Code( + url=result["url"], + title=f'{result["name"]} - {result["filename"]}', + repository=result["repo"], + filename=result["filename"], + codelines=sorted(lines.items()), + strip_whitespace=True, + ) ) - # return results - return results + return res |