summaryrefslogtreecommitdiff
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
parentcb285b65f5fc8c09b38f7166ee678303e94e2101 (diff)
try to produce restful URLs always
-rw-r--r--coip/apps/name/models.py29
-rw-r--r--coip/apps/name/views.py2
-rw-r--r--coip/urls.py2
-rw-r--r--templates/base.html2
-rw-r--r--templates/tree.html4
5 files changed, 31 insertions, 8 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}}
diff --git a/coip/urls.py b/coip/urls.py
index a16e935..663c06a 100644
--- a/coip/urls.py
+++ b/coip/urls.py
@@ -28,7 +28,7 @@ urlpatterns = patterns('',
(r'^user/home$', 'coip.apps.userprofile.views.home'),
# Names
(r'^name/id/(?P<id>[0-9]+)$', 'coip.apps.name.views.show_by_id'),
- (r'^name/(?P<name>[^0-9\/]+)$', 'coip.apps.name.views.show_by_name'),
+ (r'^name/(?P<name>.+)$', 'coip.apps.name.views.show_by_name'),
(r'^name$', 'coip.apps.name.views.show_root'),
(r'^name/(?P<id>[0-9]+)/edit$', 'coip.apps.name.views.edit'),
(r'^name/(?P<id>[0-9]+)/delete$', 'coip.apps.name.views.delete'),
diff --git a/templates/base.html b/templates/base.html
index a212afb..742e5ab 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -63,7 +63,7 @@
{% if name %}
<div style="float: left;" class="navlist toolbar">
<ul>
- <li class="button"><a class="tip" title="This is the full name of the group. This is the name that will be exposed to applications." href="/name/id/{{name.id}}">{{ name }}</a></li>
+ <li class="button"><a class="tip" title="This is the full name of the group. This is the name that will be exposed to applications." href="{{name.url}}">{{ name }}</a></li>
</ul>
</div>
{% endif %}
diff --git a/templates/tree.html b/templates/tree.html
index f8d83e6..2a5045b 100644
--- a/templates/tree.html
+++ b/templates/tree.html
@@ -34,7 +34,7 @@ $(function() {
<div id="tree">
{% if name and render.up %}
{% if name.parent %}
- <a href="/name/id/{{name.parent.id}}">.. (up one level)</a>
+ <a href="{{name.parent.url}}">.. (up one level)</a>
{% else %}
<a href="/name">.. (up one level)</a>
{% endif %}
@@ -62,7 +62,7 @@ $(function() {
</div>
<div id="right">
<div id="headline">
-<a style="text-decoration: none" href="{% if name %}/name/id/{{name.id}}{% else %}/{% endif %}">{% if name %}{{name.shortname}}{% else %}{% endif %}</a>
+<a style="text-decoration: none" href="{% if name %}{{name.url}}{% else %}/{% endif %}">{% if name %}{{name.shortname}}{% else %}{% endif %}</a>
</div>
{% block content %}{% endblock %}
</div>