Merge pull request #397 from paperlessreceipts/counter-pre-post-values

Counter: expose the previous and changed values.
This commit is contained in:
Ben Bangert 2017-05-31 14:48:07 -07:00 committed by GitHub
commit c2db1e99a3
2 changed files with 23 additions and 2 deletions

View File

@ -34,10 +34,14 @@ class Counter(object):
counter += 2
counter -= 1
counter.value == 1
counter.pre_value == 2
counter.post_value == 1
counter = zk.Counter("/float", default=1.0)
counter += 2.0
counter.value == 3.0
counter.pre_value == 1.0
counter.post_value == 3.0
"""
def __init__(self, client, path, default=0):
@ -53,6 +57,8 @@ class Counter(object):
self.default = default
self.default_type = type(default)
self._ensured_path = False
self.pre_value = None
self.post_value = None
def _ensure_node(self):
if not self._ensured_path:
@ -79,12 +85,15 @@ class Counter(object):
return self
def _inner_change(self, value):
data, version = self._value()
data = repr(data + value).encode('ascii')
self.pre_value, version = self._value()
post_value = self.pre_value + value
data = repr(post_value).encode('ascii')
try:
self.client.set(self.path, data, version=version)
except BadVersionError: # pragma: nocover
self.post_value = None
raise ForceRetryError()
self.post_value = post_value
def __add__(self, value):
"""Add value to counter."""

View File

@ -33,3 +33,15 @@ class KazooCounterTests(KazooTestCase):
counter = self._makeOne()
self.assertRaises(TypeError, counter.__add__, 2.1)
self.assertRaises(TypeError, counter.__add__, b"a")
def test_pre_post_values(self):
counter = self._makeOne()
eq_(counter.value, 0)
eq_(counter.pre_value, None)
eq_(counter.post_value, None)
counter += 2
eq_(counter.pre_value, 0)
eq_(counter.post_value, 2)
counter -= 3
eq_(counter.pre_value, 2)
eq_(counter.post_value, -1)