diff options
Diffstat (limited to 'Lib/wsgiref')
-rw-r--r-- | Lib/wsgiref/handlers.py | 63 | ||||
-rw-r--r-- | Lib/wsgiref/headers.py | 36 | ||||
-rw-r--r-- | Lib/wsgiref/simple_server.py | 50 | ||||
-rw-r--r-- | Lib/wsgiref/util.py | 42 | ||||
-rw-r--r-- | Lib/wsgiref/validate.py | 2 |
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') != '/', |