@@ -83,12 +83,14 @@ def unmarshal_event(self, data, return_type):
83
83
js ['object' ] = self ._api_client .deserialize (obj , return_type )
84
84
return js
85
85
86
- def stream (self , func , * args , ** kwargs ):
86
+ def stream (self , func , keep = False , * args , ** kwargs ):
87
87
"""Watch an API resource and stream the result back via a generator.
88
88
89
89
:param func: The API function pointer. Any parameter to the function
90
90
can be passed after this parameter.
91
91
92
+ :param keep: Flag to keep the watch work all the time.
93
+
92
94
:return: Event object with these keys:
93
95
'type': The type of event such as "ADDED", "DELETED", etc.
94
96
'raw_object': a dict representing the watched object.
@@ -113,12 +115,17 @@ def stream(self, func, *args, **kwargs):
113
115
return_type = self .get_return_type (func )
114
116
kwargs ['watch' ] = True
115
117
kwargs ['_preload_content' ] = False
116
- resp = func (* args , ** kwargs )
117
- try :
118
- for line in iter_resp_lines (resp ):
119
- yield self .unmarshal_event (line , return_type )
120
- if self ._stop :
121
- break
122
- finally :
123
- resp .close ()
124
- resp .release_conn ()
118
+
119
+ while True :
120
+ resp = func (* args , ** kwargs )
121
+ try :
122
+ for line in iter_resp_lines (resp ):
123
+ yield self .unmarshal_event (line , return_type )
124
+ if self ._stop :
125
+ break
126
+ finally :
127
+ resp .close ()
128
+ resp .release_conn ()
129
+
130
+ if not keep or self ._stop :
131
+ break
0 commit comments