| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | # SPDX-License-Identifier: AGPL-3.0-or-later"""Cargo search on crates.io"""from collections import OrderedDictfrom urllib.parse import urlencodefrom dateutil import parserabout = {    "website": "https://crates.io/",    "wikidata_id": None,    "official_api_documentation": "https://crates.io/data-access",    "use_official_api": True,    "require_api_key": False,    "results": "JSON",}categories = ["it", "packages", "cargo"]# engine dependent configpaging = Truepage_size = 10search_url = "https://crates.io/api/v1/crates"linked_terms = OrderedDict(    [        ("homepage", "Project homepage"),        ("documentation", "Documentation"),        ("repository", "Source code"),    ])def request(query: str, params):    args = urlencode({"page": params["pageno"], "q": query, "per_page": page_size})    params["url"] = f"{search_url}?{args}"    return paramsdef response(resp):    results = []    for package in resp.json()["crates"]:        published_date = package.get("updated_at")        published_date = parser.parse(published_date)        links = {}        for k, v in linked_terms.items():            l = package.get(k)            if l:                links[v] = l        results.append(            {                "template": "packages.html",                "url": f'https://crates.io/crates/{package["name"]}',                "title": package["name"],                "package_name": package["name"],                "tags": package["keywords"],                "content": package["description"],                "version": package["newest_version"] or package["max_version"] or package["max_stable_version"],                "publishedDate": published_date,                "links": links,            }        )    return results
 |