Patchwork [1,of,3] py3: re-implement the BaseHTTPServer.test() function

login
register
mail settings
Submitter Pulkit Goyal
Date July 14, 2016, 9:05 a.m.
Message ID <c8da57d0799eadf41bd8.1468487107@pulkit-goyal.Home>
Download mbox | patch
Permalink /patch/15846/
State Changes Requested
Headers show

Comments

Pulkit Goyal - July 14, 2016, 9:05 a.m.
# HG changeset patch
# User Pulkit Goyal <7895pulkit@gmail.com>
# Date 1468430122 -19800
#      Wed Jul 13 22:45:22 2016 +0530
# Node ID c8da57d0799eadf41bd838c5c2e334bde0c830ae
# Parent  e5b4d79a9140c3d90e9b6aa22070351b73ef2d4c
py3: re-implement the BaseHTTPServer.test() function

The function is changed in python 3, it does not use sys.argv now,
rather it parses the command line now. So the latest version of function is
re-implemented. One can look at https://hg.python.org/cpython/file/3.5/Lib/http/server.py#l1184
 and https://hg.python.org/cpython/file/2.7/Lib/BaseHTTPServer.py#l590 to see the change.
Yuya Nishihara - July 14, 2016, 2:39 p.m.
On Thu, 14 Jul 2016 14:35:07 +0530, Pulkit Goyal wrote:
> # HG changeset patch
> # User Pulkit Goyal <7895pulkit@gmail.com>
> # Date 1468430122 -19800
> #      Wed Jul 13 22:45:22 2016 +0530
> # Node ID c8da57d0799eadf41bd838c5c2e334bde0c830ae
> # Parent  e5b4d79a9140c3d90e9b6aa22070351b73ef2d4c
> py3: re-implement the BaseHTTPServer.test() function
> 
> The function is changed in python 3, it does not use sys.argv now,
> rather it parses the command line now. So the latest version of function is
> re-implemented. One can look at https://hg.python.org/cpython/file/3.5/Lib/http/server.py#l1184
>  and https://hg.python.org/cpython/file/2.7/Lib/BaseHTTPServer.py#l590 to see the change.
> 
> diff -r e5b4d79a9140 -r c8da57d0799e tests/tinyproxy.py
> --- a/tests/tinyproxy.py	Sat May 21 15:23:21 2016 +0900
> +++ b/tests/tinyproxy.py	Wed Jul 13 22:45:22 2016 +0530
> @@ -15,6 +15,7 @@
>  __version__ = "0.2.1"
>  
>  import BaseHTTPServer
> +import argparse
>  import os
>  import select
>  import socket
> @@ -143,6 +144,19 @@
>          a.write(str(os.getpid()) + "\n")
>          a.close()
>  
> +def runserver(port=8000, bind=""):
> +    server_address = (bind, port)
> +    ProxyHandler.protocol_version = "HTTP/1.0"
> +    httpd = ThreadingHTTPServer(server_address, ProxyHandler)
> +    sa = httpd.socket.getsockname()
> +    print("Serving HTTP on", sa[0], "port", sa[1], "...")
> +    try:
> +        httpd.serve_forever()
> +    except KeyboardInterrupt:
> +        print("\nKeyboard interrupt received, exiting.")
> +        httpd.server_close()
> +        sys.exit(0)
> +
>  if __name__ == '__main__':
>      argv = sys.argv
>      if argv[1:] and argv[1] in ('-h', '--help'):
> @@ -158,4 +172,14 @@
>              del argv[2:]
>          else:
>              print("Any clients will be served...")
> -        BaseHTTPServer.test(ProxyHandler, ThreadingHTTPServer)
> +
> +        parser = argparse.ArgumentParser()
> +        parser.add_argument('--bind', '-b', default='', metavar='ADDRESS',
> +                        help='Specify alternate bind address '
> +                             '[default: all interfaces]')
> +        parser.add_argument('port', action='store',
> +                        default=8000, type=int,
> +                        nargs='?',
> +                        help='Specify alternate port [default: 8000]')
> +        args = parser.parse_args()
> +        runserver(port=args.port, bind=args.bind)

argparse is Python 2.7 thing. Please use optparse instead.

Patch

diff -r e5b4d79a9140 -r c8da57d0799e tests/tinyproxy.py
--- a/tests/tinyproxy.py	Sat May 21 15:23:21 2016 +0900
+++ b/tests/tinyproxy.py	Wed Jul 13 22:45:22 2016 +0530
@@ -15,6 +15,7 @@ 
 __version__ = "0.2.1"
 
 import BaseHTTPServer
+import argparse
 import os
 import select
 import socket
@@ -143,6 +144,19 @@ 
         a.write(str(os.getpid()) + "\n")
         a.close()
 
+def runserver(port=8000, bind=""):
+    server_address = (bind, port)
+    ProxyHandler.protocol_version = "HTTP/1.0"
+    httpd = ThreadingHTTPServer(server_address, ProxyHandler)
+    sa = httpd.socket.getsockname()
+    print("Serving HTTP on", sa[0], "port", sa[1], "...")
+    try:
+        httpd.serve_forever()
+    except KeyboardInterrupt:
+        print("\nKeyboard interrupt received, exiting.")
+        httpd.server_close()
+        sys.exit(0)
+
 if __name__ == '__main__':
     argv = sys.argv
     if argv[1:] and argv[1] in ('-h', '--help'):
@@ -158,4 +172,14 @@ 
             del argv[2:]
         else:
             print("Any clients will be served...")
-        BaseHTTPServer.test(ProxyHandler, ThreadingHTTPServer)
+
+        parser = argparse.ArgumentParser()
+        parser.add_argument('--bind', '-b', default='', metavar='ADDRESS',
+                        help='Specify alternate bind address '
+                             '[default: all interfaces]')
+        parser.add_argument('port', action='store',
+                        default=8000, type=int,
+                        nargs='?',
+                        help='Specify alternate port [default: 8000]')
+        args = parser.parse_args()
+        runserver(port=args.port, bind=args.bind)