Index: chrome/common/extensions/docs/server2/template_renderer.py |
diff --git a/chrome/common/extensions/docs/server2/template_renderer.py b/chrome/common/extensions/docs/server2/template_renderer.py |
index e63f77186772bed918970305e4af5dd807bb6c8f..63b31acec1417b20026d468075e6fc619d41f15b 100644 |
--- a/chrome/common/extensions/docs/server2/template_renderer.py |
+++ b/chrome/common/extensions/docs/server2/template_renderer.py |
@@ -16,21 +16,37 @@ class TemplateRenderer(object): |
def __init__(self, server_instance): |
self._server_instance = server_instance |
- def Render(self, template, request): |
+ def Render(self, template, request, data_sources=None, warn=True): |
+ '''Renders |template| using |request|. |
+ Specify |data_sources| to only include the DataSources with the given names |
+ when rendering the template. |
+ Specify |warn| whether to warn (e.g. logging.warning) if there are template |
+ rendering errors. It may be useful to disable this when errors are expected, |
+ for example when doing an initial page render to determine document title. |
+ ''' |
assert isinstance(template, Handlebar), type(template) |
- server_instance = self._server_instance |
- render_context = { |
- 'api_list': server_instance.api_list_data_source_factory.Create(), |
- 'apis': server_instance.api_data_source_factory.Create(request), |
+ render_context = self._CreateDataSources(request) |
+ if data_sources is not None: |
+ render_context = dict((name, d) for name, d in render_context.iteritems() |
+ if name in data_sources) |
+ render_context.update({ |
'apps_samples_url': GITHUB_BASE, |
- 'base_path': server_instance.base_path, |
+ 'base_path': self._server_instance.base_path, |
'extensions_samples_url': EXTENSIONS_SAMPLES, |
- 'samples': server_instance.samples_data_source_factory.Create(request), |
- 'static': server_instance.base_path + 'static', |
- } |
- render_context.update(CreateDataSources(server_instance, request=request)) |
- render_data = template.render(render_context) |
- if render_data.errors: |
+ 'static': self._server_instance.base_path + 'static', |
+ }) |
+ render_data = template.Render(render_context) |
+ if warn and render_data.errors: |
logging.error('Handlebar error(s) rendering %s:\n%s' % |
(template._name, ' \n'.join(render_data.errors))) |
return render_data.text |
+ |
+ def _CreateDataSources(self, request): |
+ server_instance = self._server_instance |
+ data_sources = CreateDataSources(server_instance, request=request) |
+ data_sources.update({ |
+ 'api_list': server_instance.api_list_data_source_factory.Create(), |
+ 'apis': server_instance.api_data_source_factory.Create(request), |
+ 'samples': server_instance.samples_data_source_factory.Create(request), |
+ }) |
+ return data_sources |