Michael Merickel
2018-09-19 bff4d2b605c92fe2e6282861429ffc8e24c53796
Merge pull request #3358 from cdunklau/cdunklau-get-renderer-fromconf

Add registry arg to pyramid.renderers.get_renderer
4 files modified
29 ■■■■■ changed files
CHANGES.rst 4 ●●●● patch | view | raw | blame | history
CONTRIBUTORS.txt 1 ●●●● patch | view | raw | blame | history
pyramid/renderers.py 10 ●●●● patch | view | raw | blame | history
pyramid/tests/test_renderers.py 14 ●●●●● patch | view | raw | blame | history
CHANGES.rst
@@ -57,6 +57,10 @@
- Add support for Python 3.7. Add testing on Python 3.8 with allowed failures.
  See https://github.com/Pylons/pyramid/pull/3333
- Add a ``registry`` argument to ``pyramid.renderers.get_renderer``
  to allow users to avoid threadlocals during renderer lookup.
  See https://github.com/Pylons/pyramid/pull/3358
Bug Fixes
---------
CONTRIBUTORS.txt
@@ -331,3 +331,4 @@
- Kuzma Leshakov, 2018/09/07
- Colin Dunklau, 2018/09/19
pyramid/renderers.py
@@ -147,7 +147,7 @@
    return result
def get_renderer(renderer_name, package=None):
def get_renderer(renderer_name, package=None, registry=None):
    """ Return the renderer object for the renderer ``renderer_name``.
    You may supply a relative asset spec as ``renderer_name``.  If
@@ -157,10 +157,16 @@
    asset specification ``renderer_name``.  If ``package`` is ``None``
    (the default), the package name of the *caller* of this function
    will be used as the package.
    You may directly supply an :term:`application registry` using the
    ``registry`` argument, and it will be used to look up the renderer.
    Otherwise, the current thread-local registry (obtained via
    :func:`~pyramid.threadlocal.get_current_registry`) will be used.
    """
    if package is None:
        package = caller_package()
    helper = RendererHelper(name=renderer_name, package=package)
    helper = RendererHelper(name=renderer_name, package=package,
                            registry=registry)
    return helper.renderer
# concrete renderer factory implementations (also API)
pyramid/tests/test_renderers.py
@@ -624,6 +624,20 @@
        result = self._callFUT('abc/def.pt', package=pyramid.tests)
        self.assertEqual(result, renderer)
    def test_it_with_registry(self):
        renderer = self.config.testing_add_renderer(
            'pyramid.tests:abc/def.pt')
        result = self._callFUT('abc/def.pt', registry=self.config.registry)
        self.assertEqual(result, renderer)
    def test_it_with_isolated_registry(self):
        from pyramid.config import Configurator
        isolated_config = Configurator()
        renderer = isolated_config.testing_add_renderer(
            'pyramid.tests:abc/def.pt')
        result = self._callFUT('abc/def.pt', registry=isolated_config.registry)
        self.assertEqual(result, renderer)
class TestJSONP(unittest.TestCase):
    def _makeOne(self, param_name='callback'):
        from pyramid.renderers import JSONP