diff options
| author | Amos Latteier <amos@latteier.com> | 2015-04-15 12:48:12 -0400 |
|---|---|---|
| committer | Amos Latteier <amos@latteier.com> | 2015-04-15 12:48:12 -0400 |
| commit | 1d5a99208aa912296cc4b320ea753c9156dff9df (patch) | |
| tree | bb9d8ac868d1ecb521925e1e1cdf6b166980b8ee | |
| parent | b1cab4470b9a063c58b6e37aec4071de53a9cfd2 (diff) | |
| download | pyramid-1d5a99208aa912296cc4b320ea753c9156dff9df.tar.gz pyramid-1d5a99208aa912296cc4b320ea753c9156dff9df.tar.bz2 pyramid-1d5a99208aa912296cc4b320ea753c9156dff9df.zip | |
Store derivers in registry, not config, since new configs are created (losing state).
| -rw-r--r-- | pyramid/config/__init__.py | 2 | ||||
| -rw-r--r-- | pyramid/config/views.py | 11 | ||||
| -rw-r--r-- | pyramid/interfaces.py | 3 | ||||
| -rw-r--r-- | pyramid/tests/test_integration.py | 1 |
4 files changed, 13 insertions, 4 deletions
diff --git a/pyramid/config/__init__.py b/pyramid/config/__init__.py index b5cf35ff0..ad72c5614 100644 --- a/pyramid/config/__init__.py +++ b/pyramid/config/__init__.py @@ -63,7 +63,6 @@ from pyramid.util import ( WeakOrderedSet, action_method, object_description, - TopologicalSorter, ) from pyramid.config.adapters import AdaptersConfiguratorMixin @@ -312,7 +311,6 @@ class Configurator( self.autocommit = autocommit self.route_prefix = route_prefix self.introspection = introspection - self.derivationlist = TopologicalSorter() if registry is None: registry = Registry(self.package_name) self.registry = registry diff --git a/pyramid/config/views.py b/pyramid/config/views.py index ac3803712..b1a49f911 100644 --- a/pyramid/config/views.py +++ b/pyramid/config/views.py @@ -28,6 +28,7 @@ from pyramid.interfaces import ( IStaticURLInfo, IView, IViewClassifier, + IViewDerivers, IViewMapper, IViewMapperFactory, PHASE1_CONFIG, @@ -80,6 +81,7 @@ from pyramid.util import ( object_description, viewdefaults, action_method, + TopologicalSorter, ) import pyramid.config.predicates @@ -988,7 +990,8 @@ class ViewsConfiguratorMixin(object): inner_derivers = [('mapped_view', (d.mapped_view, None)), ('rendered_view', (d.rendered_view, None))] - for name, val in inner_derivers + self.derivationlist.sorted(): + derivers = self.registry.queryUtility(IViewDerivers, default=[]) + for name, val in inner_derivers + derivers.sorted(): derivation, default = val view = derivation(view, default, **kw) return view @@ -1056,7 +1059,11 @@ class ViewsConfiguratorMixin(object): intr['weighs_more_than'] = weighs_more_than intr['weighs_less_than'] = weighs_less_than def register(): - self.derivationlist.add(name, (factory, default), + derivers = self.registry.queryUtility(IViewDerivers) + if derivers is None: + derivers = TopologicalSorter() + self.registry.registerUtility(derivers, IViewDerivers) + derivers.add(name, (factory, default), after=weighs_more_than, before=weighs_less_than) self.action(discriminator, register, introspectables=(intr,), diff --git a/pyramid/interfaces.py b/pyramid/interfaces.py index bab91b0ee..7ac2663d1 100644 --- a/pyramid/interfaces.py +++ b/pyramid/interfaces.py @@ -1184,6 +1184,9 @@ class IJSONAdapter(Interface): class IPredicateList(Interface): """ Interface representing a predicate list """ +class IViewDerivers(Interface): + """ Interface for view derivers list """ + class ICacheBuster(Interface): """ Instances of ``ICacheBuster`` may be provided as arguments to diff --git a/pyramid/tests/test_integration.py b/pyramid/tests/test_integration.py index c2786c391..3b7af29a7 100644 --- a/pyramid/tests/test_integration.py +++ b/pyramid/tests/test_integration.py @@ -474,6 +474,7 @@ class TestConflictApp(unittest.TestCase): def _makeConfig(self): from pyramid.config import Configurator config = Configurator() + config.add_default_view_derivations() return config def test_autoresolved_view(self): |
