Skip to content

Commit

Permalink
bpo-46436: Fix command-line option -d/--directory in module http.serv…
Browse files Browse the repository at this point in the history
…er (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
(cherry picked from commit 2d08034)

Co-authored-by: Géry Ogam <gery.ogam@gmail.com>

Co-authored-by: Géry Ogam <gery.ogam@gmail.com>
  • Loading branch information
miss-islington and geryogam committed Feb 14, 2022
1 parent 1953f03 commit 502ad39
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
27 changes: 14 additions & 13 deletions Lib/http/server.py
Expand Up @@ -103,8 +103,6 @@
import sys
import time
import urllib.parse
import contextlib
from functools import partial

from http import HTTPStatus

Expand Down Expand Up @@ -1240,7 +1238,6 @@ def test(HandlerClass=BaseHTTPRequestHandler,
"""
ServerClass.address_family, addr = _get_best_family(bind, port)

HandlerClass.protocol_version = protocol
with ServerClass(addr, HandlerClass) as httpd:
host, port = httpd.socket.getsockname()[:2]
Expand All @@ -1257,36 +1254,40 @@ def test(HandlerClass=BaseHTTPRequestHandler,

if __name__ == '__main__':
import argparse
import contextlib

parser = argparse.ArgumentParser()
parser.add_argument('--cgi', action='store_true',
help='Run as CGI Server')
help='run as CGI server')
parser.add_argument('--bind', '-b', metavar='ADDRESS',
help='Specify alternate bind address '
'[default: all interfaces]')
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,
help='specify alternate directory '
'(default: current directory)')
parser.add_argument('port', action='store', default=8000, type=int,
nargs='?',
help='Specify alternate port [default: 8000]')
help='specify alternate port (default: 8000)')
args = parser.parse_args()
if args.cgi:
handler_class = CGIHTTPRequestHandler
else:
handler_class = partial(SimpleHTTPRequestHandler,
directory=args.directory)
handler_class = SimpleHTTPRequestHandler

# ensure dual-stack is not disabled; ref #38907
class DualStackServer(ThreadingHTTPServer):

def server_bind(self):
# suppress exception when protocol is IPv4
with contextlib.suppress(Exception):
self.socket.setsockopt(
socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
return super().server_bind()

def finish_request(self, request, client_address):
self.RequestHandlerClass(request, client_address, self,
directory=args.directory)

test(
HandlerClass=handler_class,
ServerClass=DualStackServer,
Expand Down
@@ -0,0 +1,3 @@
Fix command-line option ``-d``/``--directory`` in module :mod:`http.server`
which is ignored when combined with command-line option ``--cgi``. Patch by
Géry Ogam.

0 comments on commit 502ad39

Please sign in to comment.