[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