Patcher-ized BaseHTTPServer

This commit is contained in:
Ryan Williams
2009-11-29 11:26:09 -05:00
parent 6c6ba8e857
commit 61fabaa559

View File

@@ -1,54 +1,13 @@
import sys from eventlet import patcher
from eventlet.green import socket from eventlet.green import socket
from eventlet.green import SocketServer from eventlet.green import SocketServer
__import_lst = ['DEFAULT_ERROR_MESSAGE', '_quote_html', '__version__', '__all__', 'BaseHTTPRequestHandler'] patcher.inject('BaseHTTPServer',
__BaseHTTPServer = __import__('BaseHTTPServer') globals(),
for var in __import_lst: ('socket', socket),
exec "%s = __BaseHTTPServer.%s" % (var, var) ('SocketServer', SocketServer))
class HTTPServer(SocketServer.TCPServer):
allow_reuse_address = 1 # Seems to make sense in testing environment
def server_bind(self):
"""Override server_bind to store the server name."""
SocketServer.TCPServer.server_bind(self)
host, port = self.socket.getsockname()[:2]
self.server_name = socket.getfqdn(host)
self.server_port = port
class BaseHTTPRequestHandler(BaseHTTPRequestHandler):
def address_string(self):
host, port = self.client_address[:2]
return socket.getfqdn(host)
def test(HandlerClass = BaseHTTPRequestHandler,
ServerClass = HTTPServer, protocol="HTTP/1.0"):
"""Test the HTTP request handler class.
This runs an HTTP server on port 8000 (or the first command line
argument).
"""
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8000
server_address = ('', port)
HandlerClass.protocol_version = protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()
del patcher
if __name__ == '__main__': if __name__ == '__main__':
test() test()