summaryrefslogtreecommitdiff
path: root/repoze/bfg/templating.py
blob: a8f10ae8fd119afa75f9611a4a9c43d5b1547550 (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
from zope.component import queryUtility
from repoze.bfg.interfaces import ITemplateRenderer
from zope.component.interfaces import ComponentLookupError
from zope.component import getSiteManager
from repoze.bfg.path import caller_path
import os

def renderer_from_cache(path, factory, level=3, **kw):
    abspath = caller_path(path, level=level)
    renderer = queryUtility(ITemplateRenderer, abspath)

    if renderer is None:
        # service unit tests and explicit registrations by trying the relative
        # "path"
        renderer = queryUtility(ITemplateRenderer, path)

    if renderer is None:
        if not os.path.exists(abspath):
            raise ValueError('Missing template file: %s' % abspath)
        renderer = factory(abspath, **kw)
        try:
            sm = getSiteManager()
        except ComponentLookupError:
            pass
        else:
            sm.registerUtility(renderer, ITemplateRenderer, name=abspath)
        
    return renderer