diff --git a/src/agent_toolkit/forestadmin/agent_toolkit/services/serializers/json_api_deserializer.py b/src/agent_toolkit/forestadmin/agent_toolkit/services/serializers/json_api_deserializer.py index 9d574feda..f56a897a7 100644 --- a/src/agent_toolkit/forestadmin/agent_toolkit/services/serializers/json_api_deserializer.py +++ b/src/agent_toolkit/forestadmin/agent_toolkit/services/serializers/json_api_deserializer.py @@ -29,7 +29,7 @@ def deserialize(self, data: DumpedResult, collection: Collection) -> RecordsData ret = {} data["data"] = cast(Data, data["data"]) - for key, value in data["data"]["attributes"].items(): + for key, value in data["data"].get("attributes", {}).items(): if key not in collection.schema["fields"]: raise JsonApiDeserializerException(f"Field {key} doesn't exists in collection {collection.name}.") ret[key] = self._deserialize_value(value, cast(Column, collection.schema["fields"][key])) diff --git a/src/agent_toolkit/tests/services/serializers/test_jsonapi.py b/src/agent_toolkit/tests/services/serializers/test_jsonapi.py index 3343ea7ed..221ad3815 100644 --- a/src/agent_toolkit/tests/services/serializers/test_jsonapi.py +++ b/src/agent_toolkit/tests/services/serializers/test_jsonapi.py @@ -754,6 +754,24 @@ def test_should_correctly_load_one_to_one_relation(self): }, ) + def test_should_work_if_attribute_not_present(self): + deserializer = JsonApiDeserializer(self.datasource) + + request_body = { + "data": { + "id": "43661dae-97c3-4ea9-bd43-a6d8ac3f4ca7", + "type": "Orders", + "relationships": {"customer": {"data": {"id": "12", "type": "Persons"}}}, + } + } + data = deserializer.deserialize(request_body, self.collection_order) + self.assertEqual( + data, + { + "customer": 12, + }, + ) + class TestJsonApiSerializer(TestJsonApi): @classmethod