Skip to content

Commit 92ea4b0

Browse files
tkauf15kThomas Kaufmann
and
Thomas Kaufmann
authored
add bookmark support in watcher (#291)
Co-authored-by: Thomas Kaufmann <[email protected]>
1 parent 7d43571 commit 92ea4b0

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

kubernetes_asyncio/watch/watch.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def unmarshal_event(self, data: str, response_type):
104104

105105
# If possible, compile the JSON response into a Python native response
106106
# type, eg `V1Namespace` or `V1Pod`,`ExtensionsV1beta1Deployment`, ...
107-
if response_type:
107+
if response_type and js['type'].lower() != 'bookmark':
108108
js['object'] = self._api_client.deserialize(
109109
response=SimpleNamespace(data=json.dumps(js['raw_object'])),
110110
response_type=response_type
@@ -120,6 +120,8 @@ def unmarshal_event(self, data: str, response_type):
120120
and 'metadata' in js['object']
121121
and 'resourceVersion' in js['object']['metadata']):
122122
self.resource_version = js['object']['metadata']['resourceVersion']
123+
elif js['type'].lower() == 'bookmark':
124+
self.resource_version = js['object']['metadata']['resourceVersion']
123125

124126
return js
125127

kubernetes_asyncio/watch/watch_test.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,17 @@ async def test_watch_timeout_with_resource_version(self):
280280

281281
fake_resp.release.assert_called_once_with()
282282
self.assertEqual(watch.resource_version, '10')
283+
284+
def test_unmarshal_bookmark_succeeds_and_preserves_resource_version(self):
285+
w = Watch()
286+
event = w.unmarshal_event('{"type": "BOOKMARK", "object": {"apiVersion":'
287+
'"test.com/v1beta1","kind":"foo","metadata":'
288+
'{"name": "bar", "resourceVersion": "1"}}}',
289+
'object')
290+
self.assertEqual("BOOKMARK", event['type'])
291+
292+
# make sure the resource version is preserved,
293+
# and the watcher's resource_version is updated
294+
self.assertTrue(isinstance(event['object'], dict))
295+
self.assertEqual("1", event['object']['metadata']['resourceVersion'])
296+
self.assertEqual("1", w.resource_version)

0 commit comments

Comments
 (0)