From 9ed012911dba50263c4b57fa50d433e8dffe02c3 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste <bleme@pm.me> Date: Tue, 19 Feb 2019 16:10:03 +0100 Subject: [PATCH] feature: add LDPModel class to manage instance path resolution --- djangoldp/models.py | 35 +++++++++++++++++++++++++------ djangoldp/resolver.py | 17 --------------- djangoldp/tests/tests_resolver.py | 20 +++++++----------- 3 files changed, 36 insertions(+), 36 deletions(-) delete mode 100644 djangoldp/resolver.py diff --git a/djangoldp/models.py b/djangoldp/models.py index bcb62f61..abd9ea79 100644 --- a/djangoldp/models.py +++ b/djangoldp/models.py @@ -5,19 +5,41 @@ from django.db import models class LDPModel(models.Model): ldp_path = None - def full_path(self): - return "{}/{}".format(self.container_path(), self.pk) + def get_resource_path(self): + return LDPModel.resource_path(self) - def container_path(self): - return self.ldp_path + def get_container_path(self): + return LDPModel.container_path(self) + + @classmethod + def resource_path(cls, instance): + return "{}{}".format(LDPModel.container_path(instance), instance.pk) + + @classmethod + def container_path(cls, instance): + if isinstance(instance, cls): + path = instance.ldp_path + else: + from django.urls import get_resolver + view_name = '{}-list'.format(instance._meta.object_name.lower()) + path = '/{}'.format(get_resolver().reverse_dict[view_name][0][0][0], instance.pk) + + if not path.startswith("/"): + path = "/{}".format(path) + + if not path.endswith("/"): + path = "{}/".format(path) + + return path class Meta: abstract = True + class LDPSource(models.Model): container = models.URLField() federation = models.CharField(max_length=255) - + class Meta: rdf_type = 'sib:source' ordering = ('federation',) @@ -25,7 +47,7 @@ class LDPSource(models.Model): ('view_source', 'acl:Read'), ('control_source', 'acl:Control'), ) - + def __str__(self): return "{}: {}".format(self.federation, self.container) @@ -37,6 +59,7 @@ class LDNotification(models.Model): type = models.CharField(max_length=255) summary = models.TextField() date = models.DateTimeField(auto_now_add=True) + class Meta: permissions = ( ('view_todo', 'Read'), diff --git a/djangoldp/resolver.py b/djangoldp/resolver.py deleted file mode 100644 index 949ae3f1..00000000 --- a/djangoldp/resolver.py +++ /dev/null @@ -1,17 +0,0 @@ -class LDPResolver: - - @classmethod - def resource_url(cls, dummy): - pass - - @classmethod - def container_url(cls, dummy): - pass - - @classmethod - def resource_path(cls, dummy): - pass - - @classmethod - def container_path(cls, dummy): - pass diff --git a/djangoldp/tests/tests_resolver.py b/djangoldp/tests/tests_resolver.py index 55818f6d..96b1be0f 100644 --- a/djangoldp/tests/tests_resolver.py +++ b/djangoldp/tests/tests_resolver.py @@ -1,6 +1,6 @@ from django.test import TestCase -from djangoldp.resolver import LDPResolver +from djangoldp.models import LDPModel from djangoldp.tests.models import Dummy, LDPDummy @@ -8,18 +8,12 @@ class UrlUtils(TestCase): def test_class_not_inheriting_ldp_model(self): dummy = Dummy.objects.create(some="text") - self.assertEquals("http://localhost/dummys/{}".format(dummy.pk), LDPResolver.resource_url(dummy)) - self.assertEquals("/dummys/{}".format(dummy.pk), LDPResolver.resource_path(dummy)) - self.assertEquals("http://localhost/dummys", LDPResolver.container_url(dummy)) - self.assertEquals("/dummys", LDPResolver.container_path(dummy)) + self.assertEquals("/dummys/", LDPModel.container_path(dummy)) + self.assertEquals("/dummys/{}".format(dummy.pk), LDPModel.resource_path(dummy)) def test_class_inheriting_ldp_model(self): dummy = LDPDummy.objects.create(some="text") - self.assertEquals("http://localhost/ldp-dummys/{}".format(dummy.pk), LDPResolver.resource_url(dummy)) - self.assertEquals("/ldp-dummys/{}".format(dummy.pk), LDPResolver.resource_path(dummy)) - self.assertEquals("http://localhost/ldp-dummys/{}".format(dummy.pk), dummy.resource_url()) - self.assertEquals("/ldp-dummys/{}".format(dummy.pk), dummy.resource_path()) - self.assertEquals("http://localhost/ldp-dummys", LDPResolver.container_url(dummy)) - self.assertEquals("/ldp-dummys", LDPResolver.container_path(dummy)) - self.assertEquals("http://localhost/dummys/", dummy.container_url()) - self.assertEquals("/ldp-dummys", dummy.container_path()) + self.assertEquals("/ldp-dummys/", dummy.get_container_path()) + self.assertEquals("/ldp-dummys/{}".format(dummy.pk), dummy.get_resource_path()) + self.assertEquals("/ldp-dummys/", LDPModel.container_path(dummy)) + self.assertEquals("/ldp-dummys/{}".format(dummy.pk), LDPModel.resource_path(dummy)) -- GitLab