Bug 1428709 - Fix Python 3 imports of http.server in mozhttpd;r?davehunt
MozReview-Commit-ID: 1fNdmG9YVQq
--- a/testing/mozbase/mozhttpd/mozhttpd/mozhttpd.py
+++ b/testing/mozbase/mozhttpd/mozhttpd/mozhttpd.py
@@ -1,34 +1,41 @@
#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import absolute_import, print_function
-import BaseHTTPServer
-import SimpleHTTPServer
+
import errno
import logging
import threading
import posixpath
import socket
import sys
import os
import urllib
import urlparse
import re
import moznetwork
import time
from SocketServer import ThreadingMixIn
+PY3 = sys.version_info[0] == 3
-class EasyServer(ThreadingMixIn, BaseHTTPServer.HTTPServer):
+if PY3:
+ # BaseHTTPServer and SimpleHTTPServer have been merged in Python 3
+ from http.server import HTTPServer, SimpleHTTPRequestHandler
+else:
+ from BaseHTTPServer import HTTPServer
+ from SimpleHTTPServer import SimpleHTTPRequestHandler
+
+class EasyServer(ThreadingMixIn, HTTPServer):
allow_reuse_address = True
acceptable_errors = (errno.EPIPE, errno.ECONNABORTED)
def handle_error(self, request, client_address):
error = sys.exc_info()[1]
if ((isinstance(error, socket.error) and
isinstance(error.args, tuple) and
@@ -58,26 +65,26 @@ class Request(object):
except ValueError:
body_len = 0
if body_len and rfile:
self.body = rfile.read(body_len)
else:
self.body = None
-class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+class RequestHandler(SimpleHTTPRequestHandler):
docroot = os.getcwd() # current working directory at time of import
proxy_host_dirs = False
request_log = []
log_requests = False
request = None
def __init__(self, *args, **kwargs):
- SimpleHTTPServer.SimpleHTTPRequestHandler.__init__(self, *args, **kwargs)
+ SimpleHTTPRequestHandler.__init__(self, *args, **kwargs)
self.extensions_map['.svg'] = 'image/svg+xml'
def _try_handler(self, method):
if self.log_requests:
self.request_log.append({'method': method,
'path': self.request.path,
'time': time.time()})
@@ -110,31 +117,31 @@ class RequestHandler(SimpleHTTPServer.Si
if path_components[:len(prefix_components)] == prefix_components:
return ('/'.join(path_components[len(prefix_components):]),
disk_path)
if self.docroot:
return self.request.path, self.docroot
return None
def parse_request(self):
- retval = SimpleHTTPServer.SimpleHTTPRequestHandler.parse_request(self)
+ retval = SimpleHTTPRequestHandler.parse_request(self)
self.request = Request(self.path, self.headers, self.rfile)
return retval
def do_GET(self):
if not self._try_handler('GET'):
res = self._find_path()
if res:
self.path, self.disk_root = res
# don't include query string and fragment, and prepend
# host directory if required.
if self.request.netloc and self.proxy_host_dirs:
self.path = '/' + self.request.netloc + \
self.path
- SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
+ SimpleHTTPRequestHandler.do_GET(self)
else:
self.send_response(404)
self.end_headers()
self.wfile.write('')
def do_POST(self):
# if we don't have a match, we always fall through to 404 (this may
# not be "technically" correct if we have a local file at the same