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 # Based on: 6 # http://src.chromium.org/viewvc/blink/trunk/Source/build/scripts/template_expander.py 7 8 import os 9 import sys 10 11 _current_dir = os.path.dirname(os.path.realpath(__file__)) 12 # jinja2 is in the third_party directory. 13 # Insert at front to override system libraries, and after path[0] == script dir 14 sys.path.insert(1, os.path.join(_current_dir, 15 os.pardir, 16 os.pardir, 17 os.pardir, 18 os.pardir, 19 'third_party')) 20 import jinja2 21 22 23 def ApplyTemplate(path_to_template, params, filters=None): 24 template_directory, template_name = os.path.split(path_to_template) 25 path_to_templates = os.path.join(_current_dir, template_directory) 26 loader = jinja2.FileSystemLoader([path_to_templates]) 27 jinja_env = jinja2.Environment(loader=loader, keep_trailing_newline=True) 28 if filters: 29 jinja_env.filters.update(filters) 30 template = jinja_env.get_template(template_name) 31 return template.render(params) 32 33 34 def UseJinja(path_to_template, filters=None): 35 def RealDecorator(generator): 36 def GeneratorInternal(*args, **kwargs): 37 parameters = generator(*args, **kwargs) 38 return ApplyTemplate(path_to_template, parameters, filters=filters) 39 GeneratorInternal.func_name = generator.func_name 40 return GeneratorInternal 41 return RealDecorator 42