@@ -102,15 +102,15 @@ def unmarshal_event(self, data: str, response_type):
102
102
reason = "{}: {}" .format (obj ['reason' ], obj ['message' ])
103
103
raise client .exceptions .ApiException (status = obj ['code' ], reason = reason )
104
104
105
- # If possible, compile the JSON response into a Python native response
106
- # type, eg `V1Namespace` or `V1Pod`,`ExtensionsV1beta1Deployment`, ...
107
- if response_type :
108
- js ['object' ] = self ._api_client .deserialize (
109
- response = SimpleNamespace (data = json .dumps (js ['raw_object' ])),
110
- response_type = response_type
111
- )
112
-
113
105
if js ['type' ].lower () != 'bookmark' :
106
+ # If possible, compile the JSON response into a Python native response
107
+ # type, eg `V1Namespace` or `V1Pod`,`ExtensionsV1beta1Deployment`, ...
108
+ if response_type :
109
+ js ['object' ] = self ._api_client .deserialize (
110
+ response = SimpleNamespace (data = json .dumps (js ['raw_object' ])),
111
+ response_type = response_type
112
+ )
113
+
114
114
# decode and save resource_version to continue watching
115
115
if hasattr (js ['object' ], 'metadata' ):
116
116
self .resource_version = js ['object' ].metadata .resource_version
@@ -123,7 +123,14 @@ def unmarshal_event(self, data: str, response_type):
123
123
self .resource_version = js ['object' ]['metadata' ]['resourceVersion' ]
124
124
125
125
elif js ['type' ].lower () == 'bookmark' :
126
- self .resource_version = js ['object' ]['metadata' ]['resourceVersion' ]
126
+ if (isinstance (js ['raw_object' ], dict )
127
+ and 'metadata' in js ['raw_object' ]
128
+ and 'resourceVersion' in js ['raw_object' ]['metadata' ]):
129
+ self .resource_version = js ['raw_object' ]['metadata' ]['resourceVersion' ]
130
+ else :
131
+ raise Exception (("Malformed JSON response for bookmark event, "
132
+ "'metadata' or 'resourceVersion' field is missing. "
133
+ "JSON: {}" ).format (js ))
127
134
128
135
return js
129
136
0 commit comments