12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # SPDX-License-Identifier: AGPL-3.0-or-later
- """npms.io
- """
- from urllib.parse import urlencode
- from dateutil import parser
- about = {
- "website": "https://npms.io/",
- "wikidata_id": "Q7067518",
- "official_api_documentation": "https://api-docs.npms.io/",
- "use_official_api": False,
- "require_api_key": False,
- "results": "JSON",
- }
- categories = ['it', 'packages']
- # engine dependent config
- paging = True
- page_size = 25
- search_api = "https://api.npms.io/v2/search?"
- def request(query: str, params):
- args = urlencode(
- {
- 'from': (params["pageno"] - 1) * page_size,
- 'q': query,
- 'size': page_size,
- }
- )
- params['url'] = search_api + args
- return params
- def response(resp):
- results = []
- content = resp.json()
- for entry in content["results"]:
- package = entry["package"]
- publishedDate = package.get("date")
- if publishedDate:
- publishedDate = parser.parse(publishedDate)
- tags = list(entry.get("flags", {}).keys()) + package.get("keywords", [])
- results.append(
- {
- "template": "packages.html",
- "url": package["links"]["npm"],
- "title": package["name"],
- 'package_name': package["name"],
- "content": package.get("description", ""),
- "version": package.get("version"),
- "maintainer": package.get("author", {}).get("name"),
- 'publishedDate': publishedDate,
- "tags": tags,
- "homepage": package["links"].get("homepage"),
- "source_code_url": package["links"].get("repository"),
- }
- )
- return results
|