Skip to content

Commit

Permalink
[fc] Repository: plone.restapi
Browse files Browse the repository at this point in the history
Branch: refs/heads/main
Date: 2024-10-02T14:00:40-07:00
Author: Faakhir Zahid (Faakhir30) <110815427+Faakhir30@users.noreply.github.com>
Commit: plone/plone.restapi@f68fab7

Fix invalid values in RelationListFieldSerializer. (#1818)

* Fix invalid values in serializer.

* Add test to check deleted relations

* use to_id attribute to check content's existance.

Files changed:
A news/1818.bugfix
M src/plone/restapi/serializer/relationfield.py
M src/plone/restapi/tests/test_dxcontent_serializer.py
  • Loading branch information
davisagli committed Oct 2, 2024
1 parent 1f6c8cc commit fd9177c
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions last_commit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,22 @@ Repository: plone.restapi


Branch: refs/heads/main
Date: 2024-10-02T09:01:47-07:00
Author: Steve Piercy (stevepiercy) <web@stevepiercy.com>
Commit: https://github.com/plone/plone.restapi/commit/6e5e669ca11585ed69a5a02cd00175dfb5a73b46
Date: 2024-10-02T14:00:40-07:00
Author: Faakhir Zahid (Faakhir30) <110815427+Faakhir30@users.noreply.github.com>
Commit: https://github.com/plone/plone.restapi/commit/f68fab7ea3209a096423d8567fa7f70a93786c7a

Fix spelling of prerequisites (#1822)
Fix invalid values in RelationListFieldSerializer. (#1818)

* Fix spelling of prerequisites
* Fix invalid values in serializer.

* News
* Add test to check deleted relations

* use to_id attribute to check content's existance.

Files changed:
A news/1822.documentation
M docs/source/contributing/index.md
A news/1818.bugfix
M src/plone/restapi/serializer/relationfield.py
M src/plone/restapi/tests/test_dxcontent_serializer.py

b'diff --git a/docs/source/contributing/index.md b/docs/source/contributing/index.md\nindex 1c0c9ac61..f442e7130 100644\n--- a/docs/source/contributing/index.md\n+++ b/docs/source/contributing/index.md\n@@ -13,9 +13,9 @@ This section describes how to contribute to the `plone.restapi` project.\n It extends {doc}`plone:contributing/index`.\n \n \n-## Pre-requisites\n+## Prerequisites\n \n-Prepare your system by installing {ref}`plone:plone-pre-requisites-label`.\n+Prepare your system by installing {ref}`plone:plone-prerequisites-label`.\n \n \n ## Set up development environment\ndiff --git a/news/1822.documentation b/news/1822.documentation\nnew file mode 100644\nindex 000000000..c37ab9322\n--- /dev/null\n+++ b/news/1822.documentation\n@@ -0,0 +1 @@\n+Fixed spelling of prerequisites. @stevepiercy\n'
b'diff --git a/news/1818.bugfix b/news/1818.bugfix\nnew file mode 100644\nindex 000000000..54260238e\n--- /dev/null\n+++ b/news/1818.bugfix\n@@ -0,0 +1 @@\n+Fix response of `RelationListFieldSerializer` by filtering out invalid items. @Faakhir30\ndiff --git a/src/plone/restapi/serializer/relationfield.py b/src/plone/restapi/serializer/relationfield.py\nindex 28483ce42..d54cadb9d 100644\n--- a/src/plone/restapi/serializer/relationfield.py\n+++ b/src/plone/restapi/serializer/relationfield.py\n@@ -33,4 +33,16 @@ class RelationChoiceFieldSerializer(DefaultFieldSerializer):\n @adapter(IRelationList, IDexterityContent, Interface)\n @implementer(IFieldSerializer)\n class RelationListFieldSerializer(DefaultFieldSerializer):\n- pass\n+ def get_value(self, default=[]):\n+ """Return field value reduced to list of non-broken Relationvalues.\n+\n+ Args:\n+ default (list, optional): Default field value. Defaults to empty list.\n+\n+ Returns:\n+ list: List of RelationValues\n+ """\n+ value = super().get_value()\n+ if not value:\n+ return []\n+ return [el for el in value if el.to_id]\ndiff --git a/src/plone/restapi/tests/test_dxcontent_serializer.py b/src/plone/restapi/tests/test_dxcontent_serializer.py\nindex 6fd514956..567aa01e6 100644\n--- a/src/plone/restapi/tests/test_dxcontent_serializer.py\n+++ b/src/plone/restapi/tests/test_dxcontent_serializer.py\n@@ -27,6 +27,10 @@\n from zope.component import provideAdapter\n from zope.component import queryUtility\n from zope.interface import Interface\n+from z3c.relationfield import RelationValue\n+from z3c.relationfield.event import _setRelation\n+from zope.component import getUtility\n+from zope.intid.interfaces import IIntIds\n from zope.publisher.interfaces.browser import IBrowserRequest\n from importlib import import_module\n \n@@ -191,6 +195,30 @@ def test_serializer_includes_expansion(self):\n "foo",\n )\n \n+ def test_serializer_excludes_deleted_relations(self):\n+\n+ intids = getUtility(IIntIds)\n+ self.portal.invokeFactory(\n+ "DXTestDocument",\n+ id="doc2",\n+ )\n+ rel1 = RelationValue(intids.getId(self.portal.doc1))\n+ rel2 = RelationValue(intids.getId(self.portal.doc2))\n+ self.portal.doc1.test_relationlist_field = [\n+ rel1,\n+ rel2,\n+ ]\n+ _setRelation(self.portal.doc1, "test_relationlist_field", rel1)\n+ _setRelation(self.portal.doc1, "test_relationlist_field", rel2)\n+ # delete doc2 to make sure we have a None value in the relation list\n+ self.portal.manage_delObjects(["doc2"])\n+\n+ obj = self.serialize()\n+ self.assertEqual(1, len(obj["test_relationlist_field"]))\n+ self.assertEqual(\n+ "http://nohost/plone/doc1", obj["test_relationlist_field"][0]["@id"]\n+ )\n+\n def test_get_is_folderish(self):\n obj = self.serialize()\n self.assertIn("is_folderish", obj)\n'

0 comments on commit fd9177c

Please sign in to comment.