aios/tools/hape/hape_libs/utils/template.py (29 lines of code) (raw):
import json
import jinja2
import tempfile
import shutil
class TemporaryDirectory(object):
def __enter__(self):
self.name = tempfile.mkdtemp()
return self.name
def __exit__(self, exc_type, exc_value, traceback):
shutil.rmtree(self.name)
class CustomUndefined(jinja2.Undefined):
def __init__(self, hint=None, obj=None, name=None, exc=None):
jinja2.Undefined.__init__(self, hint=hint, name=name, exc=exc)
self._path = [name] if name else []
def __getattr__(self, name):
if name == '__bases__':
raise AttributeError()
new_obj = CustomUndefined(name=name)
new_obj._path = self._path + [name]
return new_obj
def __unicode__(self):
path = '.'.join(filter(None, self._path))
return "{{ %s }}" % path
def __call__(self, *args, **kwargs):
path = '.'.join(filter(None, self._path))
args_repr = [repr(arg) for arg in args]
kwargs_repr = ["{}={}".format(key, repr(value)) for key, value in kwargs.items()]
params = ", ".join(args_repr + kwargs_repr)
return "{{ %s(%s) }}" % (path, params)