From aabf9f503784321f026e6028a5c5ff6066d4cfda Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Sat, 22 Sep 2018 13:12:25 +0800 Subject: [PATCH] cache get_version results closes #81 --- nvchecker/get_version.py | 11 +++++++++++ tests/test_cache.py | 12 ++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 tests/test_cache.py diff --git a/nvchecker/get_version.py b/nvchecker/get_version.py index 96be522..9e4affc 100644 --- a/nvchecker/get_version.py +++ b/nvchecker/get_version.py @@ -38,7 +38,18 @@ def substitute_version(version, name, conf): # No substitution rules found. Just return the original version string. return version +_cache = {} + async def get_version(name, conf, **kwargs): + cache_key = tuple(sorted(conf.items())) + if cache_key in _cache: + return _cache[cache_key] + + version = await _get_version_real(name, conf, **kwargs) + _cache[cache_key] = version + return version + +async def _get_version_real(name, conf, **kwargs): for key in handler_precedence: if key in conf: func = import_module('.source.' + key, __package__).get_version diff --git a/tests/test_cache.py b/tests/test_cache.py new file mode 100644 index 0000000..455fd54 --- /dev/null +++ b/tests/test_cache.py @@ -0,0 +1,12 @@ +# MIT licensed +# Copyright (c) 2018 lilydjwg , et al. + +import pytest +pytestmark = pytest.mark.asyncio + +async def test_cache(get_version): + a = await get_version("a", {"cmd": "date +%%N"}) + b = await get_version("b", {"cmd": "date +%%N"}) + c = await get_version("c", {"cmd": "date"}) + assert a == b + assert a != c