blob: 225a36358aaa3d4e061ca5eef7730d0295b3a333 (
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
|
from zope.component import queryUtility
from repoze.bfg.interfaces import ITemplateRenderer
from repoze.bfg.interfaces import ITestingTemplateRenderer
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):
# XXX use pkg_resources
abspath = caller_path(path, level=level)
renderer = queryUtility(ITemplateRenderer, abspath)
if renderer is None:
# service unit tests by trying the relative path
renderer = queryUtility(ITestingTemplateRenderer, 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
|