hex.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """hex.pm"""
  3. from urllib.parse import urlencode
  4. from dateutil import parser
  5. about = {
  6. # pylint: disable=line-too-long
  7. "website": "https://hex.pm/",
  8. "wikidata_id": None,
  9. "official_api_documentation": "https://github.com/hexpm/hexpm/blob/main/lib/hexpm_web/controllers/api/package_controller.ex",
  10. "use_official_api": True,
  11. "require_api_key": False,
  12. "results": "JSON",
  13. }
  14. categories = ["it", "packages"]
  15. # engine dependent config
  16. paging = True
  17. search_url = "https://hex.pm/api/packages/"
  18. def request(query: str, params):
  19. args = urlencode({"page": params["pageno"], "search": query})
  20. params["url"] = f"{search_url}?{args}"
  21. return params
  22. def response(resp):
  23. results = []
  24. for package in resp.json():
  25. meta = package["meta"]
  26. published_date = package.get("updated_at")
  27. published_date = parser.parse(published_date)
  28. links = meta.get("links")
  29. results.append(
  30. {
  31. "template": "packages.html",
  32. "url": package["html_url"],
  33. "title": package["name"],
  34. "package_name": package["name"],
  35. "content": meta.get("description", ""),
  36. "version": meta.get("latest_version"),
  37. "maintainer": ", ".join(meta.get("maintainers", [])),
  38. "publishedDate": published_date,
  39. "license_name": ", ".join(meta.get("licenses", [])),
  40. "homepage": package["docs_html_url"],
  41. "links": links,
  42. }
  43. )
  44. return results