summaryrefslogtreecommitdiff
path: root/repoze/bfg/push.py
blob: abc81adb5ae8b37d310f2acd02a1a8c398ac17ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import os.path
from repoze.bfg.chameleon_zpt import render_template_to_response

class pushpage(object):
    """ Decorator for functions which return Chameleon template namespaces.

    E.g.::

      @pushpage('www/my_template.pt')
      def my_view(context, request):
          return {'a': 1, 'b': ()}

    Equates to::

      from repoze.bfg.chameleon import render_template_to_response
      def my_view(context, request):
          return render_template_to_response('www/my_template.pt', a=1, b=())
        
    """
    def __init__(self, template):
        self.template = template

    def __call__(self, wrapped):
        prefix = os.path.dirname(wrapped.func_globals['__file__'])
        path = os.path.join(prefix, self.template)

        def _curried(context, request):
            kw = wrapped(context, request)
            return render_template_to_response(path, **kw)
        _curried.__name__ = wrapped.__name__
        _curried.__grok_module__ = wrapped.__module__ # r.bfg.convention support

        return _curried