summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-06-11 04:23:12 +0000
committerChris McDonough <chrism@agendaless.com>2009-06-11 04:23:12 +0000
commit1ecdda6b64a498d0c04fb94a0c0ce0ec4d15d06c (patch)
tree3846ce77e983bc5697f277bdf2e1c44896ba9bef
parent412736e783651f21446e62d2406541c9dfc66342 (diff)
downloadpyramid-1ecdda6b64a498d0c04fb94a0c0ce0ec4d15d06c.tar.gz
pyramid-1ecdda6b64a498d0c04fb94a0c0ce0ec4d15d06c.tar.bz2
pyramid-1ecdda6b64a498d0c04fb94a0c0ce0ec4d15d06c.zip
Microspeedups.
-rw-r--r--repoze/bfg/registry.py2
-rw-r--r--repoze/bfg/router.py2
-rw-r--r--repoze/bfg/tests/test_registry.py19
-rw-r--r--repoze/bfg/tests/test_traversal.py13
-rw-r--r--repoze/bfg/traversal.py10
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