Michael Merickel
2018-10-15 2b024920847481592b1a13d4006d2a9fa8881d72
commit | author | age
ee117e 1 from pyramid.interfaces import (
CM 2     IRendererFactory,
3     PHASE1_CONFIG,
4     )
5bf23f 5
229123 6 from pyramid import renderers
52fde9 7 from pyramid.config.util import action_method
ee117e 8
5bf23f 9 DEFAULT_RENDERERS = (
CM 10     ('json', renderers.json_renderer_factory),
11     ('string', renderers.string_renderer_factory),
12     )
13
14 class RenderingConfiguratorMixin(object):
b7e92d 15     def add_default_renderers(self):
CM 16         for name, renderer in DEFAULT_RENDERERS:
17             self.add_renderer(name, renderer)
18     
5bf23f 19     @action_method
CM 20     def add_renderer(self, name, factory):
21         """
22         Add a :app:`Pyramid` :term:`renderer` factory to the
23         current configuration state.
24
25         The ``name`` argument is the renderer name.  Use ``None`` to
26         represent the default renderer (a renderer which will be used for all
27         views unless they name another renderer specifically).
28
29         The ``factory`` argument is Python reference to an
30         implementation of a :term:`renderer` factory or a
31         :term:`dotted Python name` to same.
32         """
33         factory = self.maybe_dotted(factory)
34         # if name is None or the empty string, we're trying to register
35         # a default renderer, but registerUtility is too dumb to accept None
36         # as a name
012b97 37         if not name:
5bf23f 38             name = ''
eb2fee 39         def register():
CM 40             self.registry.registerUtility(factory, IRendererFactory, name=name)
522405 41         intr = self.introspectable('renderer factories',
CM 42                                    name,
7f72f8 43                                    self.object_description(factory),
CM 44                                    'renderer factory')
45         intr['factory'] = factory
46         intr['name'] = name
eb2fee 47         # we need to register renderers early (in phase 1) because they are
CM 48         # used during view configuration (which happens in phase 3)
7f72f8 49         self.action((IRendererFactory, name), register, order=PHASE1_CONFIG,
CM 50                     introspectables=(intr,))
5bf23f 51