[Checkins] SVN: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py Publisher only sets cache control header on successful responses. Hidden files are not served.
Jan-Jaap Driessen
jdriessen at thehealthagency.com
Tue Nov 16 10:07:25 EST 2010
Log message for revision 118426:
Publisher only sets cache control header on successful responses. Hidden files are not served.
Changed:
U hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py
-=-
Modified: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py
===================================================================
--- hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py 2010-11-16 08:45:06 UTC (rev 118425)
+++ hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py 2010-11-16 15:07:24 UTC (rev 118426)
@@ -4,11 +4,22 @@
import hurry.resource
+
+class FilterHiddenDirectoryApp(DirectoryApp):
+ def __call__(self, environ, start_response):
+ path_info = environ['PATH_INFO']
+ for segment in path_info.split('/'):
+ if segment.startswith('.'):
+ return HTTPNotFound()(environ, start_response)
+ return DirectoryApp.__call__(self, environ, start_response)
+
+
class Publisher(object):
def __init__(self):
- self.dirapps = {}
+ self.directory_apps = {}
for library in hurry.resource.libraries():
- self.dirapps[library.name] = DirectoryApp(library.path)
+ app = FilterHiddenDirectoryApp(library.path)
+ self.directory_apps[library.name] = app
def __call__(self, environ, start_response):
# When configured through Paste#urlmap, the WSGI environ['PATH_INFO']
@@ -16,15 +27,16 @@
library_name = path_info_pop(environ)
try:
- dirapp = self.dirapps[library_name]
+ directory_app = self.directory_apps[library_name]
except KeyError:
return HTTPNotFound()(environ, start_response)
def cache_header_start_response(status, headers, exc_info=None):
- # XXX Don't set the cache control for 404's and friends.
- expires = CACHE_CONTROL.apply(headers,
- max_age=10*CACHE_CONTROL.ONE_YEAR)
- EXPIRES.update(headers, delta=expires)
+ # Only set the cache control for succesful requests (200, 206).
+ if status.startswith('20'):
+ expires = CACHE_CONTROL.apply(
+ headers, max_age=10*CACHE_CONTROL.ONE_YEAR)
+ EXPIRES.update(headers, delta=expires)
return start_response(status, headers, exc_info)
response = start_response
@@ -35,7 +47,7 @@
path_info_pop(environ)
response = cache_header_start_response
- return dirapp(environ, response)
+ return directory_app(environ, response)
def make_publisher(global_conf):
More information about the checkins
mailing list