Skip to content

Commit c2db1e9

Browse files
authored
Merge pull request #397 from paperlessreceipts/counter-pre-post-values
Counter: expose the previous and changed values.
2 parents 4f0a742 + b7aff3f commit c2db1e9

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

kazoo/recipe/counter.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@ class Counter(object):
3434
counter += 2
3535
counter -= 1
3636
counter.value == 1
37+
counter.pre_value == 2
38+
counter.post_value == 1
3739
3840
counter = zk.Counter("/float", default=1.0)
3941
counter += 2.0
4042
counter.value == 3.0
43+
counter.pre_value == 1.0
44+
counter.post_value == 3.0
4145
4246
"""
4347
def __init__(self, client, path, default=0):
@@ -53,6 +57,8 @@ def __init__(self, client, path, default=0):
5357
self.default = default
5458
self.default_type = type(default)
5559
self._ensured_path = False
60+
self.pre_value = None
61+
self.post_value = None
5662

5763
def _ensure_node(self):
5864
if not self._ensured_path:
@@ -79,12 +85,15 @@ def _change(self, value):
7985
return self
8086

8187
def _inner_change(self, value):
82-
data, version = self._value()
83-
data = repr(data + value).encode('ascii')
88+
self.pre_value, version = self._value()
89+
post_value = self.pre_value + value
90+
data = repr(post_value).encode('ascii')
8491
try:
8592
self.client.set(self.path, data, version=version)
8693
except BadVersionError: # pragma: nocover
94+
self.post_value = None
8795
raise ForceRetryError()
96+
self.post_value = post_value
8897

8998
def __add__(self, value):
9099
"""Add value to counter."""

kazoo/tests/test_counter.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,15 @@ def test_errors(self):
3333
counter = self._makeOne()
3434
self.assertRaises(TypeError, counter.__add__, 2.1)
3535
self.assertRaises(TypeError, counter.__add__, b"a")
36+
37+
def test_pre_post_values(self):
38+
counter = self._makeOne()
39+
eq_(counter.value, 0)
40+
eq_(counter.pre_value, None)
41+
eq_(counter.post_value, None)
42+
counter += 2
43+
eq_(counter.pre_value, 0)
44+
eq_(counter.post_value, 2)
45+
counter -= 3
46+
eq_(counter.pre_value, 2)
47+
eq_(counter.post_value, -1)

0 commit comments

Comments
 (0)