Skip to content

Commit 3cf403f

Browse files
authored
Merge pull request #270 from yan12125/pypi-list-options
pypi: support list options
2 parents 2a63dde + 6af59aa commit 3cf403f

File tree

4 files changed

+26
-14
lines changed

4 files changed

+26
-14
lines changed

docs/usage.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,8 @@ pypi
570570
use_pre_release
571571
Whether to accept pre release. Default is false.
572572

573+
This source supports :ref:`list options`.
574+
573575
.. note::
574576
An additional dependency "packaging" is required.
575577
You can use ``pip install 'nvchecker[pypi]'``.

nvchecker_source/pypi.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,24 @@
66
from nvchecker.api import RichResult
77

88
async def get_version(name, conf, *, cache, **kwargs):
9+
ret = []
10+
911
package = conf.get('pypi') or name
1012
use_pre_release = conf.get('use_pre_release', False)
1113

1214
url = 'https://pypi.org/pypi/{}/json'.format(package)
1315

1416
data = await cache.get_json(url)
1517

16-
if use_pre_release:
17-
version = sorted(
18-
data['releases'].keys(),
19-
key = Version,
20-
)[-1]
21-
else:
22-
version = data['info']['version']
23-
return RichResult(
24-
version = version,
25-
url = f'https://pypi.org/project/{package}/{version}/',
26-
)
18+
for version in data['releases'].keys():
19+
parsed_version = Version(version)
20+
21+
if not use_pre_release and parsed_version.is_prerelease:
22+
continue
23+
24+
ret.append(RichResult(
25+
version = version,
26+
url = f'https://pypi.org/project/{package}/{version}/',
27+
))
28+
29+
return ret

tests/test_pypi.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,9 @@ async def test_pypi_pre_release(get_version):
2020
"source": "pypi",
2121
"use_pre_release": 1,
2222
}) == "1.0.1a1"
23+
24+
async def test_pypi_list(get_version):
25+
assert await get_version("urllib3", {
26+
"source": "pypi",
27+
"include_regex": "^1\\..*",
28+
}) == "1.26.18"

tests/test_ubuntupkg.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
# MIT licensed
2-
# Copyright (c) 2020 lilydjwg <[email protected]>, et al.
2+
# Copyright (c) 2020,2024 lilydjwg <[email protected]>, et al.
33
# Copyright (c) 2017 Felix Yan <[email protected]>, et al.
44

55
import pytest
66
pytestmark = [pytest.mark.asyncio(scope="session"), pytest.mark.needs_net]
77

88
@pytest.mark.flaky
99
async def test_ubuntupkg(get_version):
10-
assert await get_version("sigrok-firmware-fx2lafw", {
10+
v = await get_version("sigrok-firmware-fx2lafw", {
1111
"source": "ubuntupkg",
12-
}) == "0.1.7-1"
12+
})
13+
assert v.startswith("0.1.7-")
1314

1415
@pytest.mark.flaky
1516
async def test_ubuntupkg_strip_release(get_version):

0 commit comments

Comments
 (0)