From 1ecdda6b64a498d0c04fb94a0c0ce0ec4d15d06c Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Thu, 11 Jun 2009 04:23:12 +0000 Subject: Microspeedups. --- repoze/bfg/registry.py | 2 +- repoze/bfg/router.py | 2 +- repoze/bfg/tests/test_registry.py | 19 +++++++++++++++++++ repoze/bfg/tests/test_traversal.py | 13 +++++++++++-- repoze/bfg/traversal.py | 10 +++++++--- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/repoze/bfg/registry.py b/repoze/bfg/registry.py index 3827c8376..b2fa67442 100644 --- a/repoze/bfg/registry.py +++ b/repoze/bfg/registry.py @@ -68,7 +68,7 @@ def populateRegistry(registry, filename, package, lock=threading.Lock()): def getSiteManager(context=None): if context is None: - return get_registry() + return manager.get()['registry'] else: try: return IComponentLookup(context) diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index c103d8426..670a6a05c 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -147,7 +147,7 @@ class Router(object): threadlocals['request'] = request registry.has_listeners and registry.notify(NewRequest(request)) - tdict = _traverse(root, environ) + tdict = _traverse(root, environ, registry) if '_deprecation_warning' in tdict: warning = tdict.pop('_deprecation_warning') if not warning in self.traverser_warned: diff --git a/repoze/bfg/tests/test_registry.py b/repoze/bfg/tests/test_registry.py index c2ed82f7e..3ac0dab88 100644 --- a/repoze/bfg/tests/test_registry.py +++ b/repoze/bfg/tests/test_registry.py @@ -83,6 +83,25 @@ class GetSiteManagerTests(unittest.TestCase): from zope.component.interfaces import ComponentLookupError self.assertRaises(ComponentLookupError, self._callFUT, object) +class GetRegistryTests(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _callFUT(self): + from repoze.bfg.registry import get_registry + return get_registry() + + def test_it(self): + from repoze.bfg.threadlocal import manager + try: + manager.push({'registry':123}) + self.assertEqual(self._callFUT(), 123) + finally: + manager.pop() + class TestFakeRegistry(unittest.TestCase): def _getTargetClass(self): from repoze.bfg.registry import FakeRegistryManager diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py index 506a69d17..00b3cc99f 100644 --- a/repoze/bfg/tests/test_traversal.py +++ b/repoze/bfg/tests/test_traversal.py @@ -830,9 +830,9 @@ class UnderTraverseTests(unittest.TestCase): def tearDown(self): cleanUp() - def _callFUT(self, context, environ): + def _callFUT(self, context, environ, registry=None): from repoze.bfg.traversal import _traverse - return _traverse(context, environ) + return _traverse(context, environ, registry) def _registerTraverserFactory(self, traverser): import zope.component @@ -848,6 +848,15 @@ class UnderTraverseTests(unittest.TestCase): result = self._callFUT(context, None) self.assertEqual(result, {}) + def test_withregistry(self): + from zope.component import getSiteManager + registry = getSiteManager() + traverser = make_traverser({}) + self._registerTraverserFactory(traverser) + context = DummyContext() + result = self._callFUT(context, None, registry) + self.assertEqual(result, {}) + def test_issixtuple(self): traverser = make_traverser((1,2,3,4,5,6)) self._registerTraverserFactory(traverser) diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py index a0fdc5c71..223de4309 100644 --- a/repoze/bfg/traversal.py +++ b/repoze/bfg/traversal.py @@ -262,11 +262,15 @@ def traverse(model, path): return _traverse(model, {'PATH_INFO':path}) -def _traverse(model, environ): - traverser = ITraverserFactory(model) +def _traverse(model, environ, registry=None): + if registry is None: + traverser = ITraverserFactory(model) + else: + # for speed + traverser = registry.getAdapter(model, ITraverserFactory) result = traverser(environ) deprecation_warning = None - if not isinstance(result, dict): + if result.__class__ is not dict: # isinstance slightly slower try: # b/w compat for 6-arg returning ITraversers (0.7.1 til 0.8a7) ctx, view_name, subpath, traversed, vroot, vroot_path = result -- cgit v1.2.3