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