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