diff options
| author | Paul Everitt <paul@agendaless.com> | 2008-07-18 14:23:58 +0000 |
|---|---|---|
| committer | Paul Everitt <paul@agendaless.com> | 2008-07-18 14:23:58 +0000 |
| commit | ca9f9e3d16e8c84ab3958bf51ea78da09a089ea8 (patch) | |
| tree | 9b579773821f76be8c261316acf572d686bf2b33 | |
| parent | 6b9fd1b81af54cd00d8b4dfe9ecd900941fdc17b (diff) | |
| download | pyramid-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.py | 6 | ||||
| -rw-r--r-- | repoze/bfg/template.py | 13 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_xslt.py | 12 |
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 |
