summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-06-13 14:09:33 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-06-13 14:09:33 -0400
commit98abe7ec7d13ca2dadfd5deb991493854ff55212 (patch)
treee249982f333653977749d9bf6fa073ce3aa3cd66
parent06bdb3c68ecde21e41a3aff09b9cbe355314c5dc (diff)
downloaddogpile-cache-98abe7ec7d13ca2dadfd5deb991493854ff55212.tar.gz
- rename to "null"
- add a test suite - fix multi names - changelog
-rw-r--r--docs/build/api.rst2
-rw-r--r--docs/build/changelog.rst7
-rw-r--r--dogpile/cache/backends/__init__.py2
-rw-r--r--dogpile/cache/backends/null.py (renamed from dogpile/cache/backends/dummy.py)24
-rw-r--r--tests/cache/test_null_backend.py67
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))