Chris McDonough
2010-02-06 a9f28d4f1322009f46e821819c389d69f3ae1b0c
- Remove magical feature of ``repoze.bfg.url.model_url`` which
prepended a fully-expanded urldispatch route URL before a the
model's path if it was noticed that the request had matched a route.
This feature was ill-conceived, and didn't work in all scenarios.



3 files modified
67 ■■■■ changed files
CHANGES.txt 8 ●●●●● patch | view | raw | blame | history
repoze/bfg/tests/test_traversal.py 46 ●●●●● patch | view | raw | blame | history
repoze/bfg/traversal.py 13 ●●●●● patch | view | raw | blame | history
CHANGES.txt
@@ -1,6 +1,14 @@
Next release
============
Backwards Incompatibilities
---------------------------
- Remove magical feature of ``repoze.bfg.url.model_url`` which
  prepended a fully-expanded urldispatch route URL before a the
  model's path if it was noticed that the request had matched a route.
  This feature was ill-conceived, and didn't work in all scenarios.
Bug Fixes
---------
repoze/bfg/tests/test_traversal.py
@@ -788,52 +788,6 @@
        result = context_url()
        self.assertEqual(result, 'http://example.com:5432//bar/')
    def test_with_minimized_route(self):
        root = DummyContext()
        root.__name__ = None
        root.__parent__ = None
        one = DummyContext()
        one.__name__ = 'one'
        one.__parent__ = root
        route = DummyRoute()
        route.minimization = True
        request = DummyRequest({'bfg.routes.route':route,
                                'bfg.routes.matchdict':{'a':1}})
        context_url = self._makeOne(one, request)
        result = context_url()
        self.assertEqual(result, 'http://example.com:5432/example/')
        self.assertEqual(route.generate_kw, {'a':1, 'traverse':'/one/'})
    def test_with_non_minimized_route(self):
        root = DummyContext()
        root.__name__ = None
        root.__parent__ = None
        one = DummyContext()
        one.__name__ = 'one'
        one.__parent__ = root
        route = DummyRoute()
        route.minimization = False
        request = DummyRequest({'bfg.routes.route':route,
                                'bfg.routes.matchdict':{'a':1}})
        context_url = self._makeOne(one, request)
        result = context_url()
        self.assertEqual(result, 'http://example.com:5432/example/')
        self.assertEqual(route.generate_kw, {'a':1, 'traverse':'/one/'})
    def test_with_route_generation_fail(self):
        root = DummyContext()
        root.__name__ = None
        root.__parent__ = None
        one = DummyContext()
        one.__name__ = 'one'
        one.__parent__ = root
        route = DummyRoute()
        route.raise_exc = KeyError
        request = DummyRequest({'bfg.routes.route':route,
                                'bfg.routes.matchdict':{'a':1}})
        context_url = self._makeOne(one, request)
        self.assertRaises(KeyError, context_url)
class TestVirtualRoot(unittest.TestCase):
    def setUp(self):
        cleanUp()
repoze/bfg/traversal.py
@@ -628,19 +628,6 @@
            if path.startswith(vroot_path):
                path = path[len(vroot_path):]
        if 'bfg.routes.route' in environ:
            route = environ['bfg.routes.route']
            matchdict = environ['bfg.routes.matchdict'].copy()
            matchdict['traverse'] = path
            try:
                segments = route.generate(matchdict)
            except KeyError, why:
                raise KeyError(
                    "Couldn't generate URL for matchdict %r: %s" %
                    (matchdict, str(why)))
            app_url = request.application_url
            return app_url + segments
        app_url = request.application_url # never ends in a slash
        return app_url + path