blob: 87bc5af624fd6afb8e6eb015d4a9422254b30982 [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from data_source_registry import CreateDataSources
from third_party.handlebar import Handlebar
from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES
class TemplateRenderer(object):
'''Renders templates with the server's available data sources.
'''
def __init__(self, server_instance):
self._server_instance = server_instance
def Render(self,
template,
request,
data_sources=None,
additional_context=None):
'''Renders |template| using |request|.
Specify |data_sources| to only include the DataSources with the given names
when rendering the template.
Specify |additional_context| to inject additional template context when
rendering the template.
'''
assert isinstance(template, Handlebar), type(template)
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': self._server_instance.base_path,
'extensions_samples_url': EXTENSIONS_SAMPLES,
'static': self._server_instance.base_path + 'static',
})
if additional_context:
render_context.update(additional_context)
render_data = template.Render(render_context)
return render_data.text, render_data.errors
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