From 2217a972f29896cf60c1b104d996b112a64dfc4d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste <bleme@pm.me> Date: Tue, 12 Feb 2019 15:28:41 +0100 Subject: [PATCH] fix: add new nested object with @graph representation --- djangoldp/serializers.py | 18 ++++++++++++++---- djangoldp/tests/tests_update.py | 22 ++++++++++++---------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index 70dc8ac7..857d5f1a 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -1,7 +1,7 @@ from urllib import parse from django.core.exceptions import ImproperlyConfigured -from django.core.urlresolvers import get_resolver, resolve, get_script_prefix +from django.core.urlresolvers import get_resolver, resolve, get_script_prefix, Resolver404 from django.utils.datastructures import MultiValueDictKeyError from django.utils.encoding import uri_to_iri from guardian.shortcuts import get_perms @@ -44,9 +44,16 @@ class LDListMixin: except KeyError: pass + if isinstance(list, dict): + list = [list] + ret=[] for item in list: - fullItem = next(filter(lambda o: item['@id'] == o['@id'], object_list)) + fullItem=None + try: + fullItem = next(filter(lambda o: item['@id'] == o['@id'], object_list)) + except StopIteration: + pass if fullItem is None: ret.append(item) else: @@ -214,8 +221,11 @@ class LDPSerializer(HyperlinkedModelSerializer): if uri.startswith(prefix): uri = '/' + uri[len(prefix):] - match = resolve(uri_to_iri(uri)) - value['pk'] = match.kwargs['pk'] + try: + match = resolve(uri_to_iri(uri)) + value['pk'] = match.kwargs['pk'] + except Resolver404: + pass return value diff --git a/djangoldp/tests/tests_update.py b/djangoldp/tests/tests_update.py index 7e9e6815..e81a4eaf 100644 --- a/djangoldp/tests/tests_update.py +++ b/djangoldp/tests/tests_update.py @@ -33,7 +33,7 @@ class Serializer(TestCase): self.assertEquals(result.title, "job test updated") self.assertIs(result.skills.count(), 3) - skills = result.skills.all().order_by('title'); + skills = result.skills.all().order_by('title') self.assertEquals(skills[0].title, "new skill") # new skill self.assertEquals(skills[1].title, "skill1") # no change self.assertEquals(skills[2].title, "skill2 UP") # title updated @@ -51,13 +51,13 @@ class Serializer(TestCase): "ldp:contains": [ {"@id": "https://happy-dev.fr/skills/{}/".format(skill1.pk)}, {"@id": "https://happy-dev.fr/skills/{}/".format(skill2.pk)}, - # {"@id": "_.123"}, + {"@id": "_.123"}, ]} }, - # { - # "@id": "_.123", - # "title": "new skill" - # }, + { + "@id": "_.123", + "title": "new skill" + }, { "@id": "https://happy-dev.fr/skills/{}/".format(skill1.pk), }, @@ -75,8 +75,10 @@ class Serializer(TestCase): serializer.is_valid() result = serializer.save() + skills = result.skills.all().order_by('title') + self.assertEquals(result.title, "job test updated") - self.assertIs(result.skills.count(), 2) - #self.assertEquals(result.skills[0].title, "new skill") # new skill - self.assertEquals(result.skills.all()[0].title, "skill1") # no change - self.assertEquals(result.skills.all()[1].title, "skill2 UP") # title updated + self.assertIs(result.skills.count(), 3) + self.assertEquals(skills[0].title, "new skill") # new skill + self.assertEquals(skills[1].title, "skill1") # no change + self.assertEquals(skills[2].title, "skill2 UP") # title updated -- GitLab