summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/api/template.rst2
-rw-r--r--repoze/bfg/template.py21
-rw-r--r--repoze/bfg/tests/test_template.py85
3 files changed, 64 insertions, 44 deletions
diff --git a/docs/api/template.rst b/docs/api/template.rst
index eec874485..64e25a37c 100644
--- a/docs/api/template.rst
+++ b/docs/api/template.rst
@@ -5,6 +5,8 @@
.. automodule:: repoze.bfg.template
+ .. autofunction:: get_template
+
.. autofunction:: render_template
.. autofunction:: render_template_to_response
diff --git a/repoze/bfg/template.py b/repoze/bfg/template.py
index 0d390fecf..3c60dd19e 100644
--- a/repoze/bfg/template.py
+++ b/repoze/bfg/template.py
@@ -67,13 +67,8 @@ def registerTemplate(type, template, path):
else:
sm.registerUtility(template, type, name=path)
-def render_template(path, **kw):
- """ Render a z3c.pt (ZPT) template at the package-relative path
- (may also be absolute) using the kwargs in ``*kw`` as top-level
- names and return a string. """
+def _get_template(path, **kw):
# XXX use pkg_resources
- path = caller_path(path)
-
template = queryUtility(ITemplate, path)
if template is None:
@@ -82,6 +77,20 @@ def render_template(path, **kw):
template = Z3CPTTemplateFactory(path)
registerTemplate(ITemplate, template, path)
+ return template
+
+def get_template(path):
+ """ Return a z3c.pt template object at the package-relative path
+ (may also be absolute) """
+ path = caller_path(path)
+ return _get_template(path).template
+
+def render_template(path, **kw):
+ """ Render a z3c.pt (ZPT) template at the package-relative path
+ (may also be absolute) using the kwargs in ``*kw`` as top-level
+ names and return a string. """
+ path = caller_path(path)
+ template = get_template(path)
return template(**kw)
def render_template_to_response(path, **kw):
diff --git a/repoze/bfg/tests/test_template.py b/repoze/bfg/tests/test_template.py
index 1a5fcf1f4..ba3745132 100644
--- a/repoze/bfg/tests/test_template.py
+++ b/repoze/bfg/tests/test_template.py
@@ -64,35 +64,13 @@ class RenderTemplateTests(unittest.TestCase, Base):
from repoze.bfg.template import render_template
return render_template
- def test_nonabs_unregistered(self):
+ def test_it(self):
self._zcmlConfigure()
- from zope.component import queryUtility
- from repoze.bfg.interfaces import ITemplate
minimal = self._getTemplatePath('minimal.pt')
- self.assertEqual(queryUtility(ITemplate, minimal), None)
render = self._getFUT()
result = render(minimal)
self.failUnless(isinstance(result, str))
self.assertEqual(result, '<div>\n</div>')
- from repoze.bfg.template import Z3CPTTemplateFactory
- self.failUnless(isinstance(queryUtility(ITemplate, minimal),
- Z3CPTTemplateFactory))
-
- def test_nonabs_registered(self):
- self._zcmlConfigure()
- from zope.component import getGlobalSiteManager
- from zope.component import queryUtility
- from repoze.bfg.template import Z3CPTTemplateFactory
- from repoze.bfg.interfaces import ITemplate
- minimal = self._getTemplatePath('minimal.pt')
- utility = Z3CPTTemplateFactory(minimal)
- gsm = getGlobalSiteManager()
- gsm.registerUtility(utility, ITemplate, name=minimal)
- render = self._getFUT()
- result = render(minimal)
- self.failUnless(isinstance(result, str))
- self.assertEqual(result, '<div>\n</div>')
- self.assertEqual(queryUtility(ITemplate, minimal), utility)
class RenderTemplateToResponseTests(unittest.TestCase, Base):
def setUp(self):
@@ -105,12 +83,9 @@ class RenderTemplateToResponseTests(unittest.TestCase, Base):
from repoze.bfg.template import render_template_to_response
return render_template_to_response
- def test_nonabs_unregistered(self):
+ def test_it(self):
self._zcmlConfigure()
- from zope.component import queryUtility
- from repoze.bfg.interfaces import ITemplate
minimal = self._getTemplatePath('minimal.pt')
- self.assertEqual(queryUtility(ITemplate, minimal), None)
render = self._getFUT()
result = render(minimal)
from webob import Response
@@ -118,9 +93,17 @@ class RenderTemplateToResponseTests(unittest.TestCase, Base):
self.assertEqual(result.app_iter, ['<div>\n</div>'])
self.assertEqual(result.status, '200 OK')
self.assertEqual(len(result.headerlist), 2)
- from repoze.bfg.template import Z3CPTTemplateFactory
- self.failUnless(isinstance(queryUtility(ITemplate, minimal),
- Z3CPTTemplateFactory))
+
+class GetTemplateTests(unittest.TestCase, Base):
+ def setUp(self):
+ Base.setUp(self)
+
+ def tearDown(self):
+ Base.tearDown(self)
+
+ def _getFUT(self):
+ from repoze.bfg.template import get_template
+ return get_template
def test_nonabs_registered(self):
self._zcmlConfigure()
@@ -132,13 +115,39 @@ class RenderTemplateToResponseTests(unittest.TestCase, Base):
utility = Z3CPTTemplateFactory(minimal)
gsm = getGlobalSiteManager()
gsm.registerUtility(utility, ITemplate, name=minimal)
- render = self._getFUT()
- result = render(minimal)
- from webob import Response
- self.failUnless(isinstance(result, Response))
- self.assertEqual(result.app_iter, ['<div>\n</div>'])
- self.assertEqual(result.status, '200 OK')
- self.assertEqual(len(result.headerlist), 2)
+ get = self._getFUT()
+ result = get(minimal)
+ self.assertEqual(result.filename, minimal)
self.assertEqual(queryUtility(ITemplate, minimal), utility)
-
+ def test_nonabs_unregistered(self):
+ self._zcmlConfigure()
+ from zope.component import getGlobalSiteManager
+ from zope.component import queryUtility
+ from repoze.bfg.template import Z3CPTTemplateFactory
+ from repoze.bfg.interfaces import ITemplate
+ minimal = self._getTemplatePath('minimal.pt')
+ self.assertEqual(queryUtility(ITemplate, minimal), None)
+ utility = Z3CPTTemplateFactory(minimal)
+ gsm = getGlobalSiteManager()
+ gsm.registerUtility(utility, ITemplate, name=minimal)
+ get = self._getFUT()
+ result = get(minimal)
+ self.assertEqual(result.filename, minimal)
+ self.assertEqual(queryUtility(ITemplate, minimal), utility)
+
+ def test_nonabs_registered(self):
+ self._zcmlConfigure()
+ from zope.component import getGlobalSiteManager
+ from zope.component import queryUtility
+ from repoze.bfg.template import Z3CPTTemplateFactory
+ from repoze.bfg.interfaces import ITemplate
+ minimal = self._getTemplatePath('minimal.pt')
+ utility = Z3CPTTemplateFactory(minimal)
+ gsm = getGlobalSiteManager()
+ gsm.registerUtility(utility, ITemplate, name=minimal)
+ get = self._getFUT()
+ result = get(minimal)
+ self.assertEqual(result.filename, minimal)
+ self.assertEqual(queryUtility(ITemplate, minimal), utility)
+