template_renderer.py revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
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
3# found in the LICENSE file.
4
5import logging
6
7from data_source_registry import CreateDataSources
8from third_party.handlebar import Handlebar
9from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES
10
11
12class TemplateRenderer(object):
13  '''Renders templates with the server's available data sources.
14  '''
15
16  def __init__(self, server_instance):
17    self._server_instance = server_instance
18
19  def Render(self, template, request):
20    assert isinstance(template, Handlebar), type(template)
21    server_instance = self._server_instance
22    render_context = {
23      'api_list': server_instance.api_list_data_source_factory.Create(),
24      'apis': server_instance.api_data_source_factory.Create(request),
25      'apps_samples_url': GITHUB_BASE,
26      'base_path': server_instance.base_path,
27      'extensions_samples_url': EXTENSIONS_SAMPLES,
28      'false': False,
29      'intros': server_instance.intro_data_source_factory.Create(),
30      'samples': server_instance.samples_data_source_factory.Create(request),
31      'static': server_instance.base_path + 'static',
32      'true': True,
33    }
34    render_context.update(CreateDataSources(server_instance, request=request))
35    render_data = template.render(render_context)
36    if render_data.errors:
37      logging.error('Handlebar error(s) rendering %s:\n%s' %
38          (template._name, '  \n'.join(render_data.errors)))
39    return render_data.text
40