summaryrefslogtreecommitdiff
path: root/Lib/wsgiref
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/wsgiref')
-rw-r--r--Lib/wsgiref/handlers.py63
-rw-r--r--Lib/wsgiref/headers.py36
-rw-r--r--Lib/wsgiref/simple_server.py50
-rw-r--r--Lib/wsgiref/util.py42
-rw-r--r--Lib/wsgiref/validate.py2
5 files changed, 9 insertions, 184 deletions
diff --git a/Lib/wsgiref/handlers.py b/Lib/wsgiref/handlers.py
index 5cfc28af6f..ae1e8cc437 100644
--- a/Lib/wsgiref/handlers.py
+++ b/Lib/wsgiref/handlers.py
@@ -39,7 +39,6 @@ def format_date_time(timestamp):
)
-
class BaseHandler:
"""Manage the invocation of a WSGI application"""
@@ -64,7 +63,7 @@ class BaseHandler:
# Error handling (also per-subclass or per-instance)
traceback_limit = None # Print entire traceback to self.get_stderr()
- error_status = "500 Dude, this is whack!"
+ error_status = "500 Internal Server Error"
error_headers = [('Content-Type','text/plain')]
error_body = "A server error occurred. Please contact the administrator."
@@ -74,13 +73,6 @@ class BaseHandler:
headers = None
bytes_sent = 0
-
-
-
-
-
-
-
def run(self, application):
"""Invoke the application"""
# Note to self: don't move the close()! Asynchronous servers shouldn't
@@ -160,7 +152,7 @@ class BaseHandler:
Subclasses can extend this to add other defaults.
"""
- if not self.headers.has_key('Content-Length'):
+ if 'Content-Length' not in self.headers:
self.set_content_length()
def start_response(self, status, headers,exc_info=None):
@@ -195,11 +187,11 @@ class BaseHandler:
if self.origin_server:
if self.client_is_modern():
self._write('HTTP/%s %s\r\n' % (self.http_version,self.status))
- if not self.headers.has_key('Date'):
+ if 'Date' not in self.headers:
self._write(
'Date: %s\r\n' % format_date_time(time.time())
)
- if self.server_software and not self.headers.has_key('Server'):
+ if self.server_software and 'Server' not in self.headers:
self._write('Server: %s\r\n' % self.server_software)
else:
self._write('Status: %s\r\n' % self.status)
@@ -248,7 +240,9 @@ class BaseHandler:
def finish_content(self):
"""Ensure headers and content have both been sent"""
if not self.headers_sent:
- self.headers['Content-Length'] = "0"
+ # Only zero Content-Length if not set by the application (so
+ # that HEAD requests can be satisfied properly, see #3839)
+ self.headers.setdefault('Content-Length', "0")
self.send_headers()
else:
pass # XXX check if content-length was too short?
@@ -359,15 +353,6 @@ class BaseHandler:
raise NotImplementedError
-
-
-
-
-
-
-
-
-
class SimpleHandler(BaseHandler):
"""Handler that's just initialized with streams, environment, etc.
@@ -433,23 +418,6 @@ class BaseCGIHandler(SimpleHandler):
origin_server = False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
class CGIHandler(BaseCGIHandler):
"""CGI-based invocation via sys.stdin/stdout/stderr and os.environ
@@ -478,20 +446,3 @@ class CGIHandler(BaseCGIHandler):
self, sys.stdin, sys.stdout, sys.stderr, dict(os.environ.items()),
multithread=False, multiprocess=True
)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
diff --git a/Lib/wsgiref/headers.py b/Lib/wsgiref/headers.py
index 6bd304ef97..6c8c60c891 100644
--- a/Lib/wsgiref/headers.py
+++ b/Lib/wsgiref/headers.py
@@ -27,18 +27,6 @@ def _formatparam(param, value=None, quote=1):
return param
-
-
-
-
-
-
-
-
-
-
-
-
class Headers:
"""Manage a collection of HTTP response headers"""
@@ -76,10 +64,6 @@ class Headers:
"""
return self.get(name)
-
-
-
-
def has_key(self, name):
"""Return true if the message contains the header."""
return self.get(name) is not None
@@ -118,9 +102,6 @@ class Headers:
"""
return [k for k, v in self._headers]
-
-
-
def values(self):
"""Return a list of all header values.
@@ -161,7 +142,6 @@ class Headers:
else:
return result
-
def add_header(self, _name, _value, **_params):
"""Extended header setting.
@@ -187,19 +167,3 @@ class Headers:
else:
parts.append(_formatparam(k.replace('_', '-'), v))
self._headers.append((_name, "; ".join(parts)))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
diff --git a/Lib/wsgiref/simple_server.py b/Lib/wsgiref/simple_server.py
index 1b0a4b2209..e6a385b03c 100644
--- a/Lib/wsgiref/simple_server.py
+++ b/Lib/wsgiref/simple_server.py
@@ -37,8 +37,6 @@ class ServerHandler(SimpleHandler):
-
-
class WSGIServer(HTTPServer):
"""BaseHTTPServer that implements the Python WSGI protocol"""
@@ -68,18 +66,6 @@ class WSGIServer(HTTPServer):
-
-
-
-
-
-
-
-
-
-
-
-
class WSGIRequestHandler(BaseHTTPRequestHandler):
server_version = "WSGIServer/" + __version__
@@ -139,29 +125,6 @@ class WSGIRequestHandler(BaseHTTPRequestHandler):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
def demo_app(environ,start_response):
from StringIO import StringIO
stdout = StringIO()
@@ -190,16 +153,3 @@ if __name__ == '__main__':
import webbrowser
webbrowser.open('http://localhost:8000/xyz?abc')
httpd.handle_request() # serve one request, then exit
-
-
-
-
-
-
-
-
-
-
-
-
-#
diff --git a/Lib/wsgiref/util.py b/Lib/wsgiref/util.py
index 450a32fbce..194b187a4d 100644
--- a/Lib/wsgiref/util.py
+++ b/Lib/wsgiref/util.py
@@ -32,13 +32,6 @@ class FileWrapper:
return data
raise StopIteration
-
-
-
-
-
-
-
def guess_scheme(environ):
"""Return a guess for whether 'wsgi.url_scheme' should be 'http' or 'https'
"""
@@ -71,7 +64,7 @@ def request_uri(environ, include_query=1):
"""Return the full request URI, optionally including the query string"""
url = application_uri(environ)
from urllib import quote
- path_info = quote(environ.get('PATH_INFO',''))
+ path_info = quote(environ.get('PATH_INFO',''),safe='/;=,')
if not environ.get('SCRIPT_NAME'):
url += path_info[1:]
else:
@@ -161,7 +154,6 @@ def setup_testing_defaults(environ):
-
_hoppish = {
'connection':1, 'keep-alive':1, 'proxy-authenticate':1,
'proxy-authorization':1, 'te':1, 'trailers':1, 'transfer-encoding':1,
@@ -171,35 +163,3 @@ _hoppish = {
def is_hop_by_hop(header_name):
"""Return true if 'header_name' is an HTTP/1.1 "Hop-by-Hop" header"""
return _hoppish(header_name.lower())
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
diff --git a/Lib/wsgiref/validate.py b/Lib/wsgiref/validate.py
index 23ab9f83fa..43784f9e66 100644
--- a/Lib/wsgiref/validate.py
+++ b/Lib/wsgiref/validate.py
@@ -345,7 +345,7 @@ def check_environ(environ):
"Invalid CONTENT_LENGTH: %r" % environ['CONTENT_LENGTH'])
if not environ.get('SCRIPT_NAME'):
- assert_(environ.has_key('PATH_INFO'),
+ assert_('PATH_INFO' in environ,
"One of SCRIPT_NAME or PATH_INFO are required (PATH_INFO "
"should at least be '/' if SCRIPT_NAME is empty)")
assert_(environ.get('SCRIPT_NAME') != '/',