OLD | NEW |
---|---|
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import logging | 5 import logging |
6 | 6 |
7 from data_source_registry import CreateDataSources | 7 from data_source_registry import CreateDataSources |
8 from third_party.handlebar import Handlebar | 8 from third_party.handlebar import Handlebar |
9 from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES | 9 from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES |
10 | 10 |
11 | 11 |
12 class TemplateRenderer(object): | 12 class TemplateRenderer(object): |
13 '''Renders templates with the server's available data sources. | 13 '''Renders templates with the server's available data sources. |
14 ''' | 14 ''' |
15 | 15 |
16 def __init__(self, server_instance): | 16 def __init__(self, server_instance): |
17 self._server_instance = server_instance | 17 self._server_instance = server_instance |
18 | 18 |
19 def Render(self, template, request): | 19 def Render(self, template, request, data_sources=None, warn=True): |
20 '''Renders |template| using |request|. Specify |data_sources| to only | |
21 include the DataSources with the given names when rendering the template. | |
Yoyo Zhou
2013/11/17 22:12:47
nit: document warn
not at google - send to devlin
2013/11/18 18:05:36
Done.
| |
22 ''' | |
20 assert isinstance(template, Handlebar), type(template) | 23 assert isinstance(template, Handlebar), type(template) |
21 server_instance = self._server_instance | 24 render_context = self._CreateDataSources(request) |
22 render_context = { | 25 if data_sources is not None: |
23 'api_list': server_instance.api_list_data_source_factory.Create(), | 26 render_context = dict((name, d) for name, d in render_context.iteritems() |
24 'apis': server_instance.api_data_source_factory.Create(request), | 27 if name in data_sources) |
28 render_context.update({ | |
25 'apps_samples_url': GITHUB_BASE, | 29 'apps_samples_url': GITHUB_BASE, |
26 'base_path': server_instance.base_path, | 30 'base_path': self._server_instance.base_path, |
27 'extensions_samples_url': EXTENSIONS_SAMPLES, | 31 'extensions_samples_url': EXTENSIONS_SAMPLES, |
28 'false': False, | 32 'static': self._server_instance.base_path + 'static', |
29 'samples': server_instance.samples_data_source_factory.Create(request), | 33 }) |
30 'static': server_instance.base_path + 'static', | 34 render_data = template.Render(render_context) |
31 'true': True, | 35 if warn and render_data.errors: |
32 } | |
33 render_context.update(CreateDataSources(server_instance, request=request)) | |
34 render_data = template.render(render_context) | |
35 if render_data.errors: | |
36 logging.error('Handlebar error(s) rendering %s:\n%s' % | 36 logging.error('Handlebar error(s) rendering %s:\n%s' % |
37 (template._name, ' \n'.join(render_data.errors))) | 37 (template._name, ' \n'.join(render_data.errors))) |
38 return render_data.text | 38 return render_data.text |
39 | |
40 def _CreateDataSources(self, request): | |
41 server_instance = self._server_instance | |
42 data_sources = CreateDataSources(server_instance, request=request) | |
43 data_sources.update({ | |
44 'api_list': server_instance.api_list_data_source_factory.Create(), | |
45 'apis': server_instance.api_data_source_factory.Create(request), | |
46 'samples': server_instance.samples_data_source_factory.Create(request), | |
47 }) | |
48 return data_sources | |
OLD | NEW |