summaryrefslogtreecommitdiff
path: root/coip/apps
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-02-24 11:52:05 +0100
committerLeif Johansson <leifj@sunet.se>2011-02-24 11:52:05 +0100
commit5ba48b3b2536d29c3455dba7ce0126ffc9b2bcc8 (patch)
treea7166215a3d4b8c107d55330bec5c3895e731973 /coip/apps
parentcb285b65f5fc8c09b38f7166ee678303e94e2101 (diff)
try to produce restful URLs always
Diffstat (limited to 'coip/apps')
-rw-r--r--coip/apps/name/models.py29
-rw-r--r--coip/apps/name/views.py2
2 files changed, 27 insertions, 4 deletions
diff --git a/coip/apps/name/models.py b/coip/apps/name/models.py
index 104c0ef..0450e28 100644
--- a/coip/apps/name/models.py
+++ b/coip/apps/name/models.py
@@ -10,6 +10,7 @@ from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from django.db.models.signals import pre_save
import logging
+from coip.settings import PREFIX_URL
class Attribute(models.Model):
name = models.CharField(unique=True,max_length=255)
@@ -49,7 +50,7 @@ class Name(models.Model):
def __unicode__(self):
return self.display
- def display_str(self):
+ def display_str_urn(self):
n = self
str = ""
while n:
@@ -67,6 +68,28 @@ class Name(models.Model):
return str
+ def display_str_url(self):
+ n = self
+ str = ""
+ while n:
+ sep = ""
+ av = n.relative_name()
+
+ if n.parent:
+ if not '=' in av:
+ sep = '/'
+ else:
+ sep = ';'
+
+ str = sep+av+str
+ n = n.parent
+
+ return str
+
+ def url(self):
+ return "%s/name/%s" % (PREFIX_URL,self.display_str_url())
+
+
def remove(self,recursive=False):
if recursive:
for c in self.children.all():
@@ -141,7 +164,7 @@ class Name(models.Model):
return filter(lambda s: s.has_permission(user,perm),self.children.all())
def set_display(sender,**kwargs):
- kwargs['instance'].display = kwargs['instance'].display_str()
+ kwargs['instance'].display = kwargs['instance'].display_str_urn()
pre_save.connect(set_display,sender=Name)
@@ -222,7 +245,7 @@ def walkto(root,nameparts,autocreate=False):
return name
def lookup(name,autocreate=False):
- return walkto(None,nameparts=re.compile('[;:]').split(name),autocreate=autocreate)
+ return walkto(None,nameparts=re.compile('[\/;:]').split(name),autocreate=autocreate)
def attribute(a):
Attribute.objects.get_or_create(name=a)
diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py
index 01b2652..9a3ce03 100644
--- a/coip/apps/name/views.py
+++ b/coip/apps/name/views.py
@@ -177,7 +177,7 @@ def show_by_id(request,id=None):
def _tree_node(name,depth):
state = 'closed'
- return {'data': { 'title': name.relative_name(), 'attr': {'href': '/name/id/%d' % name.id} },
+ return {'data': { 'title': name.relative_name(), 'attr': {'href': name.url() } },
'state': state,
'attr': {'id': name.id}}