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 |
) |