@@ -102,15 +102,15 @@ def unmarshal_event(self, data: str, response_type):
102102 reason = "{}: {}" .format (obj ['reason' ], obj ['message' ])
103103 raise client .exceptions .ApiException (status = obj ['code' ], reason = reason )
104104
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-
113105 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+
114114 # decode and save resource_version to continue watching
115115 if hasattr (js ['object' ], 'metadata' ):
116116 self .resource_version = js ['object' ].metadata .resource_version
@@ -123,7 +123,14 @@ def unmarshal_event(self, data: str, response_type):
123123 self .resource_version = js ['object' ]['metadata' ]['resourceVersion' ]
124124
125125 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 ))
127134
128135 return js
129136
0 commit comments