Skip to content

Commit 2d08034

Browse files
authored
bpo-46436: Fix command-line option -d/--directory in module http.server (GH-30701)
Fix command-line option -d/--directory in http.server main function that was ignored when combined with --cgi. Automerge-Triggered-By: GH:merwok
1 parent 734b1f1 commit 2d08034

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

Lib/http/server.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,6 @@
103103
import sys
104104
import time
105105
import urllib.parse
106-
import contextlib
107-
from functools import partial
108106

109107
from http import HTTPStatus
110108

@@ -1239,7 +1237,6 @@ def test(HandlerClass=BaseHTTPRequestHandler,
12391237
12401238
"""
12411239
ServerClass.address_family, addr = _get_best_family(bind, port)
1242-
12431240
HandlerClass.protocol_version = protocol
12441241
with ServerClass(addr, HandlerClass) as httpd:
12451242
host, port = httpd.socket.getsockname()[:2]
@@ -1256,36 +1253,40 @@ def test(HandlerClass=BaseHTTPRequestHandler,
12561253

12571254
if __name__ == '__main__':
12581255
import argparse
1256+
import contextlib
12591257

12601258
parser = argparse.ArgumentParser()
12611259
parser.add_argument('--cgi', action='store_true',
1262-
help='Run as CGI Server')
1260+
help='run as CGI server')
12631261
parser.add_argument('--bind', '-b', metavar='ADDRESS',
1264-
help='Specify alternate bind address '
1265-
'[default: all interfaces]')
1262+
help='specify alternate bind address '
1263+
'(default: all interfaces)')
12661264
parser.add_argument('--directory', '-d', default=os.getcwd(),
1267-
help='Specify alternative directory '
1268-
'[default:current directory]')
1269-
parser.add_argument('port', action='store',
1270-
default=8000, type=int,
1265+
help='specify alternate directory '
1266+
'(default: current directory)')
1267+
parser.add_argument('port', action='store', default=8000, type=int,
12711268
nargs='?',
1272-
help='Specify alternate port [default: 8000]')
1269+
help='specify alternate port (default: 8000)')
12731270
args = parser.parse_args()
12741271
if args.cgi:
12751272
handler_class = CGIHTTPRequestHandler
12761273
else:
1277-
handler_class = partial(SimpleHTTPRequestHandler,
1278-
directory=args.directory)
1274+
handler_class = SimpleHTTPRequestHandler
12791275

12801276
# ensure dual-stack is not disabled; ref #38907
12811277
class DualStackServer(ThreadingHTTPServer):
1278+
12821279
def server_bind(self):
12831280
# suppress exception when protocol is IPv4
12841281
with contextlib.suppress(Exception):
12851282
self.socket.setsockopt(
12861283
socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
12871284
return super().server_bind()
12881285

1286+
def finish_request(self, request, client_address):
1287+
self.RequestHandlerClass(request, client_address, self,
1288+
directory=args.directory)
1289+
12891290
test(
12901291
HandlerClass=handler_class,
12911292
ServerClass=DualStackServer,
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix command-line option ``-d``/``--directory`` in module :mod:`http.server`
2+
which is ignored when combined with command-line option ``--cgi``. Patch by
3+
Géry Ogam.

0 commit comments

Comments
 (0)