OpenSecurity/install/web.py-0.37/build/lib/web/contrib/template.py
changeset 3 65432e6c6042
     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]