103
103
import sys
104
104
import time
105
105
import urllib .parse
106
- import contextlib
107
- from functools import partial
108
106
109
107
from http import HTTPStatus
110
108
@@ -1239,7 +1237,6 @@ def test(HandlerClass=BaseHTTPRequestHandler,
1239
1237
1240
1238
"""
1241
1239
ServerClass .address_family , addr = _get_best_family (bind , port )
1242
-
1243
1240
HandlerClass .protocol_version = protocol
1244
1241
with ServerClass (addr , HandlerClass ) as httpd :
1245
1242
host , port = httpd .socket .getsockname ()[:2 ]
@@ -1256,36 +1253,40 @@ def test(HandlerClass=BaseHTTPRequestHandler,
1256
1253
1257
1254
if __name__ == '__main__' :
1258
1255
import argparse
1256
+ import contextlib
1259
1257
1260
1258
parser = argparse .ArgumentParser ()
1261
1259
parser .add_argument ('--cgi' , action = 'store_true' ,
1262
- help = 'Run as CGI Server ' )
1260
+ help = 'run as CGI server ' )
1263
1261
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) ' )
1266
1264
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 ,
1271
1268
nargs = '?' ,
1272
- help = 'Specify alternate port [ default: 8000] ' )
1269
+ help = 'specify alternate port ( default: 8000) ' )
1273
1270
args = parser .parse_args ()
1274
1271
if args .cgi :
1275
1272
handler_class = CGIHTTPRequestHandler
1276
1273
else :
1277
- handler_class = partial (SimpleHTTPRequestHandler ,
1278
- directory = args .directory )
1274
+ handler_class = SimpleHTTPRequestHandler
1279
1275
1280
1276
# ensure dual-stack is not disabled; ref #38907
1281
1277
class DualStackServer (ThreadingHTTPServer ):
1278
+
1282
1279
def server_bind (self ):
1283
1280
# suppress exception when protocol is IPv4
1284
1281
with contextlib .suppress (Exception ):
1285
1282
self .socket .setsockopt (
1286
1283
socket .IPPROTO_IPV6 , socket .IPV6_V6ONLY , 0 )
1287
1284
return super ().server_bind ()
1288
1285
1286
+ def finish_request (self , request , client_address ):
1287
+ self .RequestHandlerClass (request , client_address , self ,
1288
+ directory = args .directory )
1289
+
1289
1290
test (
1290
1291
HandlerClass = handler_class ,
1291
1292
ServerClass = DualStackServer ,
0 commit comments