1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/OpenSecurity/install/web.py-0.37/build/lib/web/contrib/template.py Mon Dec 02 14:02:05 2013 +0100
1.3 @@ -0,0 +1,131 @@
1.4 +"""
1.5 +Interface to various templating engines.
1.6 +"""
1.7 +import os.path
1.8 +
1.9 +__all__ = [
1.10 + "render_cheetah", "render_genshi", "render_mako",
1.11 + "cache",
1.12 +]
1.13 +
1.14 +class render_cheetah:
1.15 + """Rendering interface to Cheetah Templates.
1.16 +
1.17 + Example:
1.18 +
1.19 + render = render_cheetah('templates')
1.20 + render.hello(name="cheetah")
1.21 + """
1.22 + def __init__(self, path):
1.23 + # give error if Chetah is not installed
1.24 + from Cheetah.Template import Template
1.25 + self.path = path
1.26 +
1.27 + def __getattr__(self, name):
1.28 + from Cheetah.Template import Template
1.29 + path = os.path.join(self.path, name + ".html")
1.30 +
1.31 + def template(**kw):
1.32 + t = Template(file=path, searchList=[kw])
1.33 + return t.respond()
1.34 +
1.35 + return template
1.36 +
1.37 +class render_genshi:
1.38 + """Rendering interface genshi templates.
1.39 + Example:
1.40 +
1.41 + for xml/html templates.
1.42 +
1.43 + render = render_genshi(['templates/'])
1.44 + render.hello(name='genshi')
1.45 +
1.46 + For text templates:
1.47 +
1.48 + render = render_genshi(['templates/'], type='text')
1.49 + render.hello(name='genshi')
1.50 + """
1.51 +
1.52 + def __init__(self, *a, **kwargs):
1.53 + from genshi.template import TemplateLoader
1.54 +
1.55 + self._type = kwargs.pop('type', None)
1.56 + self._loader = TemplateLoader(*a, **kwargs)
1.57 +
1.58 + def __getattr__(self, name):
1.59 + # Assuming all templates are html
1.60 + path = name + ".html"
1.61 +
1.62 + if self._type == "text":
1.63 + from genshi.template import TextTemplate
1.64 + cls = TextTemplate
1.65 + type = "text"
1.66 + else:
1.67 + cls = None
1.68 + type = None
1.69 +
1.70 + t = self._loader.load(path, cls=cls)
1.71 + def template(**kw):
1.72 + stream = t.generate(**kw)
1.73 + if type:
1.74 + return stream.render(type)
1.75 + else:
1.76 + return stream.render()
1.77 + return template
1.78 +
1.79 +class render_jinja:
1.80 + """Rendering interface to Jinja2 Templates
1.81 +
1.82 + Example:
1.83 +
1.84 + render= render_jinja('templates')
1.85 + render.hello(name='jinja2')
1.86 + """
1.87 + def __init__(self, *a, **kwargs):
1.88 + extensions = kwargs.pop('extensions', [])
1.89 + globals = kwargs.pop('globals', {})
1.90 +
1.91 + from jinja2 import Environment,FileSystemLoader
1.92 + self._lookup = Environment(loader=FileSystemLoader(*a, **kwargs), extensions=extensions)
1.93 + self._lookup.globals.update(globals)
1.94 +
1.95 + def __getattr__(self, name):
1.96 + # Assuming all templates end with .html
1.97 + path = name + '.html'
1.98 + t = self._lookup.get_template(path)
1.99 + return t.render
1.100 +
1.101 +class render_mako:
1.102 + """Rendering interface to Mako Templates.
1.103 +
1.104 + Example:
1.105 +
1.106 + render = render_mako(directories=['templates'])
1.107 + render.hello(name="mako")
1.108 + """
1.109 + def __init__(self, *a, **kwargs):
1.110 + from mako.lookup import TemplateLookup
1.111 + self._lookup = TemplateLookup(*a, **kwargs)
1.112 +
1.113 + def __getattr__(self, name):
1.114 + # Assuming all templates are html
1.115 + path = name + ".html"
1.116 + t = self._lookup.get_template(path)
1.117 + return t.render
1.118 +
1.119 +class cache:
1.120 + """Cache for any rendering interface.
1.121 +
1.122 + Example:
1.123 +
1.124 + render = cache(render_cheetah("templates/"))
1.125 + render.hello(name='cache')
1.126 + """
1.127 + def __init__(self, render):
1.128 + self._render = render
1.129 + self._cache = {}
1.130 +
1.131 + def __getattr__(self, name):
1.132 + if name not in self._cache:
1.133 + self._cache[name] = getattr(self._render, name)
1.134 + return self._cache[name]