diff options
author | Leif Johansson <leifj@sunet.se> | 2011-02-24 11:52:05 +0100 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2011-02-24 11:52:05 +0100 |
commit | 5ba48b3b2536d29c3455dba7ce0126ffc9b2bcc8 (patch) | |
tree | a7166215a3d4b8c107d55330bec5c3895e731973 /coip/apps | |
parent | cb285b65f5fc8c09b38f7166ee678303e94e2101 (diff) |
try to produce restful URLs always
Diffstat (limited to 'coip/apps')
-rw-r--r-- | coip/apps/name/models.py | 29 | ||||
-rw-r--r-- | coip/apps/name/views.py | 2 |
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}} |