From 6d4015c5d9f5ddeb60d162d385579176a44d8be3 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 10 Nov 2008 20:46:44 +0000 Subject: - 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. --- repoze/bfg/traversal.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'repoze/bfg/traversal.py') 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 + -- cgit v1.2.3