summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Everitt <paul@agendaless.com>2008-07-18 14:23:58 +0000
committerPaul Everitt <paul@agendaless.com>2008-07-18 14:23:58 +0000
commitca9f9e3d16e8c84ab3958bf51ea78da09a089ea8 (patch)
tree9b579773821f76be8c261316acf572d686bf2b33
parent6b9fd1b81af54cd00d8b4dfe9ecd900941fdc17b (diff)
downloadpyramid-ca9f9e3d16e8c84ab3958bf51ea78da09a089ea8.tar.gz
pyramid-ca9f9e3d16e8c84ab3958bf51ea78da09a089ea8.tar.bz2
pyramid-ca9f9e3d16e8c84ab3958bf51ea78da09a089ea8.zip
Using Chris's help, changed signature of interface to support what the XSLT processors expects. Fixed tests to assert that interface.
-rw-r--r--repoze/bfg/interfaces.py6
-rw-r--r--repoze/bfg/template.py13
-rw-r--r--repoze/bfg/tests/test_xslt.py12
3 files changed, 18 insertions, 13 deletions
diff --git a/repoze/bfg/interfaces.py b/repoze/bfg/interfaces.py
index f51e23cbf..4bb385438 100644
--- a/repoze/bfg/interfaces.py
+++ b/repoze/bfg/interfaces.py
@@ -13,6 +13,12 @@ class IView(Interface):
def __call__(*arg, **kw):
""" Must return an object that implements IResponse; args are
mapped into an IView's __call__ by mapply-like code """
+
+class INodeView(IView):
+ def __call__(node, **kw):
+ """ Must return an object that implements IResponse; node is an
+ lxml.etree Element and **kw provides parameters to an XSLT
+ processor """
class IViewFactory(Interface):
def __call__(context, request):
diff --git a/repoze/bfg/template.py b/repoze/bfg/template.py
index 78529eb40..8ade2fb74 100644
--- a/repoze/bfg/template.py
+++ b/repoze/bfg/template.py
@@ -11,6 +11,7 @@ from zope.interface import implements
from webob import Response
from repoze.bfg.interfaces import IView
+from repoze.bfg.interfaces import INodeView
from repoze.bfg.interfaces import ITemplateFactory
class Z3CPTTemplateFactory(object):
@@ -28,15 +29,14 @@ class Z3CPTTemplateFactory(object):
class XSLTemplateFactory(object):
classProvides(ITemplateFactory)
- implements(IView)
+ implements(INodeView)
def __init__(self, path):
self.path = path
- def __call__(self, *arg, **kw):
- node = kw.get("node")
+ def __call__(self, node, **kw):
processor = get_processor(self.path)
- result = str(processor(node))
+ result = str(processor(node, **kw))
response = Response(result)
return response
@@ -92,7 +92,7 @@ def render_template(path, **kw):
return template(**kw)
-def render_transform(path, **kw):
+def render_transform(path, node, **kw):
""" Render a XSL template at the package-relative path (may also
be absolute) using the kwargs in ``*kw`` as top-level names and
return a Response object."""
@@ -106,11 +106,10 @@ def render_transform(path, **kw):
path = os.path.join(prefix, path)
template = queryUtility(IView, path)
- node = kw.get("node")
if template is None:
if not os.path.exists(path):
raise ValueError('Missing template file: %s' % path)
template = XSLTemplateFactory(path)
registerTemplate(template, path)
- return template(**kw)
+ return template(node, **kw)
diff --git a/repoze/bfg/tests/test_xslt.py b/repoze/bfg/tests/test_xslt.py
index 448d49ddc..ebf0e625d 100644
--- a/repoze/bfg/tests/test_xslt.py
+++ b/repoze/bfg/tests/test_xslt.py
@@ -34,16 +34,16 @@ class XSLTemplateFactoryTests(unittest.TestCase, Base):
klass = self._getTargetClass()
return klass(*arg, **kw)
- def test_instance_conforms_to_IView(self):
+ def test_instance_conforms_to_INodeView(self):
from zope.interface.verify import verifyObject
- from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import INodeView
path = self._getTemplatePath('minimal.xsl')
- verifyObject(IView, self._makeOne(path))
+ verifyObject(INodeView, self._makeOne(path))
- def test_class_conforms_to_IView(self):
+ def test_class_conforms_to_INodeView(self):
from zope.interface.verify import verifyClass
- from repoze.bfg.interfaces import IView
- verifyClass(IView, self._getTargetClass())
+ from repoze.bfg.interfaces import INodeView
+ verifyClass(INodeView, self._getTargetClass())
def test_class_conforms_to_ITemplateFactory(self):
from zope.interface.verify import verifyObject