Hash: SHA1

Martin Aspeli wrote:
> Laurence Rowe wrote:
>> 2009/12/31 Martin Aspeli<optilude+li...@gmail.com>:
>>> Hi,
>>> A few of us are playing with some caching tools, trying to get to a more
>>> sane and less monkey patch-laden approach than CacheFu
>>> (Products.CacheSetup), for use with Zope 2.12.
>>> It is relatively easy to set response headers, e.g. in an
>>> IPubBeforeCommit event handler.
>>> However, we also need to be able to intercept a request to send a 304
>>> response if the underlying object has not been modified.
>>> CacheFu monkey patches ZPT rendering to avoid the actual rendering if a
>>> 304 response is being sent, returning an empty string instead. I'd
>>> rather not have such patches, though, and anyway this only work with
>>> things rendered as ZPTs. It also doesn't avoid any pre-work that a view
>>> may do before rendering its template, if indeed it has one.
>>> Another thought was to use IPubAfterTraversal, at which point we have
>>> the object to publish and security checks have been completed. However,
>>> ZPublisher.Publish goes straight from that into mapply().
>>> Can anyone think of a good way to do this? Maybe we need to add some
>>> kind of condition around mapply(), e.g. to do not nothing if there's a
>>> 304 response header, or some other marker?
>> I think this is analogous to 404 Not Found errors. It should be
>> possible to handle them with the combination of:
>>    * raise a NotModified exception in an IPubAfterTraversal handler
>>    * in a NotModified exception view, setStatus 304 Not Modified an
>> return an empty string.
> Yep, I actually got there in the end on my own. The way that the 
> exception *type/class name* is used to determine the status is pretty 
> evil,

bobo was trying really hard back in 1996. ;)

> but so long as the exception is actually called NotModified, it 
> works. Setting it explicitly doesn't, since it gets overridden.

You can "lock" the status and body of the response, which causes
subsequent attempts to set them to fail silently.

- --
Tres Seaver          +1 540-429-0999          tsea...@palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org


Zope-Dev maillist  -  Zope-Dev@zope.org
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope )

Reply via email to