Skip to content

Commit 6833351

Browse files
committed
docs: add types to recipe.counter
1 parent e82b74f commit 6833351

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

kazoo/recipe/counter.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
44
:Status: Unknown
55
66
"""
7+
import struct
8+
from typing import Optional, Tuple, Type, Union, cast
9+
10+
from kazoo.client import KazooClient
711
from kazoo.exceptions import BadVersionError
812
from kazoo.retry import ForceRetryError
9-
import struct
1013

1114

15+
CountT = Union[int, float]
1216
class Counter(object):
1317
"""Kazoo Counter
1418
@@ -58,7 +62,7 @@ class Counter(object):
5862
5963
"""
6064

61-
def __init__(self, client, path, default=0, support_curator=False):
65+
def __init__(self, client: KazooClient, path: str, default: CountT=0, support_curator: bool=False):
6266
"""Create a Kazoo Counter
6367
6468
:param client: A :class:`~kazoo.client.KazooClient` instance.
@@ -70,46 +74,46 @@ def __init__(self, client, path, default=0, support_curator=False):
7074
"""
7175
self.client = client
7276
self.path = path
73-
self.default = default
74-
self.default_type = type(default)
77+
self.default: CountT = default
78+
self.default_type: Type[CountT] = type(default)
7579
self.support_curator = support_curator
7680
self._ensured_path = False
77-
self.pre_value = None
78-
self.post_value = None
81+
self.pre_value: Optional[CountT] = None
82+
self.post_value: Optional[CountT] = None
7983
if self.support_curator and not isinstance(self.default, int):
8084
raise TypeError(
8185
"when support_curator is enabled the default "
8286
"type must be an int"
8387
)
8488

85-
def _ensure_node(self):
89+
def _ensure_node(self) -> None:
8690
if not self._ensured_path:
8791
# make sure our node exists
8892
self.client.ensure_path(self.path)
8993
self._ensured_path = True
9094

91-
def _value(self):
95+
def _value(self) -> Tuple[CountT, int]:
9296
self._ensure_node()
9397
old, stat = self.client.get(self.path)
9498
if self.support_curator:
95-
old = struct.unpack(">i", old)[0] if old != b"" else self.default
99+
parsed_old: Union[int,float,str] = cast(int, struct.unpack(">i", old)[0]) if old != b"" else self.default
96100
else:
97-
old = old.decode("ascii") if old != b"" else self.default
101+
parsed_old = old.decode("ascii") if old != b"" else self.default
98102
version = stat.version
99-
data = self.default_type(old)
103+
data = self.default_type(parsed_old)
100104
return data, version
101105

102106
@property
103-
def value(self):
107+
def value(self) -> CountT:
104108
return self._value()[0]
105109

106-
def _change(self, value):
110+
def _change(self, value: CountT) -> 'Counter':
107111
if not isinstance(value, self.default_type):
108112
raise TypeError("invalid type for value change")
109113
self.client.retry(self._inner_change, value)
110114
return self
111115

112-
def _inner_change(self, value):
116+
def _inner_change(self, value: CountT) -> None:
113117
self.pre_value, version = self._value()
114118
post_value = self.pre_value + value
115119
if self.support_curator:
@@ -123,10 +127,10 @@ def _inner_change(self, value):
123127
raise ForceRetryError()
124128
self.post_value = post_value
125129

126-
def __add__(self, value):
130+
def __add__(self, value: CountT) -> 'Counter':
127131
"""Add value to counter."""
128132
return self._change(value)
129133

130-
def __sub__(self, value):
134+
def __sub__(self, value: CountT) -> 'Counter':
131135
"""Subtract value from counter."""
132136
return self._change(-value)

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ disable_error_code = ["no-untyped-call", "no-untyped-def"]
3131
files = [
3232
"kazoo/recipe/election.py",
3333
"kazoo/recipe/lock.py",
34-
"kazoo/recipe/lease.py"
34+
"kazoo/recipe/lease.py",
35+
"kazoo/recipe/counter.py"
3536
]
3637

3738
[[tool.mypy.overrides]]

0 commit comments

Comments
 (0)