Skip to content
Snippets Groups Projects
Commit 9ed01291 authored by Jean-Baptiste's avatar Jean-Baptiste
Browse files

feature: add LDPModel class to manage instance path resolution

parent dd4447d7
No related branches found
No related tags found
No related merge requests found
......@@ -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'),
......
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
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))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment