sdk-codegen
sdk-codegen copied to clipboard
`cattrs` v23.2.x causes `.update_dashboard_element()` instance function to fail
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.