From 10ae4760b53a917116ae7525a7bbc94f35632cfb Mon Sep 17 00:00:00 2001 From: Yu Liao Date: Mon, 12 Apr 2021 17:17:42 -0700 Subject: [PATCH] quick fix of decoding error for BOOKMARK event --- watch/watch.py | 6 +++++- watch/watch_test.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/watch/watch.py b/watch/watch.py index 3bbb770..71fd459 100644 --- a/watch/watch.py +++ b/watch/watch.py @@ -96,7 +96,11 @@ def get_watch_argument_name(self, func): def unmarshal_event(self, data, return_type): js = json.loads(data) js['raw_object'] = js['object'] - if return_type and js['type'] != 'ERROR': + # BOOKMARK event is treated the same as ERROR for a quick fix of + # decoding exception + # TODO: make use of the resource_version in BOOKMARK event for more + # efficient WATCH + if return_type and js['type'] != 'ERROR' and js['type'] != 'BOOKMARK': obj = SimpleNamespace(data=json.dumps(js['raw_object'])) js['object'] = self._api_client.deserialize(obj, return_type) if hasattr(js['object'], 'metadata'): diff --git a/watch/watch_test.py b/watch/watch_test.py index cad72fd..f87a4ea 100644 --- a/watch/watch_test.py +++ b/watch/watch_test.py @@ -255,6 +255,19 @@ def test_unmarshal_with_custom_object(self): self.assertEqual("1", event['object']['metadata']['resourceVersion']) self.assertEqual("1", w.resource_version) + def test_unmarshal_with_bookmark(self): + w = Watch() + event = w.unmarshal_event( + '{"type":"BOOKMARK","object":{"kind":"Job","apiVersion":"batch/v1"' + ',"metadata":{"resourceVersion":"1"},"spec":{"template":{' + '"metadata":{},"spec":{"containers":null}}},"status":{}}}', + 'V1Job') + self.assertEqual("BOOKMARK", event['type']) + # Watch.resource_version is *not* updated, as BOOKMARK is treated the + # same as ERROR for a quick fix of decoding exception, + # resource_version in BOOKMARK is *not* used at all. + self.assertEqual(None, w.resource_version) + def test_watch_with_exception(self): fake_resp = Mock() fake_resp.close = Mock()