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