[Repoze-checkins] r1118 - repoze.accelerator/trunk/repoze/accelerator

Tres Seaver tseaver at palladion.com
Sun Jun 22 19:32:29 EDT 2008


Author: Tres Seaver <tseaver at palladion.com>
Date: Sun Jun 22 19:32:29 2008
New Revision: 1118

Log:
Allow use of entry-point strings in m/w factory params.

Modified:
   repoze.accelerator/trunk/repoze/accelerator/middleware.py
   repoze.accelerator/trunk/repoze/accelerator/tests.py

Modified: repoze.accelerator/trunk/repoze/accelerator/middleware.py
==============================================================================
--- repoze.accelerator/trunk/repoze/accelerator/middleware.py	(original)
+++ repoze.accelerator/trunk/repoze/accelerator/middleware.py	Sun Jun 22 19:32:29 2008
@@ -45,14 +45,22 @@
 
         raise StopIteration
 
+def _resolveEntryPoint(name):
+    from pkg_resources import EntryPoint
+    return EntryPoint.parse('x=%s' % name).load(False)
+
 def main(app, global_conf, **local_conf):
     from repoze.accelerator.storage import make_memory_storage
     from repoze.accelerator.policy import make_accelerator_policy
 
     storage_factory = local_conf.get('storage', make_memory_storage)
+    if isinstance(storage_factory, basestring):
+        storage_factory = _resolveEntryPoint(storage_factory)
     storage = storage_factory(config=local_conf)
 
     policy_factory = local_conf.get('policy', make_accelerator_policy)
+    if isinstance(policy_factory, basestring):
+        policy_factory = _resolveEntryPoint(policy_factory)
     policy = policy_factory(storage, config=local_conf)
 
     return Accelerator(app, policy)

Modified: repoze.accelerator/trunk/repoze/accelerator/tests.py
==============================================================================
--- repoze.accelerator/trunk/repoze/accelerator/tests.py	(original)
+++ repoze.accelerator/trunk/repoze/accelerator/tests.py	Sun Jun 22 19:32:29 2008
@@ -300,6 +300,77 @@
         self.assertEqual(policy.handler.closed, True)
 
 
+class Test_main(unittest.TestCase):
+
+    def _callFUT(self, app, global_conf, **local_conf):
+        from repoze.accelerator.middleware import main
+        return main(app, global_conf, **local_conf)
+
+    def _makeApp(self):
+        return object()
+
+    def test_main_defaults(self):
+        from repoze.accelerator.middleware import NaivePolicy
+        from repoze.accelerator.middleware import RAMStorage
+        app = self._makeApp()
+
+        accel = self._callFUT(app, {})
+
+        self.failUnless(accel.app is app)
+        self.failUnless(isinstance(accel.policy, NaivePolicy))
+        self.failUnless(isinstance(accel.policy.storage, RAMStorage))
+
+    def test_main_factories(self):
+
+        app = self._makeApp()
+
+        accel = self._callFUT(app,
+                              {},
+                              storage=_makeStorage,
+                              policy=_makePolicy,
+                             )
+
+        self.failUnless(accel.app is app)
+        self.failUnless(isinstance(accel.policy, _Policy))
+        self.failUnless(isinstance(accel.policy.config, dict))
+        self.failUnless(isinstance(accel.policy.storage.config, dict))
+
+    def test_main_entry_points(self):
+
+        app = self._makeApp()
+
+        accel = self._callFUT(app,
+                              {},
+                              storage='repoze.accelerator.tests:_makeStorage',
+                              policy='repoze.accelerator.tests:_makePolicy',
+                             )
+
+        self.failUnless(accel.app is app)
+        self.failUnless(isinstance(accel.policy, _Policy))
+        self.failUnless(isinstance(accel.policy.config, dict))
+        self.failUnless(isinstance(accel.policy.storage.config, dict))
+
+class _Storage:
+    config = None
+
+def _makeStorage(config=None):
+    storage = _Storage()
+    if config is not None:
+        storage.config = config
+    return storage
+
+class _Policy:
+    config = None
+
+    def __init__(self, storage):
+        self.storage = storage
+
+def _makePolicy(storage, config=None):
+    policy = _Policy(storage)
+    if config is not None:
+        policy.config = config
+    return policy
+
 class DummyHandler:
     def __init__(self):
         self.chunks = []


More information about the Repoze-checkins mailing list