Ok, I think this cleans things up nicely. cache_time now defaults to None, and unless I did something silly, this will produce identical behavior (with regard to the Expires header) to an un-patched util.py. I also fixed that oversight about directories within directories (Thanks again for pointing that out!) As before, I have two patches to submit, one for util.py files that are 'stock' 0.6 release versions, which include both Graham's IMS support and my Expires support, and another that will patch a util.py that has already been patched for IMS support to include Expires support. Jason Sibre -----Original Message----- From: Massa, Harald [mailto:harald.massa@suedvers.de] Sent: Saturday, May 31, 2003 2:34 PM To: 'Jason Sibre'; quixote-users@mems-exchange.org Cc: 'Graham Fawcett' Subject: AW: [Quixote-users] Augmenting StaticFile to use "Expires:" Jason, very nice patch, really improving Cache-Performance! I have to additions: first: I would like the default to be -1, no Caching. So when swapping in your util.py, working code does not get broken. Second: within def _q_lookup(self, request, name): there are two distinctions: files and directories. In your patch cache_time is only passed on to files, not to directories. So I suggest: def _q_lookup(self, request, name): """ Get a file from the filesystem directory and return the StaticFile or StaticDirectory wrapper of it; use caching if that is in use. """ if name in ('.', '..'): raise errors.TraversalError(private_msg="Attempt to use '.', '..'") if self.cache.has_key(name): # Get item from cache item = self.cache[name] else: # Get item from filesystem; cache it if caching is in use. item_filepath = os.path.join(self.path, name) while os.path.islink(item_filepath): if not self.follow_symlinks: raise errors.TraversalError else: dest = os.readlink(item_filepath) item_filepath = os.path.join(self.path, dest) if os.path.isdir(item_filepath): item = StaticDirectory(item_filepath, self.use_cache, self.list_directory, self.follow_symlinks,cache_time=self.cache_time) # !!! also propagate cache-time to subdirectories elif os.path.isfile(item_filepath): item = StaticFile(item_filepath, self.follow_symlinks, cache_time=self.cache_time) else: raise errors.TraversalError if self.use_cache: self.cache[name] = item if isinstance(item, StaticDirectory): return item else: return item(request) Thank you very much for sharing this extension, best wishes, Harald