diff --git a/contentful/content_type_field_types.py b/contentful/content_type_field_types.py index 463fd90..01198c9 100644 --- a/contentful/content_type_field_types.py +++ b/contentful/content_type_field_types.py @@ -217,7 +217,7 @@ def _coerce_block(self, value, includes=None, errors=None, resources=None, defau for node_index, coerced_node in coerced_nodes.items(): value['content'][node_index] = coerced_node - for node_index in invalid_nodes: + for node_index in reversed(invalid_nodes): del value['content'][node_index] return value diff --git a/tests/content_type_field_types_test.py b/tests/content_type_field_types_test.py index dbf7e9c..c5ff4c4 100644 --- a/tests/content_type_field_types_test.py +++ b/tests/content_type_field_types_test.py @@ -203,3 +203,41 @@ def test_rich_text_field(self): coerced = rt_field.coerce(document) self.assertTrue(isinstance(coerced['content'][0]['data']['target'], Link)) + + # with 2 embedded entries that have errors, both will be removed + # without a list index out of range error + document = { + "nodeType": "document", + "content": [{ + "nodeType": "embedded-entry-block", + "nodeClass": "block", + "data": { + "target": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4JJ21pcEI0QSsea20g6K6K" + } + } + } + }, { + "nodeType": "embedded-entry-block", + "nodeClass": "block", + "data": { + "target": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4JJ21pcEI0QSsea20g6K6K" + } + } + } + }] + } + + errors = [{"details": {"id": "4JJ21pcEI0QSsea20g6K6K"}}] + + self.assertEqual(rt_field.coerce(document, errors=errors), { + "nodeType": "document", + "content": [] + })