Bug 1428709 - Fix Python 3 imports of http.server in mozhttpd;r?davehunt draft
authorRaphael Pierzina <rpierzina@mozilla.com>
Tue, 03 Jul 2018 11:42:29 +0200
changeset 813512 4413aa4100a076b1e18012990a355b33db1a42eb
parent 813511 5c18627cb9b4487dc534ddf16c0c39daab3635e5
child 813513 9efb6d415b42636974336e623290f593909575f7
push id114922
push userbmo:rpierzina@mozilla.com
push dateTue, 03 Jul 2018 09:57:30 +0000
reviewersdavehunt
bugs1428709
milestone63.0a1
Bug 1428709 - Fix Python 3 imports of http.server in mozhttpd;r?davehunt MozReview-Commit-ID: 1fNdmG9YVQq
testing/mozbase/mozhttpd/mozhttpd/mozhttpd.py
--- 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