From 1d16726c903095fbcb3864bbe1707e686aa7ebeb Mon Sep 17 00:00:00 2001 From: Chih-Hsuan Yen Date: Fri, 21 Sep 2018 12:17:21 +0800 Subject: [PATCH 1/2] Add `missing_ok`, which suppresses no-result warnings --- README.rst | 4 ++++ nvchecker/core.py | 3 ++- nvchecker/source/regex.py | 3 ++- tests/conftest.py | 10 ++++++++++ tests/test_regex.py | 7 +++++++ 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index dbd2977..78768d1 100644 --- a/README.rst +++ b/README.rst @@ -177,6 +177,10 @@ from_pattern, to_pattern Both are Python-compatible regular expressions. If ``from_pattern`` is found in the version string, it will be replaced with ``to_pattern``. +missing_ok + Suppress warnings and errors if a version checking module finds nothing. + Currently only ``regex`` supports it. + If both ``prefix`` and ``from_pattern``/``to_pattern`` are used, ``from_pattern``/``to_pattern`` are ignored. If you want to strip the prefix and then do something special, just use ``from_pattern```/``to_pattern``. For diff --git a/nvchecker/core.py b/nvchecker/core.py index 73265d4..42aee27 100644 --- a/nvchecker/core.py +++ b/nvchecker/core.py @@ -176,7 +176,8 @@ class Source: elif result is not None: self.print_version_update(name, result) else: - logger.warn('no-result', name=name) + if not conf.getboolean('missing_ok', False): + logger.warn('no-result', name=name) self.on_no_result(name) if self.newver: diff --git a/nvchecker/source/regex.py b/nvchecker/source/regex.py index 43d7825..38450f5 100644 --- a/nvchecker/source/regex.py +++ b/nvchecker/source/regex.py @@ -34,5 +34,6 @@ async def get_version(name, conf, **kwargs): version = max(regex.findall(body), key=sort_version_key) except ValueError: version = None - logger.error('version string not found.', name=name) + if not conf.getboolean('missing_ok', False): + logger.error('version string not found.', name=name) return version diff --git a/tests/conftest.py b/tests/conftest.py index 6af862f..b8b2afa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,6 +2,7 @@ import configparser import pytest import asyncio import io +import structlog from nvchecker.get_version import get_version as _get_version from nvchecker.core import Source @@ -53,3 +54,12 @@ def event_loop(request): """ loop = asyncio.get_event_loop() yield loop + +@pytest.fixture(scope="module") +def raise_on_logger_msg(): + def proc(logger, method_name, event_dict): + if method_name in ('warn', 'error'): + raise RuntimeError(event_dict['event']) + return event_dict['event'] + + structlog.configure([proc]) diff --git a/tests/test_regex.py b/tests/test_regex.py index 46f39ba..d2cba27 100644 --- a/tests/test_regex.py +++ b/tests/test_regex.py @@ -18,3 +18,10 @@ async def test_regex(get_version): "url": "https://example.net/", "regex": 'for (\w+) examples', }) == "illustrative" + +async def test_missing_ok(get_version, raise_on_logger_msg): + assert await get_version("example", { + "url": "https://example.net/", + "regex": "foobar", + "missing_ok": True, + }) is None From e6d0449bc4dc44986951c71749819b9b8553d527 Mon Sep 17 00:00:00 2001 From: Chih-Hsuan Yen Date: Fri, 21 Sep 2018 12:18:21 +0800 Subject: [PATCH 2/2] Fix tests --- tests/test_ubuntupkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ubuntupkg.py b/tests/test_ubuntupkg.py index 8ea14e0..da58a8c 100644 --- a/tests/test_ubuntupkg.py +++ b/tests/test_ubuntupkg.py @@ -19,4 +19,4 @@ async def test_ubuntupkg_suite(get_version): @flaky async def test_ubuntupkg_suite_with_paging(get_version): - assert await get_version("ffmpeg", {"ubuntupkg": None, "suite": "xenial"}) == "7:2.8.14-0ubuntu0.16.04.1" + assert await get_version("ffmpeg", {"ubuntupkg": None, "suite": "xenial"}) == "7:2.8.15-0ubuntu0.16.04.1"