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