[z3-checkins] r39930 - in z3/deliverance/trunk: . deliverance
ltucker at codespeak.net
ltucker at codespeak.net
Mon Mar 5 06:25:39 CET 2007
Author: ltucker
Date: Mon Mar 5 06:25:37 2007
New Revision: 39930
Modified:
z3/deliverance/trunk/deliverance/resource_fetcher.py
z3/deliverance/trunk/deliverance/wsgimiddleware.py
z3/deliverance/trunk/setup.py
Log:
handle file urls again
Modified: z3/deliverance/trunk/deliverance/resource_fetcher.py
==============================================================================
--- z3/deliverance/trunk/deliverance/resource_fetcher.py (original)
+++ z3/deliverance/trunk/deliverance/resource_fetcher.py Mon Mar 5 06:25:37 2007
@@ -4,6 +4,7 @@
from paste.proxy import TransparentProxy
from paste.request import construct_url
from paste.response import header_value
+from paste.fileapp import FileApp
import urlparse
from deliverance.utils import DeliveranceError
@@ -75,6 +76,54 @@
loc))
return body
+class FileResourceFetcher(object):
+ def __init__(self, environ, uri, headers_only=False):
+ self.environ = environ.copy()
+ self.uri = uri
+
+ uri_parts = urlparse.urlparse(self.uri)
+ self.environ['PATH_INFO'] = uri_parts[2]
+ self.environ['SCRIPT_INFO'] = ''
+ self.environ['wsgi.scheme'] = 'file'
+ if len(uri_parts[4]) > 0:
+ self.environ['QUERY_STRING'] = uri_parts[4] + '¬heme'
+ else:
+ self.environ['QUERY_STRING'] = 'notheme'
+
+ if headers_only:
+ self.environ['REQUEST_METHOD'] = 'HEAD'
+ else:
+ self.environ['REQUEST_METHOD'] = 'GET'
+
+ self.environ['CONTENT_LENGTH'] = '0'
+ self.environ['wsgi.input'] = StringIO('')
+ self.environ['CONTENT_TYPE'] = ''
+
+ if 'HTTP_ACCEPT_ENCODING' in self.environ:
+ del self.environ['HTTP_ACCEPT_ENCODING']
+
+ def wsgi_get(self):
+ path = urlparse.urlparse(self.uri)[2]
+ file_app = FileApp(path)
+
+ return intercept_output(self.environ, file_app)
+
+
+ def get(self):
+ path_info = self.environ['PATH_INFO']
+ status, headers, body = self.wsgi_get()
+
+ if not status.startswith('200'):
+ loc = header_value(headers, 'location')
+ if loc:
+ loc = ' location=%r' % loc
+ else:
+ loc = ''
+ raise DeliveranceError(
+ "Request for file at %s (%r) failed with status code %r%s"
+ % (construct_url(self.environ), path_info, status,
+ loc))
+ return body
class ExternalResourceFetcher(object):
def __init__(self, uri, headers_only=False):
Modified: z3/deliverance/trunk/deliverance/wsgimiddleware.py
==============================================================================
--- z3/deliverance/trunk/deliverance/wsgimiddleware.py (original)
+++ z3/deliverance/trunk/deliverance/wsgimiddleware.py Mon Mar 5 06:25:37 2007
@@ -15,7 +15,7 @@
from htmlserialize import tostring
from deliverance.utils import DeliveranceError
from deliverance.utils import DELIVERANCE_ERROR_PAGE
-from deliverance.resource_fetcher import InternalResourceFetcher, ExternalResourceFetcher
+from deliverance.resource_fetcher import InternalResourceFetcher, FileResourceFetcher, ExternalResourceFetcher
from deliverance import cache_utils
import sys
import datetime
@@ -359,7 +359,10 @@
internalBaseURL = environ.get(DELIVERANCE_BASE_URL,None)
uri = urlparse.urljoin(internalBaseURL, uri)
- if internalBaseURL and uri.startswith(internalBaseURL):
+ if urlparse.urlparse(uri)[0] == 'file':
+ return FileResourceFetcher(environ, uri)
+
+ elif internalBaseURL and uri.startswith(internalBaseURL):
return InternalResourceFetcher(environ, uri[len(internalBaseURL):],
self.app)
else:
Modified: z3/deliverance/trunk/setup.py
==============================================================================
--- z3/deliverance/trunk/setup.py (original)
+++ z3/deliverance/trunk/setup.py Mon Mar 5 06:25:37 2007
@@ -18,7 +18,7 @@
packages=find_packages(exclude=[]),
zip_safe=False,
install_requires=[
- 'lxml',
+ 'lxml==1.2',
'Paste',
'FormEncode',
'elementtree',
More information about the z3-checkins
mailing list