From 2e55a7db60b5134dc83198f34fe3c42196bf7c1e Mon Sep 17 00:00:00 2001 From: Bruce Zhang Date: Sat, 29 Dec 2018 23:35:23 +0800 Subject: [PATCH] pypi: use_pre_release support Signed-off-by: Bruce Zhang --- nvchecker/source/pypi.py | 28 +++++++++++++++++++--------- tests/test_pypi.py | 6 ++++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/nvchecker/source/pypi.py b/nvchecker/source/pypi.py index 0da1aeb..ed2a27c 100644 --- a/nvchecker/source/pypi.py +++ b/nvchecker/source/pypi.py @@ -1,15 +1,25 @@ # MIT licensed # Copyright (c) 2013-2017 lilydjwg , et al. -from .simple_json import simple_json +from . import cmd, conf_cacheable_with_name, session -PYPI_URL = 'https://pypi.org/pypi/%s/json' +get_cacheable_conf = conf_cacheable_with_name('pypi') -def _version_from_json(data): - return data['info']['version'] +async def get_version(name, conf, **kwargs): + package = conf.get('pypi') + use_pre_release = conf.getboolean('use_pre_release', False) -get_version, get_cacheable_conf = simple_json( - PYPI_URL, - 'pypi', - _version_from_json, -) + headers = { + 'Accept': 'application/json', + 'User-Agent': 'lilydjwg/nvchecker', + } + url = 'https://pypi.org/pypi/{}/json'.format(package) + + async with session.get(url) as res: + data = await res.json() + + if use_pre_release: + version = sorted(data['releases'].keys())[-1] + else: + version = data['info']['version'] + return version diff --git a/tests/test_pypi.py b/tests/test_pypi.py index 4db6d44..0bf935d 100644 --- a/tests/test_pypi.py +++ b/tests/test_pypi.py @@ -6,3 +6,9 @@ pytestmark = pytest.mark.asyncio async def test_pypi(get_version): assert await get_version("example", {"pypi": None}) == "0.1.0" + +async def test_pypi_release(get_version): + assert await get_version("example-test-package", {"pypi": "example-test-package"}) == "1.0.0" + +async def test_pypi_pre_release(get_version): + assert await get_version("example-test-package", {"pypi": "example-test-package", "use_pre_release": 1}) == "1.0.1a1"