sdk-codegen icon indicating copy to clipboard operation
sdk-codegen copied to clipboard

`cattrs` v23.2.x causes `.update_dashboard_element()` instance function to fail

Open sirkozuch opened this issue 1 year ago • 0 comments

With the latest release of cattrs 23.2.x, we have seen that Looker40SDK.update_dashboard_element() has started to fail on JSON serialization error. This is happening if a dashboard element has ResultMakerWithIdVisConfigAndDynamicFields present in its configuration.

The full stack trace is below:

proddeploy_1  |   File "/project/esw_looker_deploy/dashboard.py", line 441, in update_dashboard_element
proddeploy_1  |     new_element = instance.update_dashboard_element(element_id, dashboard_element)
proddeploy_1  |   File "/usr/local/lib/python3.8/site-packages/looker_sdk/sdk/api40/methods.py", line 5038, in update_dashboard_element
proddeploy_1  |     self.patch(
proddeploy_1  |   File "/usr/local/lib/python3.8/site-packages/looker_sdk/rtl/api_methods.py", line 192, in patch
proddeploy_1  |     serialized = self._get_serialized(body)
proddeploy_1  |   File "/usr/local/lib/python3.8/site-packages/looker_sdk/rtl/api_methods.py", line 156, in _get_serialized
proddeploy_1  |     serialized = self.serialize(api_model=body)  # type: ignore
proddeploy_1  |   File "/usr/local/lib/python3.8/site-packages/looker_sdk/rtl/serialize.py", line 81, in serialize
proddeploy_1  |     return json.dumps(data).encode("utf-8")  # type: ignore
proddeploy_1  |   File "/usr/local/lib/python3.8/json/__init__.py", line 231, in dumps
proddeploy_1  |     return _default_encoder.encode(obj)
proddeploy_1  |   File "/usr/local/lib/python3.8/json/encoder.py", line 199, in encode
proddeploy_1  |     chunks = self.iterencode(o, _one_shot=True)
proddeploy_1  |   File "/usr/local/lib/python3.8/json/encoder.py", line 257, in iterencode
proddeploy_1  |     return _iterencode(o, 0)
proddeploy_1  |   File "/usr/local/lib/python3.8/json/encoder.py", line 179, in default
proddeploy_1  |     raise TypeError(f'Object of type {o.__class__.__name__} '
proddeploy_1  | TypeError: Object of type ResultMakerWithIdVisConfigAndDynamicFields is not JSON serializable

The error was replicated on looker-sdk==23.8.1 and looker-sdk==23.16.0 both, on Python 3.8.

The current workaround is to pin to cattrs==22.2.0, after which the error is not encountered anymore.

sirkozuch avatar Nov 29 '23 11:11 sirkozuch