template_renderer.py revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
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 5from data_source_registry import CreateDataSources 6from third_party.motemplate import Motemplate 7from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES 8 9 10class TemplateRenderer(object): 11 '''Renders templates with the server's available data sources. 12 ''' 13 14 def __init__(self, server_instance): 15 self._server_instance = server_instance 16 17 def Render(self, 18 template, 19 request, 20 data_sources=None, 21 additional_context=None): 22 '''Renders |template| using |request|. 23 24 Specify |data_sources| to only include the DataSources with the given names 25 when rendering the template. 26 27 Specify |additional_context| to inject additional template context when 28 rendering the template. 29 ''' 30 assert isinstance(template, Motemplate), type(template) 31 render_context = CreateDataSources(self._server_instance, request) 32 if data_sources is not None: 33 render_context = dict((name, d) for name, d in render_context.iteritems() 34 if name in data_sources) 35 render_context.update({ 36 'apps_samples_url': GITHUB_BASE, 37 'base_path': self._server_instance.base_path, 38 'extensions_samples_url': EXTENSIONS_SAMPLES, 39 'static': self._server_instance.base_path + 'static', 40 }) 41 render_context.update(additional_context or {}) 42 render_data = template.Render(render_context) 43 return render_data.text, render_data.errors 44