diff options
author | Stéphane Wirtel <stephane@wirtel.be> | 2017-05-24 07:29:06 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-05-24 07:29:06 (GMT) |
commit | a17a2f52c4c3b37414da95a152fc8669978c7c83 (patch) | |
tree | abf6327c00ac9ae647474b4b63a704a396ba5a58 /Lib | |
parent | 07244a83014fad42da937c17d98474b47a570bf7 (diff) | |
download | cpython-a17a2f52c4c3b37414da95a152fc8669978c7c83.zip cpython-a17a2f52c4c3b37414da95a152fc8669978c7c83.tar.gz cpython-a17a2f52c4c3b37414da95a152fc8669978c7c83.tar.bz2 |
bpo-28707: Add the directory parameter to http.server.SimpleHTTPRequestHandler and http.server module (#1776)
* bpo-28707: call the constructor of SimpleHTTPRequestHandler in the test with a mock object
* bpo-28707: Add the directory parameter to http.server.SimpleHTTPRequestHandler and http.server module
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/http/server.py | 15 | ||||
-rw-r--r-- | Lib/test/test_httpservers.py | 7 |
2 files changed, 19 insertions, 3 deletions
diff --git a/Lib/http/server.py b/Lib/http/server.py index 7b3e701..b1151a2 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -103,6 +103,7 @@ import socketserver import sys import time import urllib.parse +from functools import partial from http import HTTPStatus @@ -634,6 +635,12 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): server_version = "SimpleHTTP/" + __version__ + def __init__(self, *args, directory=None, **kwargs): + if directory is None: + directory = os.getcwd() + self.directory = directory + super().__init__(*args, **kwargs) + def do_GET(self): """Serve a GET request.""" f = self.send_head() @@ -806,7 +813,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): path = posixpath.normpath(path) words = path.split('/') words = filter(None, words) - path = os.getcwd() + path = self.directory for word in words: if os.path.dirname(word) or word in (os.curdir, os.pardir): # Ignore components that are not a simple file/directory name @@ -1234,6 +1241,9 @@ if __name__ == '__main__': parser.add_argument('--bind', '-b', default='', metavar='ADDRESS', help='Specify alternate bind address ' '[default: all interfaces]') + parser.add_argument('--directory', '-d', default=os.getcwd(), + help='Specify alternative directory ' + '[default:current directory]') parser.add_argument('port', action='store', default=8000, type=int, nargs='?', @@ -1242,5 +1252,6 @@ if __name__ == '__main__': if args.cgi: handler_class = CGIHTTPRequestHandler else: - handler_class = SimpleHTTPRequestHandler + handler_class = partial(SimpleHTTPRequestHandler, + directory=args.directory) test(HandlerClass=handler_class, port=args.port, bind=args.bind) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index dafcb0c..cdc5202 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -22,6 +22,7 @@ import urllib.parse import tempfile import time import datetime +from unittest import mock from io import BytesIO import unittest @@ -782,7 +783,11 @@ class CGIHTTPServerTestCase(BaseTestCase): class SocketlessRequestHandler(SimpleHTTPRequestHandler): - def __init__(self): + def __init__(self, *args, **kwargs): + request = mock.Mock() + request.makefile.return_value = BytesIO() + super().__init__(request, None, None) + self.get_called = False self.protocol_version = "HTTP/1.1" |