9
9
import uuid
10
10
11
11
from kazoo .exceptions import KazooException , NoNodeError , NodeExistsError
12
- from kazoo .protocol .states import EventType
12
+ from kazoo .protocol .states import EventType , WatchedEvent
13
+ from typing import TYPE_CHECKING , Optional
14
+
15
+ if TYPE_CHECKING :
16
+ from kazoo .client import KazooClient
17
+ from typing_extensions import Literal
13
18
14
19
15
20
class Barrier (object ):
@@ -27,7 +32,7 @@ class Barrier(object):
27
32
28
33
"""
29
34
30
- def __init__ (self , client , path ):
35
+ def __init__ (self , client : KazooClient , path : str ):
31
36
"""Create a Kazoo Barrier
32
37
33
38
:param client: A :class:`~kazoo.client.KazooClient` instance.
@@ -37,11 +42,11 @@ def __init__(self, client, path):
37
42
self .client = client
38
43
self .path = path
39
44
40
- def create (self ):
45
+ def create (self ) -> None :
41
46
"""Establish the barrier if it doesn't exist already"""
42
47
self .client .retry (self .client .ensure_path , self .path )
43
48
44
- def remove (self ):
49
+ def remove (self ) -> bool :
45
50
"""Remove the barrier
46
51
47
52
:returns: Whether the barrier actually needed to be removed.
@@ -54,7 +59,7 @@ def remove(self):
54
59
except NoNodeError :
55
60
return False
56
61
57
- def wait (self , timeout = None ):
62
+ def wait (self , timeout : Optional [ float ] = None ) -> bool :
58
63
"""Wait on the barrier to be cleared
59
64
60
65
:returns: True if the barrier has been cleared, otherwise
@@ -64,7 +69,7 @@ def wait(self, timeout=None):
64
69
"""
65
70
cleared = self .client .handler .event_object ()
66
71
67
- def wait_for_clear (event ) :
72
+ def wait_for_clear (event : WatchedEvent ) -> None :
68
73
if event .type == EventType .DELETED :
69
74
cleared .set ()
70
75
@@ -93,7 +98,13 @@ class DoubleBarrier(object):
93
98
94
99
"""
95
100
96
- def __init__ (self , client , path , num_clients , identifier = None ):
101
+ def __init__ (
102
+ self ,
103
+ client : KazooClient ,
104
+ path : str ,
105
+ num_clients : int ,
106
+ identifier : Optional [str ] = None ,
107
+ ):
97
108
"""Create a Double Barrier
98
109
99
110
:param client: A :class:`~kazoo.client.KazooClient` instance.
@@ -118,7 +129,7 @@ def __init__(self, client, path, num_clients, identifier=None):
118
129
self .node_name = uuid .uuid4 ().hex
119
130
self .create_path = self .path + "/" + self .node_name
120
131
121
- def enter (self ):
132
+ def enter (self ) -> None :
122
133
"""Enter the barrier, blocks until all nodes have entered"""
123
134
try :
124
135
self .client .retry (self ._inner_enter )
@@ -128,7 +139,7 @@ def enter(self):
128
139
self ._best_effort_cleanup ()
129
140
self .participating = False
130
141
131
- def _inner_enter (self ):
142
+ def _inner_enter (self ) -> Literal [ True ] :
132
143
# make sure our barrier parent node exists
133
144
if not self .assured_path :
134
145
self .client .ensure_path (self .path )
@@ -145,7 +156,7 @@ def _inner_enter(self):
145
156
except NodeExistsError :
146
157
pass
147
158
148
- def created (event ) :
159
+ def created (event : WatchedEvent ) -> None :
149
160
if event .type == EventType .CREATED :
150
161
ready .set ()
151
162
@@ -159,7 +170,7 @@ def created(event):
159
170
self .client .ensure_path (self .path + "/ready" )
160
171
return True
161
172
162
- def leave (self ):
173
+ def leave (self ) -> None :
163
174
"""Leave the barrier, blocks until all nodes have left"""
164
175
try :
165
176
self .client .retry (self ._inner_leave )
@@ -168,7 +179,7 @@ def leave(self):
168
179
self ._best_effort_cleanup ()
169
180
self .participating = False
170
181
171
- def _inner_leave (self ):
182
+ def _inner_leave (self ) -> Literal [ True ] :
172
183
# Delete the ready node if its around
173
184
try :
174
185
self .client .delete (self .path + "/ready" )
@@ -188,7 +199,7 @@ def _inner_leave(self):
188
199
189
200
ready = self .client .handler .event_object ()
190
201
191
- def deleted (event ) :
202
+ def deleted (event : WatchedEvent ) -> None :
192
203
if event .type == EventType .DELETED :
193
204
ready .set ()
194
205
@@ -214,7 +225,7 @@ def deleted(event):
214
225
# Wait for the lowest to be deleted
215
226
ready .wait ()
216
227
217
- def _best_effort_cleanup (self ):
228
+ def _best_effort_cleanup (self ) -> None :
218
229
try :
219
230
self .client .retry (self .client .delete , self .create_path )
220
231
except NoNodeError :
0 commit comments