summaryrefslogtreecommitdiff
path: root/searx/engines/hex.py
blob: 28b536d9747040ac9de8ceba02eae00a9cf05004 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# SPDX-License-Identifier: AGPL-3.0-or-later
"""hex.pm"""

from urllib.parse import urlencode
from dateutil import parser


about = {
    # pylint: disable=line-too-long
    "website": "https://hex.pm/",
    "wikidata_id": None,
    "official_api_documentation": "https://github.com/hexpm/hexpm/blob/main/lib/hexpm_web/controllers/api/package_controller.ex",
    "use_official_api": True,
    "require_api_key": False,
    "results": "JSON",
}

categories = ["it", "packages"]


# engine dependent config
paging = True
search_url = "https://hex.pm/api/packages/"


def request(query: str, params):
    args = urlencode({"page": params["pageno"], "search": query})
    params["url"] = f"{search_url}?{args}"
    return params


def response(resp):
    results = []
    for package in resp.json():
        meta = package["meta"]
        published_date = package.get("updated_at")
        published_date = parser.parse(published_date)
        links = meta.get("links")
        results.append(
            {
                "template": "packages.html",
                "url": package["html_url"],
                "title": package["name"],
                "package_name": package["name"],
                "content": meta.get("description", ""),
                "version": meta.get("latest_version"),
                "maintainer": ", ".join(meta.get("maintainers", [])),
                "publishedDate": published_date,
                "license_name": ", ".join(meta.get("licenses", [])),
                "homepage": package["docs_html_url"],
                "links": links,
            }
        )

    return results