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