summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt3
-rw-r--r--docs/narr/views.rst11
-rw-r--r--pyramid/configuration.py16
-rw-r--r--pyramid/mako_templating.py4
-rw-r--r--pyramid/renderers.py16
-rw-r--r--pyramid/tests/test_configuration.py8
-rw-r--r--pyramid/tests/test_mako_templating.py12
-rw-r--r--pyramid/tests/test_renderers.py33
8 files changed, 59 insertions, 44 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 8dbbbfd66..b54f1a920 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -98,7 +98,8 @@ Backwards Incompatibilities (with BFG 1.3.X)
specification or an absolute path. The dictonary contains the following
keys: ``name`` (the ``renderer=`` value), ``package`` (the 'current package'
when the renderer configuration statement was found), ``type``: the renderer
- type, and ``registry``: the current registry.
+ type, ``registry``: the current registry, and ``settings``: the deployment
+ settings dictionary.
Third-party ``repoze.bfg`` renderer implementations that must be ported to
Pyramid will need to account for this.
diff --git a/docs/narr/views.rst b/docs/narr/views.rst
index 0070e7a73..7e3dfebf1 100644
--- a/docs/narr/views.rst
+++ b/docs/narr/views.rst
@@ -739,11 +739,12 @@ following interface:
class RendererFactory:
def __init__(self, info):
- """ Constructor: ``info`` will be a dictionary containing the
- following keys: ``name`` (the renderer name), ``package``: the
- package that was 'current' at the time the renderer was registered,
- ``type``: the renderer type name, and ``registry``: the current
- registry. """
+ """ Constructor: ``info`` will be a dictionary containing
+ the following keys: ``name`` (the renderer name), ``package``
+ (the package that was 'current' at the time the renderer was
+ registered), ``type`` (the renderer type name), ``registry``
+ (the current application registry) and ``settings`` (the
+ deployment settings dictionary)."""
def __call__(self, value, system):
""" Call a the renderer implementation with the value and
diff --git a/pyramid/configuration.py b/pyramid/configuration.py
index 3c2e3b6b5..bc4c6a7e3 100644
--- a/pyramid/configuration.py
+++ b/pyramid/configuration.py
@@ -327,16 +327,18 @@ class Configurator(object):
def _fix_registry(self):
""" Fix up a ZCA component registry that is not a
- pyramid.registry.Registry by adding analogues of
- ``has_listeners`` and ``notify`` through monkey-patching."""
+ pyramid.registry.Registry by adding analogues of ``has_listeners``,
+ and ``notify`` through monkey-patching."""
- if not hasattr(self.registry, 'notify'):
+ _registry = self.registry
+
+ if not hasattr(_registry, 'notify'):
def notify(*events):
- [ _ for _ in self.registry.subscribers(events, None) ]
- self.registry.notify = notify
+ [ _ for _ in _registry.subscribers(events, None) ]
+ _registry.notify = notify
- if not hasattr(self.registry, 'has_listeners'):
- self.registry.has_listeners = True
+ if not hasattr(_registry, 'has_listeners'):
+ _registry.has_listeners = True
# API
diff --git a/pyramid/mako_templating.py b/pyramid/mako_templating.py
index ec6119764..a414338af 100644
--- a/pyramid/mako_templating.py
+++ b/pyramid/mako_templating.py
@@ -5,7 +5,6 @@ from zope.interface import Interface
from pyramid.interfaces import ITemplateRenderer
from pyramid.exceptions import ConfigurationError
-from pyramid.settings import get_settings
from pyramid.resource import resolve_resource_spec
from pyramid.resource import abspath_from_resource_spec
@@ -15,7 +14,6 @@ from mako import exceptions
class IMakoLookup(Interface):
pass
-
class PkgResourceTemplateLookup(TemplateLookup):
"""TemplateLookup subclass that handles resource specification
uri's"""
@@ -56,9 +54,9 @@ class PkgResourceTemplateLookup(TemplateLookup):
def renderer_factory(info):
path = info['name']
registry = info['registry']
+ settings = info['settings'] or {}
lookup = registry.queryUtility(IMakoLookup)
if lookup is None:
- settings = get_settings() or {}
reload_templates = settings.get('reload_templates', False)
directories = settings.get('mako.directories')
module_directory = settings.get('mako.module_directory')
diff --git a/pyramid/renderers.py b/pyramid/renderers.py
index 78084ae97..14380cd16 100644
--- a/pyramid/renderers.py
+++ b/pyramid/renderers.py
@@ -8,13 +8,13 @@ from pyramid.interfaces import IRendererGlobalsFactory
from pyramid.interfaces import IRendererFactory
from pyramid.interfaces import IResponseFactory
from pyramid.interfaces import ITemplateRenderer
+from pyramid.interfaces import ISettings
from pyramid.compat import json
from pyramid.decorator import reify
from pyramid.path import caller_package
from pyramid.path import package_path
from pyramid.resource import resource_spec_from_abspath
-from pyramid.settings import get_settings
from pyramid.threadlocal import get_current_registry
# API
@@ -157,6 +157,8 @@ def template_renderer_factory(info, impl, lock=registry_lock):
reg = info['registry']
spec = info['name']
package = info['package']
+ settings = info['settings']
+
isabs = os.path.isabs(spec)
if (not isabs) and (not ':' in spec) and package:
@@ -195,7 +197,7 @@ def template_renderer_factory(info, impl, lock=registry_lock):
raise ValueError(
'Missing template resource: %s (%s)' % (spec, abspath))
renderer = impl(abspath)
- if not _reload_resources():
+ if settings and not settings.get('reload_resources'):
# cache the template
try:
lock.acquire()
@@ -205,17 +207,15 @@ def template_renderer_factory(info, impl, lock=registry_lock):
return renderer
-def _reload_resources():
- settings = get_settings()
- return settings and settings.get('reload_resources')
-
def renderer_from_name(path, package=None): # XXX deprecate?
return RendererHelper(name=path, package=package).get_renderer()
class RendererHelper(object):
def __init__(self, name=None, package=None, registry=None):
+ settings = None
if registry is None:
registry = get_current_registry()
+ settings = registry.queryUtility(ISettings)
if name and '.' in name:
rtype = os.path.splitext(name)[1]
@@ -229,6 +229,7 @@ class RendererHelper(object):
self.type = rtype
self.factory = factory
self.registry = registry
+ self.settings = settings
@reify
def renderer(self):
@@ -239,7 +240,8 @@ class RendererHelper(object):
'name':self.name,
'type':self.type,
'package':self.package,
- 'registry':self.registry
+ 'registry':self.registry,
+ 'settings':self.settings,
})
def get_renderer(self):
diff --git a/pyramid/tests/test_configuration.py b/pyramid/tests/test_configuration.py
index 415d760ed..0ff65d309 100644
--- a/pyramid/tests/test_configuration.py
+++ b/pyramid/tests/test_configuration.py
@@ -1372,7 +1372,8 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(renderer.info,
{'registry':config.registry, 'type': '.txt',
'name': 'pyramid.tests:fixtures/minimal.txt',
- 'package': pyramid.tests})
+ 'package': pyramid.tests,
+ 'settings':None})
def test_add_view_with_template_renderer_no_callable(self):
import pyramid.tests
@@ -1388,8 +1389,9 @@ class ConfiguratorTests(unittest.TestCase):
{'registry':config.registry,
'type': '.txt',
'name': 'pyramid.tests:fixtures/minimal.txt',
- 'package':pyramid.tests}
- )
+ 'package':pyramid.tests,
+ 'settings':None,
+ })
def test_add_view_with_request_type_as_iface(self):
from zope.interface import directlyProvides
diff --git a/pyramid/tests/test_mako_templating.py b/pyramid/tests/test_mako_templating.py
index 37780d1ba..3b1c7fd24 100644
--- a/pyramid/tests/test_mako_templating.py
+++ b/pyramid/tests/test_mako_templating.py
@@ -22,14 +22,14 @@ class Test_renderer_factory(Base, unittest.TestCase):
def test_no_directories(self):
from pyramid.exceptions import ConfigurationError
info = {'name':'helloworld.mak', 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':None}
self.assertRaises(ConfigurationError, self._callFUT, info)
def test_no_lookup(self):
from pyramid.mako_templating import IMakoLookup
- self.config.add_settings({'mako.directories':self.templates_dir})
+ settings = {'mako.directories':self.templates_dir}
info = {'name':'helloworld.mak', 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':settings}
renderer = self._callFUT(info)
lookup = self.config.registry.getUtility(IMakoLookup)
self.assertEqual(lookup.directories, [self.templates_dir])
@@ -40,9 +40,9 @@ class Test_renderer_factory(Base, unittest.TestCase):
def test_composite_directories_path(self):
from pyramid.mako_templating import IMakoLookup
twice = self.templates_dir + '\n' + self.templates_dir
- self.config.add_settings({'mako.directories':twice})
+ settings = {'mako.directories':twice}
info = {'name':'helloworld.mak', 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':settings}
self._callFUT(info)
lookup = self.config.registry.getUtility(IMakoLookup)
self.assertEqual(lookup.directories, [self.templates_dir]*2)
@@ -52,7 +52,7 @@ class Test_renderer_factory(Base, unittest.TestCase):
lookup = dict()
self.config.registry.registerUtility(lookup, IMakoLookup)
info = {'name':'helloworld.mak', 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':{}}
renderer = self._callFUT(info)
self.assertEqual(renderer.lookup, lookup)
self.assertEqual(renderer.path, 'helloworld.mak')
diff --git a/pyramid/tests/test_renderers.py b/pyramid/tests/test_renderers.py
index 917bb7c40..018efa2d4 100644
--- a/pyramid/tests/test_renderers.py
+++ b/pyramid/tests/test_renderers.py
@@ -19,7 +19,7 @@ class TestTemplateRendererFactory(unittest.TestCase):
abspath = '/wont/exist'
testing.registerUtility({}, ITemplateRenderer, name=abspath)
info = {'name':abspath, 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':{}}
self.assertRaises(ValueError, self._callFUT, info, None)
def test_abspath_alreadyregistered(self):
@@ -29,7 +29,7 @@ class TestTemplateRendererFactory(unittest.TestCase):
renderer = {}
testing.registerUtility(renderer, ITemplateRenderer, name=abspath)
info = {'name':abspath, 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':{}}
result = self._callFUT(info, None)
self.failUnless(result is renderer)
@@ -40,7 +40,7 @@ class TestTemplateRendererFactory(unittest.TestCase):
renderer = {}
testing.registerUtility(renderer, ITemplateRenderer, name=abspath)
info = {'name':abspath, 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':{}}
result = self._callFUT(info, None)
self.failUnless(result is renderer)
@@ -50,7 +50,7 @@ class TestTemplateRendererFactory(unittest.TestCase):
testing.registerUtility(renderer, ITemplateRenderer, name='foo/bar')
spec = 'foo/bar'
info = {'name':spec, 'package':None,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':{}}
result = self._callFUT(info, None)
self.failUnless(renderer is result)
@@ -62,13 +62,14 @@ class TestTemplateRendererFactory(unittest.TestCase):
testing.registerUtility(renderer, ITemplateRenderer,
name='pyramid.tests:bar/baz')
info = {'name':spec, 'package':pyramid.tests,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':{}}
result = self._callFUT(info, None)
self.failUnless(renderer is result)
def test_spec_notfound(self):
spec = 'pyramid.tests:wont/exist'
- info = {'name':spec, 'package':None, 'registry':self.config.registry}
+ info = {'name':spec, 'package':None, 'registry':self.config.registry,
+ 'settings':{}}
self.assertRaises(ValueError, self._callFUT, info, None)
def test_spec_alreadyregistered(self):
@@ -77,7 +78,8 @@ class TestTemplateRendererFactory(unittest.TestCase):
module_name = tests.__name__
relpath = 'test_renderers.py'
spec = '%s:%s' % (module_name, relpath)
- info = {'name':spec, 'package':None, 'registry':self.config.registry}
+ info = {'name':spec, 'package':None, 'registry':self.config.registry,
+ 'settings':{}}
renderer = {}
testing.registerUtility(renderer, ITemplateRenderer, name=spec)
result = self._callFUT(info, None)
@@ -91,7 +93,8 @@ class TestTemplateRendererFactory(unittest.TestCase):
renderer = {}
factory = DummyFactory(renderer)
spec = '%s:%s' % (module_name, relpath)
- info = {'name':spec, 'package':None, 'registry':self.config.registry}
+ info = {'name':spec, 'package':None, 'registry':self.config.registry,
+ 'settings':{}}
result = self._callFUT(info, factory)
self.failUnless(result is renderer)
path = os.path.abspath(__file__)
@@ -111,7 +114,7 @@ class TestTemplateRendererFactory(unittest.TestCase):
factory = DummyFactory(renderer)
spec = 'test_renderers.py'
info = {'name':spec, 'package':pyramid.tests,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':{}}
result = self._callFUT(info, factory)
self.failUnless(result is renderer)
spec = '%s:%s' % ('pyramid.tests', 'test_renderers.py')
@@ -122,15 +125,13 @@ class TestTemplateRendererFactory(unittest.TestCase):
def test_reload_resources_false(self):
import pyramid.tests
from pyramid.threadlocal import get_current_registry
- from pyramid.interfaces import ISettings
from pyramid.interfaces import ITemplateRenderer
settings = {'reload_resources':False}
- testing.registerUtility(settings, ISettings)
renderer = {}
factory = DummyFactory(renderer)
spec = 'test_renderers.py'
info = {'name':spec, 'package':pyramid.tests,
- 'registry':self.config.registry}
+ 'registry':self.config.registry, 'settings':settings}
result = self._callFUT(info, factory)
self.failUnless(result is renderer)
spec = '%s:%s' % ('pyramid.tests', 'test_renderers.py')
@@ -151,7 +152,10 @@ class TestRendererFromName(unittest.TestCase):
def test_it(self):
from pyramid.threadlocal import get_current_registry
+ from pyramid.interfaces import ISettings
registry = get_current_registry()
+ settings = {}
+ registry.registerUtility(settings, ISettings)
from pyramid.interfaces import IRendererFactory
import os
here = os.path.dirname(os.path.abspath(__file__))
@@ -164,12 +168,16 @@ class TestRendererFromName(unittest.TestCase):
'type':'.pt',
'package':None,
'name':fixture,
+ 'settings':settings,
})
def test_it_with_package(self):
import pyramid
from pyramid.threadlocal import get_current_registry
+ from pyramid.interfaces import ISettings
registry = get_current_registry()
+ settings = {}
+ registry.registerUtility(settings, ISettings)
from pyramid.interfaces import IRendererFactory
import os
here = os.path.dirname(os.path.abspath(__file__))
@@ -182,6 +190,7 @@ class TestRendererFromName(unittest.TestCase):
'type':'.pt',
'package':pyramid,
'name':fixture,
+ 'settings':settings,
})
def test_it_no_renderer(self):