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
|