summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt9
-rw-r--r--docs/conf.py4
-rw-r--r--repoze/bfg/tests/test_traversal.py21
-rw-r--r--repoze/bfg/traversal.py15
-rw-r--r--setup.py2
5 files changed, 43 insertions, 8 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 72b1b2699..b56c86879 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,12 @@
+0.4.6 (11/10/2008)
+
+ Bug Fixes
+
+ - 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
+ ``'/'``).
+
0.4.5 (11/9/2008)
Features
diff --git a/docs/conf.py b/docs/conf.py
index 97da9648b..5a109946f 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -51,9 +51,9 @@ copyright = '2008, Agendaless Consulting'
# other places throughout the built documents.
#
# The short X.Y version.
-version = '0.4.5'
+version = '0.4.6'
# The full version, including alpha/beta/rc tags.
-release = '0.4.5'
+release = '0.4.6'
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index 4dced41ca..be75ed646 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -189,6 +189,16 @@ class ModelURLTests(unittest.TestCase):
result,
'http://example.com:5432/foo%20/bar/baz/this/theotherthing/that')
+ def test_root(self):
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ model_url = self._getFUT()
+ request = DummyRequest()
+ result = model_url(root, request)
+ self.assertEqual(result, 'http://example.com:5432/')
+
+
class FindRootTests(unittest.TestCase):
def _getFUT(self):
from repoze.bfg.traversal import find_root
@@ -279,12 +289,19 @@ class ModelPathTests(unittest.TestCase):
bar.__name__ = 'bar'
baz.__parent__ = bar
baz.__name__ = 'baz'
- request = DummyRequest()
model_path = self._getFUT()
- request = DummyRequest()
result = model_path(baz, 'this/theotherthing', 'that')
self.assertEqual(result, '/foo /bar/baz/this/theotherthing/that')
+ def test_root(self):
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ model_path = self._getFUT()
+ request = DummyRequest()
+ result = model_path(root)
+ self.assertEqual(result, '/')
+
def make_traverser(*args):
class DummyTraverser(object):
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
+
diff --git a/setup.py b/setup.py
index 0c35fa1f4..5a9a0760f 100644
--- a/setup.py
+++ b/setup.py
@@ -12,7 +12,7 @@
#
##############################################################################
-__version__ = '0.4.5'
+__version__ = '0.4.6'
import os