From f46a399de3f5637937cb3f164959681e6411c7a0 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste <bleme@pm.me>
Date: Thu, 5 Sep 2019 11:14:09 +0200
Subject: [PATCH] update: fix @id on containers

---
 djangoldp/models.py               |  2 ++
 djangoldp/serializers.py          | 12 +++++++++---
 djangoldp/tests/djangoldp_urls.py |  3 ++-
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/djangoldp/models.py b/djangoldp/models.py
index 778c5e7d..716688ea 100644
--- a/djangoldp/models.py
+++ b/djangoldp/models.py
@@ -141,6 +141,8 @@ class LDPSource(Model):
     class Meta:
         rdf_type = 'sib:source'
         ordering = ('federation',)
+        container_path = 'sources'
+        lookup_field = 'federation'
         permissions = (
             ('view_source', 'acl:Read'),
             ('control_source', 'acl:Control'),
diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index e88c4bfb..c55ad669 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -69,6 +69,8 @@ class LDListMixin:
             container_permissions.extend(
                 Model.get_permissions(parent_model, self.context['request'].user,
                                       ['view']))
+        if self.id == '':
+            self.id = '{}{}'.format(settings.SITE_URL, Model.resource(parent_model))
         return {'@id': self.id,
                 '@type': 'ldp:Container',
                 'ldp:contains': super().to_representation(filtered_values),
@@ -252,6 +254,8 @@ class LDPSerializer(HyperlinkedModelSerializer):
         for field in data:
             if isinstance(data[field], dict) and '@id' in data[field]:
                 data[field]['@id'] = data[field]['@id'].format(Model.container_id(obj), str(getattr(obj, slug_field)))
+        if not '@id' in data:
+            data['@id'] = '{}{}'.format(settings.SITE_URL, Model.resource(obj))
         rdf_type = Model.get_meta(obj, 'rdf_type', None)
         rdf_context = Model.get_meta(obj, 'rdf_context', None)
         if rdf_type is not None:
@@ -274,7 +278,7 @@ class LDPSerializer(HyperlinkedModelSerializer):
                 if isinstance(instance, QuerySet) or isinstance(instance, Model):
                     try:
                         model_class = instance.model
-                    except :
+                    except:
                         model_class = instance.__class__
                     serializer_generator = LDPViewSet(model=model_class,
                                                       lookup_field=Model.get_meta(model_class, 'lookup_field', 'pk'),
@@ -294,9 +298,11 @@ class LDPSerializer(HyperlinkedModelSerializer):
 
                         return {'@id': '{}{}{}/'.format(settings.SITE_URL, '{}{}/', self.source),
                                 '@type': 'ldp:Container',
-                                'ldp:contains': [serializer.to_representation(item) if item is not None else None for item
+                                'ldp:contains': [serializer.to_representation(item) if item is not None else None for
+                                                 item
                                                  in data],
-                                'permissions': Model.get_permissions(self.parent.Meta.model, self.context['request'].user,
+                                'permissions': Model.get_permissions(self.parent.Meta.model,
+                                                                     self.context['request'].user,
                                                                      ['view', 'add'])
                                 }
                     else:
diff --git a/djangoldp/tests/djangoldp_urls.py b/djangoldp/tests/djangoldp_urls.py
index 9bb8ba05..228d92ae 100644
--- a/djangoldp/tests/djangoldp_urls.py
+++ b/djangoldp/tests/djangoldp_urls.py
@@ -1,12 +1,13 @@
 from django.conf import settings
 from django.conf.urls import url, include
 
-from djangoldp.tests.models import Skill, JobOffer, Message, Conversation, Dummy
+from djangoldp.tests.models import Skill, JobOffer, Message, Conversation, Dummy, Task
 from djangoldp.views import LDPViewSet
 
 urlpatterns = [
     url(r'^messages/', LDPViewSet.urls(model=Message, permission_classes=[], fields=["@id", "text", "conversation"], nested_fields=['conversation'])),
     url(r'^conversations/', LDPViewSet.urls(model=Conversation, nested_fields=["message_set"], permission_classes=())),
+    url(r'^tasks/', LDPViewSet.urls(model=Task, permission_classes=())),
     url(r'^users/', LDPViewSet.urls(model=settings.AUTH_USER_MODEL, permission_classes=[])),
     url(r'^dummys/', LDPViewSet.urls(model=Dummy, permission_classes=[], lookup_field='slug',)),
 ]
-- 
GitLab