caching and static tool

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

caching and static tool

Niibe Yutaka-3
I found that using Static Tool with Caching Tool doesn't work well,
in some situations.

I am using version 3.1.2, and checked the code in the repository
(trunk) as well.

Note that when we use or
staticfile.handler directly, with Caching Tool, it works well.

Suppose we have a configuration like this:
tools.caching.on = True

tools.staticfile.on = True
tools.staticfile.filename = 'site/robots.txt'

Then, staticfile is always called, even though it cached as well.

That's because both of Static Tool and Caching Tool use
'before_handler' hook.

The logic of Caching Tool is that, it disable request.handler when it
founds a page in cache.  The code is:

-------------------------  root/trunk/py3/cherrypy/
389 class CachingTool(Tool):
390    """Caching Tool for CherryPy."""
392    def _wrapper(self, **kwargs):
393        request = cherrypy.serving.request
394        if _caching.get(**kwargs):
395            request.handler = None
396        else:
397            if request.cacheable:
398                # Note the devious technique here of adding hooks
on the fly
399                request.hooks.attach('before_finalize',
400                                     priority = 90)

(BTW, should _caching.get be self.callable here?)

It doesn't stop Static Tool's 'before_handler' hook to be called.

I think that possible fix would be:

(1) Let staticdir or staticfile check if request.handler == None or

(2) Then, modify lib/, so that it sets request.handler
    well when it raises HTTPRedirect.  The place is here:

------------------------- root/trunk/py3/cherrypy/lib/
359        try:
360            # Note that validate_since depends on a Last-Modified
361            # this was put into the cached copy, and should have
362            # resurrected just above (response.headers =
363            cptools.validate_since()
364        except cherrypy.HTTPRedirect:
365            x = sys.exc_info()[1]
366            if x.status == 304:
367                cherrypy._cache.tot_non_modified += 1
+                request.handler = None
368            raise

You received this message because you are subscribed to the Google Groups "cherrypy-devel" group.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at