Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / template_renderer.py
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
5 from data_source_registry import CreateDataSources
6 from third_party.motemplate import Motemplate
7 from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES
8
9
10 class 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