[Zope-CMF] Re: Caching Policy Manager

Tres Seaver tseaver at zope.com
Mon Apr 26 13:51:10 EDT 2004


Fred Yankowski wrote:
> On Mon, Apr 26, 2004 at 10:02:53AM -0400, Jean-Francois.Doyon at CCRS.NRCan.gc.ca wrote:
> 
>>python: content.meta_type == 'Filesystem Image'
>>python: content.getId() == 'something'
>>
>>etc ...
>>
>>But not matter what, I don't see any headers getting set as I'd
>>expect.
> 
> 
> Deja vu (this subject has arisen several times on the Zope lists and
> always ends up in an inconclusive muddle).
> 
> Anyway, based on my testing and reading of the code, the 'content'
> item available to the predicate in a policy is set to the *parent* of
> the object being considered for cache headers.  Near as I can tell,
> that makes it impossible to have tests like yours that check the
> meta_type of the object itself.  See the _setCacheHeaders() function
> in CMFCore/utils.py, where it sets content to the value of
> aq_parent(obj).
> 

The CPM is designed to set caching policies for *content*;  the 
Filesystem* skin objects are *software*, not *content*.  Here is the 
mapping for the top-level names available to the predicate expression 
(from the docstring in CMFCore/CachingPolicyManager):

     """ Represent a single class of cachable objects:

           - class membership is defined by 'predicate', a TALES expression
             with access to the following top-level names:

             'content' -- the content object itself

             'view' -- the name of the view method

             'keywords' -- keywords passed to the request

             'request' -- the REQUEST object itself

             'member' -- the authenticated member, or None if anonymous

             'modules' -- usual TALES access-with-import

             'nothing' -- None
     """

So, for instance, you could get to the skin object via:

    python:  getattr(content, view)

You could argue that we should make the skin object directly available 
to the expression, e.g. bound to 'template'.

As Dmitry pointed out, you can also associate an FS8 skin object with a 
cache manager via its '*.meatadata' file, by setting the top-level name
'cache' to the ID of the cache manager.

Tres.
-- 
===============================================================
Tres Seaver                                tseaver at zope.com
Zope Corporation      "Zope Dealers"       http://www.zope.com




More information about the Zope-CMF mailing list