hex.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. publishedDate = package.get("inserted_at")
  27. if publishedDate:
  28. publishedDate = parser.parse(publishedDate)
  29. tags = meta.get("licenses", [])
  30. results.append(
  31. {
  32. "template": "packages.html",
  33. "url": package["url"],
  34. "title": package["name"],
  35. "package_name": package["name"],
  36. "content": meta.get("description", ""),
  37. "version": meta.get("latest_version"),
  38. "maintainer": ", ".join(meta.get("maintainers", [])),
  39. "publishedDate": publishedDate,
  40. "tags": tags,
  41. "homepage": meta.get("links", {}).get("homepage"),
  42. "source_code_url": meta.get("links", {}).get("github"),
  43. }
  44. )
  45. return results