summaryrefslogtreecommitdiff
path: root/repoze/bfg/traversal.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-11-10 20:46:44 +0000
committerChris McDonough <chrism@agendaless.com>2008-11-10 20:46:44 +0000
commit6d4015c5d9f5ddeb60d162d385579176a44d8be3 (patch)
treeb2e51684e6bcdeff34b24918e067f7e7e118ed81 /repoze/bfg/traversal.py
parente3e6ac2797146dcd9d3176906aafac62fb9d92e9 (diff)
downloadpyramid-6d4015c5d9f5ddeb60d162d385579176a44d8be3.tar.gz
pyramid-6d4015c5d9f5ddeb60d162d385579176a44d8be3.tar.bz2
pyramid-6d4015c5d9f5ddeb60d162d385579176a44d8be3.zip
- The ``model_path`` and ``model_url`` traversal APIs returned the
wrong value for the root object (e.g. ``model_path`` returned ``''`` for the root object, while it should have been returning ``'/'``). Prep for 0.4.6.
Diffstat (limited to 'repoze/bfg/traversal.py')
-rw-r--r--repoze/bfg/traversal.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index f7647879b..29677fe99 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -103,6 +103,14 @@ def find_interface(model, interface):
if interface.providedBy(location):
return location
+def _pjoin(path):
+ path = list(path)
+ path.insert(0, '')
+ result = '/'.join(path)
+ if not result:
+ result = '/'
+ return result
+
def model_url(model, request, *elements):
""" Return the absolute URL of the model object based on the
``wsgi.url_scheme``, ``HTTP_HOST`` or ``SERVER_NAME`` in the
@@ -117,7 +125,7 @@ def model_url(model, request, *elements):
rpath.append(urllib.quote(location.__name__))
path = list(reversed(rpath))
path.extend(elements)
- path = '/'.join(path)
+ path = _pjoin(path)
return urlparse.urljoin(request.application_url, path)
def model_path(model, *elements):
@@ -132,5 +140,6 @@ def model_path(model, *elements):
rpath.append(location.__name__)
path = list(reversed(rpath))
path.extend(elements)
- path.insert(0, '')
- return '/'.join(path)
+ path = _pjoin(path)
+ return path
+