summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmos Latteier <amos@latteier.com>2015-04-15 12:48:12 -0400
committerAmos Latteier <amos@latteier.com>2015-04-15 12:48:12 -0400
commit1d5a99208aa912296cc4b320ea753c9156dff9df (patch)
treebb9d8ac868d1ecb521925e1e1cdf6b166980b8ee
parentb1cab4470b9a063c58b6e37aec4071de53a9cfd2 (diff)
downloadpyramid-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__.py2
-rw-r--r--pyramid/config/views.py11
-rw-r--r--pyramid/interfaces.py3
-rw-r--r--pyramid/tests/test_integration.py1
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):