pypi: support list options

This commit is contained in:
Chih-Hsuan Yen 2024-05-19 12:10:40 +08:00
parent 2a63ddef7a
commit 8397cbbce0
3 changed files with 22 additions and 11 deletions

View File

@ -570,6 +570,8 @@ pypi
use_pre_release
Whether to accept pre release. Default is false.
This source supports :ref:`list options`.
.. note::
An additional dependency "packaging" is required.
You can use ``pip install 'nvchecker[pypi]'``.

View File

@ -6,6 +6,8 @@ from packaging.version import Version
from nvchecker.api import RichResult
async def get_version(name, conf, *, cache, **kwargs):
ret = []
package = conf.get('pypi') or name
use_pre_release = conf.get('use_pre_release', False)
@ -13,14 +15,15 @@ async def get_version(name, conf, *, cache, **kwargs):
data = await cache.get_json(url)
if use_pre_release:
version = sorted(
data['releases'].keys(),
key = Version,
)[-1]
else:
version = data['info']['version']
return RichResult(
version = version,
url = f'https://pypi.org/project/{package}/{version}/',
)
for version in data['releases'].keys():
parsed_version = Version(version)
if not use_pre_release and parsed_version.is_prerelease:
continue
ret.append(RichResult(
version = version,
url = f'https://pypi.org/project/{package}/{version}/',
))
return ret

View File

@ -20,3 +20,9 @@ async def test_pypi_pre_release(get_version):
"source": "pypi",
"use_pre_release": 1,
}) == "1.0.1a1"
async def test_pypi_list(get_version):
assert await get_version("urllib3", {
"source": "pypi",
"include_regex": "^1\\..*",
}) == "1.26.18"