diff --git a/djangoldp/migrations/0002_auto_20190905_1542.py b/djangoldp/migrations/0002_auto_20190905_1542.py new file mode 100644 index 0000000000000000000000000000000000000000..ff3b2dc14e84c5e2037fbd444450f3f668d86c29 --- /dev/null +++ b/djangoldp/migrations/0002_auto_20190905_1542.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2019-09-05 15:42 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('djangoldp', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='ldpsource', + name='container', + ), + migrations.AlterField( + model_name='ldpsource', + name='id', + field=models.URLField(primary_key=True, serialize=False), + ), + ] diff --git a/djangoldp/models.py b/djangoldp/models.py index 716688eaf13cc9a5bf05a456fa5abf8e142ee1ec..73c1c17d9a7f9d23061cf51ae222e1d9006b3ab0 100644 --- a/djangoldp/models.py +++ b/djangoldp/models.py @@ -135,18 +135,18 @@ class Model(models.Model): class LDPSource(Model): - container = models.URLField() + id = models.URLField(primary_key=True) federation = models.CharField(max_length=255) class Meta: - rdf_type = 'sib:source' + rdf_type = 'ldp:Container' ordering = ('federation',) container_path = 'sources' - lookup_field = 'federation' + lookup_field = 'id' permissions = ( ('view_source', 'acl:Read'), ('control_source', 'acl:Control'), ) def __str__(self): - return "{}: {}".format(self.federation, self.container) + return "{}: {}".format(self.federation, self.id) diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index c55ad66948dd734271b6454e5443d25e82a5be83..28d1d9b230206945905c8e1e064f96ea25b826a3 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -254,8 +254,10 @@ 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: + if not ('@id' in data or 'id' in data): data['@id'] = '{}{}'.format(settings.SITE_URL, Model.resource(obj)) + if 'id' in data: + data['@id'] = data.pop('id') rdf_type = Model.get_meta(obj, 'rdf_type', None) rdf_context = Model.get_meta(obj, 'rdf_context', None) if rdf_type is not None: diff --git a/djangoldp/tests/tests_sources.py b/djangoldp/tests/tests_sources.py index 9720db2a8b8886a4fa41c201c879e9dc45abccb8..a68327f56c190503210d48870be5a95f1bb3c786 100644 --- a/djangoldp/tests/tests_sources.py +++ b/djangoldp/tests/tests_sources.py @@ -13,6 +13,6 @@ class TestSource(APITestCase): pass def test_get_resource(self): - source = LDPSource.objects.create(federation="source_name", container="http://bar.foo/") + source = LDPSource.objects.create(federation="source_name", id="http://bar.foo/") response = self.client.get('/sources/{}/'.format(source.federation), content_type='application/ld+json') self.assertEqual(response.status_code, 200) diff --git a/djangoldp/urls.py b/djangoldp/urls.py index 4fd8d7f4b758d2278e4cdfedce953803f8a7b40e..f92a2ab43590fc8c27da7ae3b5e387e36cad273e 100644 --- a/djangoldp/urls.py +++ b/djangoldp/urls.py @@ -17,7 +17,7 @@ def __clean_path(path): urlpatterns = [ - url(r'^sources/(?P<federation>\w+)/', LDPSourceViewSet.urls(model=LDPSource, fields=['federation', 'container'], + url(r'^sources/(?P<federation>\w+)/', LDPSourceViewSet.urls(model=LDPSource, fields=['federation', 'id'], permission_classes=[LDPPermissions], )), url(r'^\.well-known/webfinger/?$', WebFingerView.as_view()), ]