diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-06-13 14:09:33 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-06-13 14:09:33 -0400 |
commit | 98abe7ec7d13ca2dadfd5deb991493854ff55212 (patch) | |
tree | e249982f333653977749d9bf6fa073ce3aa3cd66 | |
parent | 06bdb3c68ecde21e41a3aff09b9cbe355314c5dc (diff) | |
download | dogpile-cache-98abe7ec7d13ca2dadfd5deb991493854ff55212.tar.gz |
- rename to "null"
- add a test suite
- fix multi names
- changelog
-rw-r--r-- | docs/build/api.rst | 2 | ||||
-rw-r--r-- | docs/build/changelog.rst | 7 | ||||
-rw-r--r-- | dogpile/cache/backends/__init__.py | 2 | ||||
-rw-r--r-- | dogpile/cache/backends/null.py (renamed from dogpile/cache/backends/dummy.py) | 24 | ||||
-rw-r--r-- | tests/cache/test_null_backend.py | 67 |
5 files changed, 90 insertions, 12 deletions
diff --git a/docs/build/api.rst b/docs/build/api.rst index 4703f11..2e04f29 100644 --- a/docs/build/api.rst +++ b/docs/build/api.rst @@ -39,7 +39,7 @@ Backends .. automodule:: dogpile.cache.proxy :members: -.. automodule:: dogpile.cache.dummy +.. automodule:: dogpile.cache.null :members: Plugins diff --git a/docs/build/changelog.rst b/docs/build/changelog.rst index 0f2b4c7..565d53d 100644 --- a/docs/build/changelog.rst +++ b/docs/build/changelog.rst @@ -5,6 +5,13 @@ Changelog :version: 0.5.4 .. change:: + :tags: feature + :pullreq: 18 + + Added new :class:`.NullBackend`, for testing and cache-disabling + purposes. Pull request courtesy Wichert Akkerman. + + .. change:: :tags: bug :pullreq: 19 diff --git a/dogpile/cache/backends/__init__.py b/dogpile/cache/backends/__init__.py index 80309f5..84c31ab 100644 --- a/dogpile/cache/backends/__init__.py +++ b/dogpile/cache/backends/__init__.py @@ -1,6 +1,6 @@ from dogpile.cache.region import register_backend -register_backend("dogpile.cache.dummy", "dogpile.cache.backends.dummy", "DummyBackend") +register_backend("dogpile.cache.null", "dogpile.cache.backends.null", "NullBackend") register_backend("dogpile.cache.dbm", "dogpile.cache.backends.file", "DBMBackend") register_backend("dogpile.cache.pylibmc", "dogpile.cache.backends.memcached", "PylibmcBackend") register_backend("dogpile.cache.bmemcached", "dogpile.cache.backends.memcached", "BMemcachedBackend") diff --git a/dogpile/cache/backends/dummy.py b/dogpile/cache/backends/null.py index 4e1cf8e..d5d50aa 100644 --- a/dogpile/cache/backends/dummy.py +++ b/dogpile/cache/backends/null.py @@ -1,18 +1,22 @@ """ -Dummy Backend +Null Backend ------------- -The dummy backend does not do any cachingn at all. It is inteded to be used -to test behaviour without caching. +The Null backend does not do any caching at all. It can be +used to test behavior without caching, or as a means of disabling +caching for a region that is otherwise used normally. + +.. versionadded:: 0.5.4 + """ from dogpile.cache.api import CacheBackend, NO_VALUE -__all__ = ['DummyBackend'] +__all__ = ['NullBackend'] -class DummyLock(object): # pragma NO COVERAGE +class NullLock(object): def acquire(self): pass @@ -20,27 +24,27 @@ class DummyLock(object): # pragma NO COVERAGE pass -class DummyBackend(CacheBackend): # pragma NO COVERAGE +class NullBackend(CacheBackend): def __init__(self, arguments): pass def get_mutex(self, key): - return DummyLock() + return NullLock() def get(self, key): return NO_VALUE - def get_multiple(self, keys): + def get_multi(self, keys): return [NO_VALUE for k in keys] def set(self, key, value): pass - def set_multiple(self, mapping): + def set_multi(self, mapping): pass def delete(self, key): pass - def delete_multiple(self, keys): + def delete_multi(self, keys): pass diff --git a/tests/cache/test_null_backend.py b/tests/cache/test_null_backend.py new file mode 100644 index 0000000..9f274de --- /dev/null +++ b/tests/cache/test_null_backend.py @@ -0,0 +1,67 @@ +from dogpile.cache.backends.null import NullLock +from unittest import TestCase +from _fixtures import _GenericBackendFixture +from dogpile.cache.api import NO_VALUE +from . import eq_ +import itertools + +class NullBackendTest(_GenericBackendFixture, TestCase): + backend = "dogpile.cache.null" + + def test_get(self): + reg = self._region() + + eq_(reg.get("some key"), NO_VALUE) + + def test_set(self): + reg = self._region() + reg.set("some key", "some value") + eq_(reg.get("some key"), NO_VALUE) + + def test_delete(self): + reg = self._region() + reg.delete("some key") + eq_(reg.get("some key"), NO_VALUE) + + def test_get_multi(self): + reg = self._region() + + eq_( + reg.get_multi(['a', 'b', 'c']), + [NO_VALUE, NO_VALUE, NO_VALUE] + ) + + def test_set_multi(self): + reg = self._region() + reg.set_multi( + { + "a": 1, + "b": 2, + "c": 3 + } + ) + eq_( + reg.get_multi(['a', 'b', 'c']), + [NO_VALUE, NO_VALUE, NO_VALUE] + ) + + def test_delete_multi(self): + reg = self._region() + reg.delete_multi(["a", "b", "c"]) + eq_( + reg.get_multi(['a', 'b', 'c']), + [NO_VALUE, NO_VALUE, NO_VALUE] + ) + + def test_decorator(self): + reg = self._region() + + counter = itertools.count(1) + @reg.cache_on_arguments() + def go(a, b): + val = next(counter) + return val, a, b + + eq_(go(1, 2), (1, 1, 2)) + eq_(go(1, 2), (2, 1, 2)) + eq_(go(1, 3), (3, 1, 3)) |