diff --git a/nvchecker/__init__.py b/nvchecker/__init__.py index 1b883a0..f1c1b2b 100644 --- a/nvchecker/__init__.py +++ b/nvchecker/__init__.py @@ -1,4 +1,4 @@ # MIT licensed # Copyright (c) 2013-2024 lilydjwg , et al. -__version__ = '2.15' +__version__ = '2.15.1' diff --git a/nvchecker_source/pypi.py b/nvchecker_source/pypi.py index e565475..8cf0435 100644 --- a/nvchecker_source/pypi.py +++ b/nvchecker_source/pypi.py @@ -1,10 +1,13 @@ # MIT licensed -# Copyright (c) 2013-2021 lilydjwg , et al. +# Copyright (c) 2013-2021,2023-2024 lilydjwg , et al. -from packaging.version import Version +import structlog +from packaging.version import Version, InvalidVersion from nvchecker.api import RichResult +logger = structlog.get_logger(logger_name=__name__) + async def get_version(name, conf, *, cache, **kwargs): ret = [] @@ -16,7 +19,14 @@ async def get_version(name, conf, *, cache, **kwargs): data = await cache.get_json(url) for version in data['releases'].keys(): - parsed_version = Version(version) + try: + parsed_version = Version(version) + except InvalidVersion: + if data['releases'][version]: + # emit a warning if there is something under the invalid version + # sympy has an empty "0.5.13-hg" version + logger.warning('ignoring invalid version', version=version) + continue if not use_pre_release and parsed_version.is_prerelease: continue diff --git a/tests/test_pypi.py b/tests/test_pypi.py index 18f8b0b..4ae01a8 100644 --- a/tests/test_pypi.py +++ b/tests/test_pypi.py @@ -26,3 +26,9 @@ async def test_pypi_list(get_version): "source": "pypi", "include_regex": "^1\\..*", }) == "1.26.18" + +async def test_pypi_invalid_version(get_version): + await get_version("sympy", { + "source": "pypi", + }) +