[Checkins] SVN: Sandbox/nadako/zope.ptresource/ Don't render PageTemplateResource when called as the IResource interface requires that __call__ method should return an absolute URL. When accessed by browser, it still will be rendered, because "browserDefault" method now returns a callable that will render the template to browser.
Dan Korostelev
nadako at gmail.com
Mon Aug 24 07:58:23 EDT 2009
Log message for revision 103139:
Don't render PageTemplateResource when called as the IResource interface requires that __call__ method should return an absolute URL. When accessed by browser, it still will be rendered, because "browserDefault" method now returns a callable that will render the template to browser.
Changed:
U Sandbox/nadako/zope.ptresource/CHANGES.txt
U Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml
U Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py
U Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py
-=-
Modified: Sandbox/nadako/zope.ptresource/CHANGES.txt
===================================================================
--- Sandbox/nadako/zope.ptresource/CHANGES.txt 2009-08-24 11:37:52 UTC (rev 103138)
+++ Sandbox/nadako/zope.ptresource/CHANGES.txt 2009-08-24 11:58:22 UTC (rev 103139)
@@ -9,3 +9,10 @@
of refactoring process. It's now a plugin for another package that was
refactored from zope.app.publisher - zope.browserresource. See its
documentation for more details.
+
+Other changes:
+
+ * Don't render PageTemplateResource when called as the IResource interface
+ requires that __call__ method should return an absolute URL. When accessed
+ by browser, it still will be rendered, because "browserDefault" method now
+ returns a callable that will render the template to browser.
Modified: Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml
===================================================================
--- Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml 2009-08-24 11:37:52 UTC (rev 103138)
+++ Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml 2009-08-24 11:58:22 UTC (rev 103139)
@@ -3,19 +3,19 @@
<utility
name="pt"
component=".ptresource.PageTemplateResourceFactory"
- provides=".interfaces.IResourceFactoryFactory"
+ provides="zope.browserresource.interfaces.IResourceFactoryFactory"
/>
<utility
name="zpt"
component=".ptresource.PageTemplateResourceFactory"
- provides=".interfaces.IResourceFactoryFactory"
+ provides="zope.browserresource.interfaces.IResourceFactoryFactory"
/>
<utility
name="html"
component=".ptresource.PageTemplateResourceFactory"
- provides=".interfaces.IResourceFactoryFactory"
+ provides="zope.browserresource.interfaces.IResourceFactoryFactory"
/>
<class class=".ptresource.PageTemplateResource">
Modified: Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py
===================================================================
--- Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py 2009-08-24 11:37:52 UTC (rev 103138)
+++ Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py 2009-08-24 11:58:22 UTC (rev 103139)
@@ -61,17 +61,20 @@
def browserDefault(self, request):
'''See interface IBrowserPublisher'''
- return self, ()
+ return getattr(self, request.method), ()
- def __call__(self):
- # TODO: this method violates the IResource contract according to
- # which, it sould return an absolute URL. Let's do something with
- # it. Probably move the rendering code to another method and point
- # to it with browserDefault. nadako, 23 Aug 2009
+ def HEAD(self):
pt = self.context
response = self.request.response
if not response.getHeader("Content-Type"):
response.setHeader("Content-Type", pt.content_type)
+ return ''
+
+ def GET(self):
+ pt = self.context
+ response = self.request.response
+ if not response.getHeader("Content-Type"):
+ response.setHeader("Content-Type", pt.content_type)
return pt(self.request)
class PageTemplateResourceFactory(object):
Modified: Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py
===================================================================
--- Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py 2009-08-24 11:37:52 UTC (rev 103138)
+++ Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py 2009-08-24 11:58:22 UTC (rev 103139)
@@ -54,17 +54,28 @@
resource.request, ())
os.unlink(path)
- def testCall(self):
+ def testBrowserDefault(self):
path = self.createTestFile(
'<html><body tal:content="request/test_data"></body></html>')
test_data = "Foobar"
request = TestRequest(test_data=test_data)
factory = PageTemplateResourceFactory(path, checker, 'testresource.pt')
resource = factory(request)
- self.assertEquals(resource(),
+ view, next = resource.browserDefault(request)
+ self.assertEquals(view(),
'<html><body>%s</body></html>' % test_data)
self.assertEquals('text/html',
request.response.getHeader('Content-Type'))
+ self.assertEquals(next, ())
+
+ request = TestRequest(test_data=test_data, REQUEST_METHOD='HEAD')
+ resource = factory(request)
+ view, next = resource.browserDefault(request)
+ self.assertEquals(view(), '')
+ self.assertEquals('text/html',
+ request.response.getHeader('Content-Type'))
+ self.assertEquals(next, ())
+
os.unlink(path)
More information about the Checkins
mailing list